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!
Browse Source

Added portable data hash detection.

pull/1/head
parent
commit
9f18e60358
2 changed files with 45 additions and 0 deletions
  1. +27
    -0
      frontend/src/js/misc/detect-hashes.js
  2. +18
    -0
      frontend/src/js/page/wb-process-view.js

+ 27
- 0
frontend/src/js/misc/detect-hashes.js View File

@@ -0,0 +1,27 @@
function detectHashes(obj) {
let Q = [ obj ];
let matches = {};
while (Q.length > 0) {
let item = Q.pop();
if (!item)
continue;
if (typeof(item) === 'string') {
// use regexes
let rx = /[a-f0-9]{32}\+[0-9]+/g;
for (let m = rx.exec(item); m; m = rx.exec(item))
matches[m[0]] = true;
} else if (typeof(item) === 'object') {
Object.keys(item).map(k => Q.push(item[k]));
}
}
matches = Object.keys(matches);
return matches;
}
export default detectHashes;

+ 18
- 0
frontend/src/js/page/wb-process-view.js View File

@@ -5,6 +5,7 @@ import makeArvadosRequest from 'make-arvados-request';
import detectUuids from 'detect-uuids';
import arvadosTypeName from 'arvados-type-name';
import urlForObject from 'url-for-object';
import detectHashes from 'detect-hashes';
class WBProcessView extends Component {
constructor(...args) {
@@ -29,7 +30,24 @@ class WBProcessView extends Component {
});
//prom = prom.then(xhr => (cont = xhr.response));
prom = prom.then(() => {
let hashes = detectHashes([ req, cont ]);
let filters = [
[ 'portable_data_hash', 'in', hashes ]
];
return makeArvadosRequest(arvHost, arvToken,
'/arvados/v1/collections?filters=' +
encodeURIComponent(JSON.stringify(filters)));
});
prom = prom.then(xhr => {
let colUuids = xhr.response['items'].map(item => item.uuid);
let uuids = detectUuids([ req, cont ]);
let dict = {};
colUuids.map(u => (dict[u] = true));
uuids.map(u => (dict[u] = true));
return Object.keys(dict);
});
prom = prom.then(uuids => {
// let uuids = detectUuids([ req, cont ]);
let objectTypes = uuids.map(u => arvadosTypeName(u.split('-')[1]) + 's');
let objQueries = {};
objectTypes.map(t => (objQueries[t] = []));


Loading…
Cancel
Save