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.

112 lines
3.6KB

  1. import { h, Component } from 'preact';
  2. import WBNavbarCommon from 'wb-navbar-common';
  3. import WBArvadosCrumbs from 'wb-arvados-crumbs';
  4. import makeArvadosRequest from 'make-arvados-request';
  5. import detectUuids from 'detect-uuids';
  6. import arvadosTypeName from 'arvados-type-name';
  7. import urlForObject from 'url-for-object';
  8. import detectHashes from 'detect-hashes';
  9. import WBCommonFields from 'wb-common-fields';
  10. import WBContainerRequestFields from 'wb-container-request-fields';
  11. class WBProcessView extends Component {
  12. constructor(...args) {
  13. super(...args);
  14. this.state.objectUrls = [];
  15. }
  16. componentDidMount() {
  17. let { arvHost, arvToken } = this.props.app.state;
  18. let prom = makeArvadosRequest(arvHost, arvToken,
  19. '/arvados/v1/container_requests/' + this.props.uuid);
  20. let req;
  21. let cont;
  22. prom = prom.then(xhr => {
  23. req = xhr.response;
  24. if (req.container_uuid) {
  25. let prom_1 = makeArvadosRequest(arvHost, arvToken,
  26. '/arvados/v1/containers/' + req.container_uuid);
  27. prom_1 = prom_1.then(xhr => (cont = xhr.response));
  28. return prom_1;
  29. }
  30. });
  31. //prom = prom.then(xhr => (cont = xhr.response));
  32. prom = prom.then(() => {
  33. let hashes = detectHashes([ req, cont ]);
  34. let filters = [
  35. [ 'portable_data_hash', 'in', hashes ]
  36. ];
  37. return makeArvadosRequest(arvHost, arvToken,
  38. '/arvados/v1/collections?filters=' +
  39. encodeURIComponent(JSON.stringify(filters)));
  40. });
  41. prom = prom.then(xhr => {
  42. let colUuids = xhr.response['items'].map(item => item.uuid);
  43. let uuids = detectUuids([ req, cont ]);
  44. let dict = {};
  45. colUuids.map(u => (dict[u] = true));
  46. uuids.map(u => (dict[u] = true));
  47. return Object.keys(dict);
  48. });
  49. prom = prom.then(uuids => {
  50. // let uuids = detectUuids([ req, cont ]);
  51. let objectTypes = uuids.map(u => arvadosTypeName(u.split('-')[1]) + 's');
  52. let objQueries = {};
  53. objectTypes.map(t => (objQueries[t] = []));
  54. uuids.map((u, idx) => (objQueries[objectTypes[idx]].push(u)));
  55. let prom_1 = new Promise(accept => accept());
  56. let objects = [];
  57. // delete objQueries['users'];
  58. delete objQueries['api_clients'];
  59. for (let k in objQueries) {
  60. let filters = [
  61. ['uuid', 'in', objQueries[k]]
  62. ];
  63. prom_1 = prom_1.then(() => makeArvadosRequest(arvHost, arvToken,
  64. '/arvados/v1/' + k + '?filters=' +
  65. encodeURIComponent(JSON.stringify(filters))));
  66. prom_1 = prom_1.then(xhr => (objects = objects.concat(xhr.response['items'])));
  67. }
  68. prom_1 = prom_1.then(() => objects);
  69. return prom_1;
  70. });
  71. prom = prom.then(objects => {
  72. let objDict = {};
  73. objects.map(o => (objDict[o['uuid']] = o));
  74. let urls = objects.map(o => urlForObject(o));
  75. this.setState({ 'objectUrls': urls });
  76. });
  77. }
  78. render({ app, uuid }, { objectUrls }) {
  79. return (
  80. <div>
  81. <WBNavbarCommon app={ app } />
  82. <WBArvadosCrumbs app={ app } uuid={ uuid } />
  83. <div class="my-2">
  84. This is the process view for { uuid }
  85. </div>
  86. <h2>Common Fields</h2>
  87. <WBCommonFields app={ app } uuid={ uuid } />
  88. <h2>Container Request Fields</h2>
  89. <WBContainerRequestFields app={ app } uuid={ uuid } />
  90. <div>
  91. <a href="/browse">Click here</a>
  92. </div>
  93. <ul>
  94. { objectUrls.map(url => (
  95. <li><a href={ url }>{ url }</a></li>
  96. )) }
  97. </ul>
  98. </div>
  99. );
  100. }
  101. }
  102. export default WBProcessView;