api-local.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. */
  6. import { ConsoleLogger } from '../../../mol-util/console-logger';
  7. import { now } from '../../../mol-util/now';
  8. import { PerformanceMonitor } from '../../../mol-util/performance-monitor';
  9. import { FileResultWriter } from '../utils/writer';
  10. import { QueryName } from './api';
  11. import { Job, JobEntry, JobManager } from './jobs';
  12. import { resolveJob } from './query';
  13. import { StructureCache } from './structure-wrapper';
  14. export type LocalInput = {
  15. input: string,
  16. output: string,
  17. query: QueryName,
  18. modelNums?: number[],
  19. params?: any,
  20. binary?: boolean
  21. }[];
  22. export async function runLocal(input: LocalInput) {
  23. if (!input.length) {
  24. ConsoleLogger.error('Local', 'No input');
  25. return;
  26. }
  27. for (const job of input) {
  28. const binary = /\.bcif/.test(job.output);
  29. JobManager.add({
  30. entries: [JobEntry({
  31. entryId: job.input,
  32. queryName: job.query,
  33. queryParams: job.params || { },
  34. modelNums: job.modelNums,
  35. })],
  36. writer: new FileResultWriter(job.output),
  37. options: {
  38. outputFilename: job.output,
  39. binary
  40. }
  41. });
  42. }
  43. JobManager.sort();
  44. const started = now();
  45. let job: Job | undefined = JobManager.getNext();
  46. let key = job.entries[0].key;
  47. let progress = 0;
  48. while (job) {
  49. try {
  50. await resolveJob(job);
  51. job.writer.end();
  52. ConsoleLogger.logId(job.id, 'Query', 'Written.');
  53. if (JobManager.hasNext()) {
  54. job = JobManager.getNext();
  55. if (key !== job.entries[0].key) StructureCache.expire(key);
  56. key = job.entries[0].key;
  57. } else {
  58. break;
  59. }
  60. } catch (e) {
  61. ConsoleLogger.errorId(job.id, e);
  62. }
  63. ConsoleLogger.log('Progress', `[${++progress}/${input.length}] after ${PerformanceMonitor.format(now() - started)}.`);
  64. }
  65. ConsoleLogger.log('Progress', `Done in ${PerformanceMonitor.format(now() - started)}.`);
  66. StructureCache.expireAll();
  67. }