61 lines
1.4 KiB
JavaScript
61 lines
1.4 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))
|
|
)
|
|
|
|
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",
|
|
})
|
|
}
|