Add deploy-ready health checks
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user