Files
jobtrackingapp/docs/redesign/phase-9/p9-requal-01/performance/metrics.mjs
T
cesnimda 5ac11549b2
MariaDB persistence qualification / mariadb (push) Failing after 7s
test: harden database qualification startup and cleanup evidence
2026-10-24 14:04:57 +02:00

48 lines
2.6 KiB
JavaScript

import assert from 'node:assert/strict';
import { performance } from 'node:perf_hooks';
import { setTimeout as sleep } from 'node:timers/promises';
export const durationMs = 15 * 60 * 1000;
export const paceMs = 500;
export function persistedCareerProfile(profile) {
// StructuredCvProfileJson.SerializePersisted omits null properties; CV overrides are a separate contract.
return JSON.parse(JSON.stringify(profile, (_key, value) => value === null ? undefined : value));
}
export function summarize(rows) {
const values = rows.filter(row => !row.error && row.status === 200).map(row => row.ms).sort((a, b) => a - b);
const percentile = p => values.length ? values[Math.ceil(values.length * p) - 1] : null;
return { attempts: rows.length, failures: rows.filter(row => row.error || row.status !== 200).length,
p50Ms: percentile(.5), p95Ms: percentile(.95), p99Ms: percentile(.99), maxMs: values.at(-1) ?? null };
}
export async function waitUntil(target) {
while (performance.now() < target) await sleep(Math.min(1000, target - performance.now()));
}
export function assertMembership(actual, expected) {
assert.equal(actual.length, 250);
assert.equal(new Set(actual).size, 250);
assert.deepEqual([...actual].sort((a, b) => a - b), [...expected].sort((a, b) => a - b));
}
if (process.argv.includes('--self-test')) {
assert.equal(durationMs, 900000);
assert.equal(paceMs, 500);
const profile = { contact: { fullName: 'Synthetic', phone: null }, metadata: { fields: {}, updatedAtUtc: null }, values: [null, '', 0, false] };
assert.deepEqual(persistedCareerProfile(profile), { contact: { fullName: 'Synthetic' }, metadata: { fields: {} }, values: [null, '', 0, false] });
assert.equal(profile.contact.phone, null);
assert.notDeepEqual(persistedCareerProfile(profile), persistedCareerProfile({ ...profile, contact: { fullName: 'Changed' } }));
assert.deepEqual(summarize([]), { attempts: 0, failures: 0, p50Ms: null, p95Ms: null, p99Ms: null, maxMs: null });
const rows = Array.from({ length: 100 }, (_, i) => ({ ms: i + 1, status: 200 }));
assert.deepEqual(summarize([...rows, { ms: 999, status: 500 }, { ms: 999, error: 'timeout' }]),
{ attempts: 102, failures: 2, p50Ms: 50, p95Ms: 95, p99Ms: 99, maxMs: 100 });
const ids = Array.from({ length: 250 }, (_, i) => i + 1);
assertMembership(ids.toReversed(), ids);
assert.throws(() => assertMembership([...ids.slice(0, 249), 1], ids));
assert.throws(() => assertMembership([...ids.slice(0, 249), 999], ids));
assert.throws(() => assertMembership(ids.slice(1), ids));
console.log('performance metrics self-check passed');
}