add timings for healthcheck
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user