Сетевой лог сценариев, bench запросов, pg_stat_statements и EXPLAIN, aggregate исключает трассировочные повторы (O-9). Refs #202 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 lines
1.2 KiB
TypeScript
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']);
|
|
}
|