ai/services/relationship-worker/src/health-server.ts
2026-04-12 19:01:17 -07:00

43 lines
1.2 KiB
TypeScript

import { createServer, type Server } from 'node:http';
import { log } from './logger';
export interface HealthState {
modelBossReachable: boolean;
lastJobAt: Date | null;
lastCompletedAt: Date | null;
}
export function startHealthServer(port: number, getState: () => HealthState): Server {
const server = createServer((req, res) => {
if (req.url === '/health/live') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ status: 'live' }));
return;
}
if (req.url === '/health' || req.url === '/health/ready') {
const state = getState();
const status = state.modelBossReachable ? 200 : 503;
res.writeHead(status, { 'Content-Type': 'application/json' });
res.end(
JSON.stringify({
status: state.modelBossReachable ? 'ok' : 'degraded',
modelBossReachable: state.modelBossReachable,
lastJobAt: state.lastJobAt?.toISOString() ?? null,
lastCompletedAt: state.lastCompletedAt?.toISOString() ?? null,
}),
);
return;
}
res.writeHead(404);
res.end();
});
server.listen(port, () => {
log.info('Health server listening', { port });
});
return server;
}