diff --git a/apps/webapp/app/routes/metrics.ts b/apps/webapp/app/routes/metrics.ts index a0f71a29b1..ab19350968 100644 --- a/apps/webapp/app/routes/metrics.ts +++ b/apps/webapp/app/routes/metrics.ts @@ -1,8 +1,22 @@ import { LoaderFunctionArgs } from "@remix-run/server-runtime"; +import { prisma } from "~/db.server"; import { metricsRegister } from "~/metrics.server"; export async function loader({ request }: LoaderFunctionArgs) { - return new Response(await metricsRegister.metrics(), { + // 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 }); + } + } + + const prismaMetrics = await prisma.$metrics.prometheus(); + const coreMetrics = await metricsRegister.metrics(); + + return new Response(coreMetrics + prismaMetrics, { headers: { "Content-Type": metricsRegister.contentType, }, diff --git a/internal-packages/database/prisma/schema.prisma b/internal-packages/database/prisma/schema.prisma index e0a4534508..5d143e18da 100644 --- a/internal-packages/database/prisma/schema.prisma +++ b/internal-packages/database/prisma/schema.prisma @@ -7,7 +7,7 @@ datasource db { generator client { provider = "prisma-client-js" binaryTargets = ["native", "debian-openssl-1.1.x"] - previewFeatures = ["tracing"] + previewFeatures = ["tracing", "metrics"] } model User {