Implement Phase 1 task 1.10 (Prometheus metrics + /healthz + /readyz)
Replaces the placeholder Metrics shim with a prom-client implementation in src/observability/metrics.ts: all 10 Phase 1 metrics from the wiki spec, plus nodejs_* defaults. Exposes /metrics, /healthz, /readyz over node:http on METRICS_PORT (9090); /readyz returns 503 when Redis status is not 'ready' or the TCP listener isn't bound. The Metrics interface in src/core/types.ts is unchanged — adapter call sites continue to use the same inc/observe shape. Only main.ts sees the extended type that adds serializeMetrics(). Side effects: - Dockerfile re-enables HEALTHCHECK pointing at /readyz, and EXPOSE 9090. - frame-ingested log downgraded back to debug now that teltonika_records_published_total is scrapeable. - 19 new unit tests covering exposition format, all metric types, and every HTTP endpoint path. Total now 98 passing. Note: deploy/compose.yaml still does not expose 9090 — separate decision about how Prometheus reaches the service (host port vs. internal scraper on the same Docker network).
This commit is contained in:
@@ -217,9 +217,9 @@ export function createTeltonikaAdapter(options: TeltonikaAdapterOptions): Adapte
|
||||
result: 'ok',
|
||||
});
|
||||
|
||||
// Pilot-stage visibility into per-frame ingest. Downgrade to debug
|
||||
// once task 1.10 wires up prom-client and frames_total is scrapeable.
|
||||
sessionLogger.info(
|
||||
// teltonika_frames_total{result="ok"} and teltonika_records_published_total
|
||||
// now carry this signal in Prometheus; keep the log at debug to avoid noise.
|
||||
sessionLogger.debug(
|
||||
{ codec: codecLabel, records: result.recordCount },
|
||||
'frame ingested',
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user