add timings for healthcheck

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-06-04 10:30:10 +02:00
parent b0bcdbea66
commit 68c4530ea5

View File

@@ -6,7 +6,8 @@ import { fastifyTRPCPlugin } from '@trpc/server/adapters/fastify';
import Fastify from 'fastify'; import Fastify from 'fastify';
import metricsPlugin from 'fastify-metrics'; import metricsPlugin from 'fastify-metrics';
import { db } from '@openpanel/db'; import { round } from '@openpanel/common';
import { chQuery, db } from '@openpanel/db';
import type { IServiceClient } from '@openpanel/db'; import type { IServiceClient } from '@openpanel/db';
import { eventsQueue } from '@openpanel/queue'; import { eventsQueue } from '@openpanel/queue';
import { redis, redisPub } from '@openpanel/redis'; import { redis, redisPub } from '@openpanel/redis';
@@ -27,6 +28,12 @@ declare module 'fastify' {
} }
} }
async function withTimings<T>(promise: Promise<T>) {
const time = performance.now();
const res = await promise;
return [round(performance.now() - time, 2), res] as const;
}
const port = parseInt(process.env.API_PORT || '3000', 10); const port = parseInt(process.env.API_PORT || '3000', 10);
const startServer = async () => { const startServer = async () => {
@@ -83,15 +90,30 @@ const startServer = async () => {
}); });
fastify.get('/healthcheck', async (request, reply) => { fastify.get('/healthcheck', async (request, reply) => {
try { try {
const [redisRes, dbRes, queueRes] = await Promise.all([ const redisRes = await withTimings(redis.keys('*'));
redis.keys('*'), const dbRes = await withTimings(db.project.findFirst());
db.project.findFirst(), const queueRes = await withTimings(eventsQueue.getCompleted());
eventsQueue.getCompleted(), const chRes = await withTimings(
]); chQuery('SELECT * FROM events LIMIT 1')
);
reply.send({ reply.send({
redis: redisRes.length > 0, redis: {
db: dbRes ? true : false, ok: redisRes[1].length ? true : false,
queue: queueRes.length > 0, time: `${redisRes[0]}ms`,
},
db: {
ok: dbRes[1] ? true : false,
time: `${dbRes[0]}ms`,
},
queue: {
ok: queueRes[1].length ? true : false,
time: `${queueRes[0]}ms`,
},
ch: {
ok: chRes[1].length ? true : false,
time: `${chRes[0]}ms`,
},
}); });
} catch (e) { } catch (e) {
reply.status(500).send(); reply.status(500).send();