More score migration

This commit is contained in:
zkldi
2021-04-21 16:23:44 +01:00
parent 4ed5f88c89
commit f263678399
4 changed files with 130 additions and 14 deletions
+72 -2
View File
@@ -1,10 +1,11 @@
import Prudence, { PrudenceSchema } from "prudence";
import db from "../db/db";
import { STATIC_SCHEMAS } from "../db/schemas";
import { PRUDENCE_SCORE_SCHEMAS, STATIC_SCHEMAS } from "../db/schemas";
import CreateLogCtx from "../logger";
import fs from "fs";
import path from "path";
import { PrudenceError } from "prudence/js/error";
import { supportedGames, validPlaytypes } from "kamaitachi-common/js/config";
const BASE_DIR = path.join(__dirname, "./validate-database-errs");
@@ -52,4 +53,73 @@ async function ValidateStaticSchemas(): Promise<void> {
process.exit(0);
}
ValidateStaticSchemas();
async function ValidateScores(): Promise<void> {
let globalStart = process.hrtime.bigint();
let globalTotal = 0;
let globalSuccess = 0;
let globalFail = 0;
for (const game of supportedGames) {
for (const playtype of validPlaytypes[game]) {
// @ts-expect-error shut up
let schema = PRUDENCE_SCORE_SCHEMAS[game][playtype];
let successCount = 0;
let total = 0;
let fails: { err: PrudenceError; doc: unknown }[] = [];
logger.info(`=== Validating Collection scores (${game} ${playtype}) ... ===`);
let start = process.hrtime.bigint();
// eslint-disable-next-line no-await-in-loop
await db.scores
.find({ playtype, game }, { projection: { _id: 0 } })
// @ts-expect-error shut UP
.each((c: unknown) => {
total++;
let res = Prudence(c, schema);
if (res === null) {
successCount++;
} else {
logger.error(`[${res.keychain}] ${res.message}: ${res.userVal}`);
fails.push({ err: res, doc: c });
}
});
let end = process.hrtime.bigint();
logger.info(`Validated ${total} objects. Took ${Number(end - start) / 1e9} seconds.`);
logger.info(`Success: ${successCount} (${((successCount * 100) / total).toFixed(2)}%)`);
logger.info(`Fail: ${fails.length} (${((fails.length * 100) / total).toFixed(2)}%)`);
if (fails.length !== 0) {
logger.severe(`Invalid documents found! Please resolve them.`);
fs.writeFileSync(
path.join(BASE_DIR, `scores-${game}-${playtype}.json`),
JSON.stringify(fails)
);
fs.writeFileSync(
path.join(BASE_DIR, `scores-${game}-${playtype}.log`),
`Validated ${total} objects. Took ${
Number(end - start) / 1e9
} seconds.\nSuccess: ${successCount} (${((successCount * 100) / total).toFixed(
2
)}%\nFail: ${fails.length} (${((fails.length * 100) / total).toFixed(2)}%))`
);
}
globalTotal += total;
globalFail += fails.length;
globalSuccess += successCount;
}
}
let globalEnd = process.hrtime.bigint();
logger.info(
`Validated ${globalTotal} objects. Took ${Number(globalEnd - globalStart) / 1e9} seconds.`
);
logger.info(`Success: ${globalSuccess} (${((globalSuccess * 100) / globalTotal).toFixed(2)}%)`);
logger.info(`Fail: ${globalFail} (${((globalFail * 100) / globalTotal).toFixed(2)}%)`);
}
// ValidateStaticSchemas();
ValidateScores();