From 0b25a1a9e7174fac76fd12a716fb56be5c46cf46 Mon Sep 17 00:00:00 2001 From: gnezim Date: Wed, 15 Apr 2026 00:10:49 +0300 Subject: [PATCH] Add 8 custom metric instruments using OTel proxy meter --- src/observability/metrics/custom.ts | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/observability/metrics/custom.ts diff --git a/src/observability/metrics/custom.ts b/src/observability/metrics/custom.ts new file mode 100644 index 00000000..04c89669 --- /dev/null +++ b/src/observability/metrics/custom.ts @@ -0,0 +1,32 @@ +import { metrics } from "@opentelemetry/api"; + +/** + * Module-level metric instruments for the flights remote component. + * Safe to declare at module scope — @opentelemetry/api's proxy meter + * lazy-resolves to the real MeterProvider after initServerOtel/initBrowserOtel runs. + */ +const meter = metrics.getMeter("flights"); + +/** SSR request duration histogram (seconds). */ +export const flightsSsrRequestDuration = meter.createHistogram("flights.ssr.request.duration"); + +/** Upstream API request duration histogram (seconds). */ +export const flightsApiRequestDuration = meter.createHistogram("flights.api.request.duration"); + +/** Upstream API error counter (by route, status). */ +export const flightsApiError = meter.createCounter("flights.api.error"); + +/** SignalR active connections gauge. */ +export const flightsSignalRConnected = meter.createUpDownCounter("flights.signalr.connected"); + +/** SignalR messages received counter. */ +export const flightsSignalRMessageReceived = meter.createCounter("flights.signalr.message.received"); + +/** SignalR disconnection counter (by reason). */ +export const flightsSignalRDisconnect = meter.createCounter("flights.signalr.disconnect"); + +/** Feature component render counter (by feature name). */ +export const flightsFeatureRender = meter.createCounter("flights.feature.render"); + +/** Unhandled React error counter (caught by ErrorBoundary). */ +export const flightsReactError = meter.createCounter("flights.react.error");