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)) ) 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", }) }