feat(observability): add phase9 health, readiness, metrics, request tracing, and simulator ops checks
This commit is contained in:
44
Backend/routes/ops.ts
Normal file
44
Backend/routes/ops.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import { Router } from 'express';
|
||||
|
||||
import { db } from '../db/client';
|
||||
import { mediaProvider } from '../media/service';
|
||||
import { getAllMetrics } from '../observability/metrics';
|
||||
import { minioBucket, minioClient } from '../utils/minio';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/live', (_req, res) => {
|
||||
res.json({ status: 'ok', service: 'backend', timestamp: new Date().toISOString() });
|
||||
});
|
||||
|
||||
router.get('/ready', async (_req, res) => {
|
||||
try {
|
||||
await db.execute('select 1');
|
||||
await minioClient.bucketExists(minioBucket);
|
||||
|
||||
res.json({
|
||||
status: 'ready',
|
||||
checks: {
|
||||
database: 'ok',
|
||||
minio: 'ok',
|
||||
mediaProvider: mediaProvider.name,
|
||||
},
|
||||
timestamp: new Date().toISOString(),
|
||||
});
|
||||
} catch (error) {
|
||||
res.status(503).json({
|
||||
status: 'not_ready',
|
||||
error: error instanceof Error ? error.message : 'unknown error',
|
||||
timestamp: new Date().toISOString(),
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/metrics', (_req, res) => {
|
||||
res.json({
|
||||
timestamp: new Date().toISOString(),
|
||||
metrics: getAllMetrics(),
|
||||
});
|
||||
});
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user