Add deploy-ready health checks
Deploy / deploy-dev (push) Skipped
Deploy / deploy-prod (push) Successful in 1m57s

This commit is contained in:
blaisadmin
2026-07-21 22:46:16 -04:00
parent 3ba6410972
commit ecad447d60
3 changed files with 33 additions and 1 deletions
+19
View File
@@ -12,6 +12,7 @@ import nodemailer, { type SendMailOptions } from 'nodemailer';
import Stripe from 'stripe';
import { z } from 'zod';
import { db } from './db/client.js';
import { ensureSchema } from './db/schema.js';
import { adoptionReportQueueEvents, enqueueAdoptionReportJob } from './queues/adoptionReportQueue.js';
import { enqueueBirdMilestoneReminderJob, getBirdMilestoneReminderQueueCounts } from './queues/birdMilestoneReminderQueue.js';
@@ -2514,6 +2515,24 @@ app.get('/api/health', (_req: Request, res: Response) => {
res.json({ ok: true });
});
app.get('/api/health/live', (_req: Request, res: Response) => {
res.json({ ok: true, status: 'live' });
});
app.get('/api/health/ready', async (_req: Request, res: Response) => {
try {
await Promise.all([
db.query('SELECT 1'),
getBirdMilestoneReminderQueueCounts(),
getMedicationReminderQueueCounts(),
]);
res.json({ ok: true, status: 'ready' });
} catch (error) {
console.error('Readiness check failed', error);
res.status(503).json({ ok: false, status: 'not_ready' });
}
});
app.get('/api/metrics', requireAuth, requireAdmin, async (_req: Request, res: Response, next: NextFunction) => {
const memoryUsage = process.memoryUsage();
const averageDurationMs = requestMetrics.totalRequests > 0 ? requestMetrics.totalDurationMs / requestMetrics.totalRequests : 0;