57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
import setup from "./setup";
|
|
import records from "./records";
|
|
import {register} from "./diagnosticPlugin";
|
|
import pLimit from "p-limit";
|
|
import papa from "papaparse";
|
|
import {writeFileSync} from "fs";
|
|
|
|
const limit = pLimit(1);
|
|
|
|
const iterateActions = async (apis,getIterator) => {
|
|
const iterator = getIterator(apis);
|
|
let result = iterator();
|
|
while(!result.done) {
|
|
try {
|
|
const runPromises = result.action.iterator(i =>
|
|
limit(() => result.action.run(i))
|
|
);
|
|
|
|
let n = 1;
|
|
await Promise.all(runPromises);
|
|
result = iterator();
|
|
} catch(e) {
|
|
e.message = `FAILED: ${result.action.name}: ${e.message}`;
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
|
|
export default async (datastore,config) => {
|
|
|
|
const apis = await setup(datastore);
|
|
|
|
const diagnostics = [];
|
|
let currentRecordCount = 0;
|
|
|
|
register(apis, (ev, elapsed, info) => {
|
|
if(ev === "recordApi:save:onComplete") {
|
|
currentRecordCount++;
|
|
} else if(ev === "recordApi:delete:onComplete") {
|
|
currentRecordCount--;
|
|
}
|
|
diagnostics.push(
|
|
{method:ev, elapsed, info, count:currentRecordCount}
|
|
);
|
|
console.log(`${ev} ${info} ${elapsed/1000} s`);
|
|
}, [
|
|
"recordApi:save",
|
|
"recordApi:load",
|
|
"viewApi:listItems",
|
|
"recordApi:delete"]);
|
|
|
|
await iterateActions(apis, records);
|
|
|
|
const diagnosticscsv = papa.unparse(diagnostics);
|
|
|
|
writeFileSync(config.root + "\\results.csv", diagnosticscsv, {encoding:"utf8"});
|
|
}; |