batching events

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-07-17 17:13:07 +02:00
committed by Carl-Gerhard Lindesvärd
parent 244aa3b0d3
commit 5e225b7ae6
58 changed files with 2204 additions and 583 deletions

View File

@@ -19,6 +19,7 @@ import exportRouter from './routes/export.router';
import liveRouter from './routes/live.router';
import miscRouter from './routes/misc.router';
import profileRouter from './routes/profile.router';
import webhookRouter from './routes/webhook.router';
import { logger, logInfo } from './utils/logger';
declare module 'fastify' {
@@ -82,6 +83,7 @@ const startServer = async () => {
fastify.register(profileRouter, { prefix: '/profile' });
fastify.register(miscRouter, { prefix: '/misc' });
fastify.register(exportRouter, { prefix: '/export' });
fastify.register(webhookRouter, { prefix: '/webhook' });
fastify.setErrorHandler((error) => {
logger.error(error, 'Error in request');
});
@@ -89,35 +91,45 @@ const startServer = async () => {
reply.send({ name: 'openpanel sdk api' });
});
fastify.get('/healthcheck', async (request, reply) => {
try {
const redisRes = await withTimings(redis.keys('*'));
const dbRes = await withTimings(db.project.findFirst());
const queueRes = await withTimings(eventsQueue.getCompleted());
const chRes = await withTimings(
chQuery('SELECT * FROM events LIMIT 1')
);
const redisRes = await withTimings(redis.keys('*')).catch(
(e: Error) => e
);
const dbRes = await withTimings(db.project.findFirst()).catch(
(e: Error) => e
);
const queueRes = await withTimings(eventsQueue.getCompleted()).catch(
(e: Error) => e
);
const chRes = await withTimings(
chQuery('SELECT * FROM events LIMIT 1')
).catch((e: Error) => e);
reply.send({
redis: {
ok: redisRes[1].length ? true : false,
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) {
reply.status(500).send();
}
reply.send({
redis: Array.isArray(redisRes)
? {
ok: redisRes[1].length ? true : false,
time: `${redisRes[0]}ms`,
}
: redisRes,
db: Array.isArray(dbRes)
? {
ok: dbRes[1] ? true : false,
time: `${dbRes[0]}ms`,
}
: dbRes,
queue: Array.isArray(queueRes)
? {
ok: queueRes[1].length ? true : false,
time: `${queueRes[0]}ms`,
}
: queueRes,
ch: Array.isArray(chRes)
? {
ok: chRes[1].length ? true : false,
time: `${chRes[0]}ms`,
}
: chRes,
});
});
if (process.env.NODE_ENV === 'production') {
for (const signal of ['SIGINT', 'SIGTERM']) {