64 lines
1.1 KiB
TypeScript
64 lines
1.1 KiB
TypeScript
/**
|
|
* Health Routes - Server health check
|
|
*/
|
|
|
|
import { Hono } from 'hono';
|
|
import { cacheService } from '../services/cacheService';
|
|
|
|
const health = new Hono();
|
|
|
|
/**
|
|
* GET /api/health
|
|
* Basic health check
|
|
*/
|
|
health.get('/', (c) => {
|
|
return c.json({
|
|
status: 'ok',
|
|
timestamp: new Date().toISOString(),
|
|
uptime: process.uptime(),
|
|
});
|
|
});
|
|
|
|
/**
|
|
* GET /api/health/ready
|
|
* Readiness check (includes cache connection)
|
|
*/
|
|
health.get('/ready', async (c) => {
|
|
const checks: Record<string, boolean> = {
|
|
server: true,
|
|
cache: false,
|
|
};
|
|
|
|
// Check cache connection
|
|
try {
|
|
await cacheService.get('health-check');
|
|
checks.cache = true;
|
|
} catch {
|
|
checks.cache = false;
|
|
}
|
|
|
|
const allHealthy = Object.values(checks).every(Boolean);
|
|
|
|
return c.json(
|
|
{
|
|
status: allHealthy ? 'ready' : 'degraded',
|
|
checks,
|
|
timestamp: new Date().toISOString(),
|
|
},
|
|
allHealthy ? 200 : 503
|
|
);
|
|
});
|
|
|
|
/**
|
|
* GET /api/health/live
|
|
* Liveness check (just confirms server is running)
|
|
*/
|
|
health.get('/live', (c) => {
|
|
return c.json({
|
|
status: 'alive',
|
|
timestamp: new Date().toISOString(),
|
|
});
|
|
});
|
|
|
|
export default health;
|