import type { LoaderFunctionArgs } from "@remix-run/server-runtime"; import { prisma } from "~/db.server"; import { metricsRegister } from "~/metrics.server"; export async function loader({ request }: LoaderFunctionArgs) { // If the TRIGGER_METRICS_AUTH_PASSWORD is set, we need to check if the request has the correct password in auth header const authPassword = process.env.TRIGGER_METRICS_AUTH_PASSWORD; if (authPassword) { const auth = request.headers.get("Authorization"); if (auth !== `Bearer ${authPassword}`) { return new Response("Unauthorized", { status: 401 }); } } // We need to remove empty lines from the prisma metrics, grafana doesn't like them const prismaMetrics = (await prisma.$metrics.prometheus()).replace(/^\s*[\r\n]/gm, ""); const coreMetrics = await metricsRegister.metrics(); // Order matters, core metrics end with `# EOF`, prisma metrics don't const metrics = prismaMetrics + coreMetrics; return new Response(metrics, { headers: { "Content-Type": metricsRegister.contentType, }, }); }