29 lines
1.0 KiB
TypeScript
29 lines
1.0 KiB
TypeScript
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,
|
|
},
|
|
});
|
|
}
|