DFiP_Budget_planing/perf/e2e/lib/global-setup.ts
Andrey Epifancev fdc8ecb2a3 perf: замеры бэка
Сетевой лог сценариев, bench запросов, pg_stat_statements и EXPLAIN,
aggregate исключает трассировочные повторы (O-9).

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 02:36:46 +04:00

22 lines
1.2 KiB
TypeScript

/** Playwright globalSetup: фиксирует run_id для всех воркеров и сбрасывает pg_stat_statements. PERF_SQLSTATS=0 - отключить. */
import { spawnSync } from 'node:child_process';
import path from 'node:path';
import { PERF_DIR } from './manifest';
import { runId } from './results';
export const PYTHON = process.env.PERF_PYTHON ?? path.join(PERF_DIR, '.venv', 'bin', 'python');
export function sqlstats(args: string[]): void {
const r = spawnSync(PYTHON, ['-m', 'perfkit.sqlstats', ...args], { cwd: PERF_DIR, encoding: 'utf-8', timeout: 10 * 60_000 });
if (r.stdout?.trim()) console.log(r.stdout.trim());
if (r.error || r.status !== 0 || /WARNING \[perf sqlstats\]/.test(r.stderr ?? '')) {
console.warn(`[perf] ПРЕДУПРЕЖДЕНИЕ: sqlstats ${args[0]} не отработал (Postgres недоступен?): ${r.error ?? ''} ${r.stderr ?? ''}`.trim());
}
}
export default async function globalSetup(): Promise<void> {
process.env.PERF_RUN_ID ??= runId(); // один run_id на весь прогон (воркеры наследуют env)
if (process.env.PERF_SQLSTATS === '0') return;
sqlstats(['reset']);
}