IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
4.8KB

  1. //
  2. // Copyright (C) Stanislaw Adaszewski, 2020
  3. // Contact: s.adaszewski@gmail.com
  4. // Website: https://adared.ch/wba
  5. // License: GNU Affero General Public License, Version 3
  6. //
  7. import { h, Component } from 'preact';
  8. import WBTable from 'wb-table';
  9. import makeArvadosRequest from 'make-arvados-request';
  10. import arvadosTypeName from 'arvados-type-name';
  11. import arvadosObjectName from 'arvados-object-name';
  12. import urlForObject from 'url-for-object';
  13. import wbFormatDate from 'wb-format-date';
  14. import WBNameAndUuid from 'wb-name-and-uuid';
  15. import WBAccordion from 'wb-accordion';
  16. import WBJsonViewer from 'wb-json-viewer';
  17. import wbUpdateField from 'wb-update-field';
  18. import WBJsonEditor from 'wb-json-editor';
  19. class WBContainerRequestFields extends Component {
  20. componentDidMount() {
  21. this.fetchData();
  22. }
  23. componentWillReceiveProps(nextProps) {
  24. this.props = nextProps;
  25. this.fetchData();
  26. }
  27. prepareRows(item) {
  28. const { app } = this.props;
  29. const { arvHost, arvToken } = app.state;
  30. let rows = [
  31. [ 'Name', item.name ],
  32. [ 'Description', item.description || (<i>{ String(item.description) }</i>) ],
  33. [ 'Properties', (
  34. <WBJsonEditor name="Properties" app={ app } value={ item.properties }
  35. onChange={ value => wbUpdateField(arvHost, arvToken, item.uuid, 'properties', value)
  36. .then(() => { item.properties = value; this.prepareRows(item); }) } />
  37. ) ],
  38. [ 'State', item.state ],
  39. [ 'Requesting Container', (
  40. <WBNameAndUuid app={ app } uuid={ item.requesting_container_uuid } />
  41. ) ],
  42. [ 'Container', (
  43. <WBNameAndUuid app={ app } uuid={ item.container_uuid } />
  44. ) ],
  45. [ 'Container Count Max', item.container_count_max ],
  46. [ 'Mounts', (
  47. <WBAccordion names={ Object.keys(item.mounts) }
  48. cardHeaderClass="card-header-sm">
  49. { Object.keys(item.mounts).map(k => (
  50. <WBJsonViewer app={ app } value={ item.mounts[k] } />
  51. )) }
  52. </WBAccordion>
  53. ) ],
  54. [ 'Runtime Constraints', (
  55. <WBAccordion names={ ['Runtime Constraints'] }
  56. cardHeaderClass="card-header-sm">
  57. <WBJsonViewer app={ app } value={ item.runtime_constraints } />
  58. </WBAccordion>
  59. ) ],
  60. [ 'Scheduling Parameters', (
  61. <WBAccordion names={ ['Scheduling Parameters'] }
  62. cardHeaderClass="card-header-sm">
  63. <WBJsonViewer app={ app } value={ item.scheduling_parameters } />
  64. </WBAccordion>
  65. ) ],
  66. [ 'Container Image', (
  67. <WBNameAndUuid app={ app } uuid={ item.container_image } />
  68. ) ],
  69. [ 'Environment', (
  70. <WBAccordion names={ ['Environment'] }
  71. cardHeaderClass="card-header-sm">
  72. <WBJsonViewer app={ app } value={ item.environment } />
  73. </WBAccordion>
  74. ) ],
  75. [ 'Working Directory', item.cwd ],
  76. [ 'Command', (
  77. <WBJsonViewer app={ app } value={ item.command } pretty={ false } />
  78. ) ],
  79. [ 'Output Path', item.output_path ],
  80. [ 'Output Name', item.output_name ],
  81. [ 'Output TTL', item.output_ttl ],
  82. [ 'Priority', item.priority ],
  83. [ 'Expires At', wbFormatDate(item.expires_at) ],
  84. [ 'Use Existing', String(item.use_existing) ],
  85. [ 'Log', (
  86. <WBNameAndUuid app={ app } uuid={ item.log_uuid } />
  87. ) ],
  88. [ 'Output', (
  89. <WBNameAndUuid app={ app } uuid={ item.output_uuid } />
  90. ) ],
  91. [ 'Filters', (
  92. item.filters ? (<WBJsonViewer app={ app } value={ item.filters } />) : (<i>{ String(item.filters) }</i>)
  93. ) ],
  94. [ 'Runtime Token', item.runtime_token || (<i>{ String(item.runtime_token) }</i>) ],
  95. [ 'Runtime User', (
  96. <WBNameAndUuid app={ app } uuid={ item.runtime_user } />
  97. ) ],
  98. [ 'Runtime Auth Scopes', (
  99. item.runtime_auth_scopes ? (
  100. <WBJsonViewer app={ app } value={ item.runtime_auth_scopes } />
  101. ) : (
  102. <i>{ String(item.runtime_auth_scopes) }</i>
  103. )
  104. ) ]
  105. ];
  106. rows = rows.map(r => [r[0], r[1] ? r[1] : (<i>{ String(r[1]) }</i>)]);
  107. this.setState({ rows });
  108. }
  109. fetchData() {
  110. let { uuid, app } = this.props;
  111. let { arvHost, arvToken } = app.state;
  112. let item;
  113. let prom = makeArvadosRequest(arvHost, arvToken,
  114. '/arvados/v1/container_requests/' + uuid);
  115. prom = prom.then(xhr => this.prepareRows(xhr.response));
  116. }
  117. render({}, { rows }) {
  118. return (
  119. rows ? (
  120. <WBTable columns={ [ "Name", "Value" ] }
  121. headerClasses={ [ "col-sm-2", "col-sm-4" ] }
  122. rows={ rows }
  123. verticalHeader={ true } />
  124. ) : (
  125. <div>Loading...</div>
  126. )
  127. );
  128. }
  129. }
  130. export default WBContainerRequestFields;