feat(observability): add phase9 health, readiness, metrics, request tracing, and simulator ops checks
This commit is contained in:
31
Backend/middleware/observability.ts
Normal file
31
Backend/middleware/observability.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { randomUUID } from 'crypto';
|
||||
|
||||
import type { NextFunction, Request, Response } from 'express';
|
||||
|
||||
import { incrementMetric } from '../observability/metrics';
|
||||
|
||||
export const requestContext = (req: Request, res: Response, next: NextFunction): void => {
|
||||
const requestId = req.headers['x-request-id']?.toString() ?? randomUUID();
|
||||
const start = Date.now();
|
||||
|
||||
res.setHeader('x-request-id', requestId);
|
||||
incrementMetric('http.requests.total');
|
||||
|
||||
res.on('finish', () => {
|
||||
const durationMs = Date.now() - start;
|
||||
incrementMetric(`http.status.${res.statusCode}`);
|
||||
|
||||
console.log(
|
||||
JSON.stringify({
|
||||
requestId,
|
||||
method: req.method,
|
||||
path: req.path,
|
||||
statusCode: res.statusCode,
|
||||
durationMs,
|
||||
ip: req.ip,
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
next();
|
||||
};
|
||||
Reference in New Issue
Block a user