import { NextResponse } from "next/server"; import client from "prom-client"; // Явный Node.js рантайм — prom-client (perf_hooks, process.*) не работает в // Edge Runtime, дефолтном для route handlers в Next.js. export const runtime = "nodejs"; // register — модульный синглтон: Next.js держит один и тот же процесс между // запросами в проде (не пересоздаёт модуль на каждый вызов), поэтому // collectDefaultMetrics() должен быть вызван ровно один раз за жизнь // процесса — глобальный флаг предотвращает повторную регистрацию тех же // метрик при hot-reload в dev-режиме. declare global { var __prometheusMetricsInitialized: boolean | undefined; } if (!global.__prometheusMetricsInitialized) { client.collectDefaultMetrics(); global.__prometheusMetricsInitialized = true; } export async function GET() { const metrics = await client.register.metrics(); return new NextResponse(metrics, { status: 200, headers: { "Content-Type": client.register.contentType }, }); }