From a11c5b67d35391f458617756251f57757cf4e1e6 Mon Sep 17 00:00:00 2001 From: wphan Date: Thu, 30 Nov 2023 18:59:31 -0800 Subject: [PATCH] add histogram for gpa fetch --- src/core/metrics.ts | 15 +++++++++++++++ src/index.ts | 4 +++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/core/metrics.ts b/src/core/metrics.ts index 6462da4..624aec5 100644 --- a/src/core/metrics.ts +++ b/src/core/metrics.ts @@ -37,6 +37,7 @@ enum METRIC_TYPES { runtime_specs = 'runtime_specs', endpoint_response_times_histogram = 'endpoint_response_times_histogram', endpoint_response_status = 'endpoint_response_status', + gpa_fetch_duration = 'endpoint_response_status', health_status = 'health_status', } @@ -70,6 +71,12 @@ const meterProvider = new MeterProvider({ meterName, aggregation: createHistogramBuckets(0, 20, 30), }), + new View({ + instrumentName: METRIC_TYPES.gpa_fetch_duration, + instrumentType: InstrumentType.HISTOGRAM, + meterName, + aggregation: createHistogramBuckets(0, 500, 20), + }), ], }); meterProvider.addMetricReader(exporter); @@ -109,6 +116,13 @@ const endpointResponseTimeHistogram = meter.createHistogram( unit: 'ms', } ); +const gpaFetchDurationHistogram = meter.createHistogram( + METRIC_TYPES.gpa_fetch_duration, + { + description: 'Duration of GPA fetches', + unit: 'ms', + } +); const responseStatusCounter = meter.createCounter( METRIC_TYPES.endpoint_response_status, @@ -170,6 +184,7 @@ const handleHealthCheck = (slotSource: SlotSource) => { export { endpointResponseTimeHistogram, + gpaFetchDurationHistogram, responseStatusCounter, handleHealthCheck, }; diff --git a/src/index.ts b/src/index.ts index 039d7b2..f050f5d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -33,7 +33,7 @@ import { import { logger, setLogLevel } from './utils/logger'; import * as http from 'http'; -import { handleHealthCheck } from './core/metrics'; +import { gpaFetchDurationHistogram, handleHealthCheck } from './core/metrics'; import { handleResponseTime } from './core/middleware'; import { SubscriberLookup, @@ -279,7 +279,9 @@ const main = async () => { if (useWebsocket && !FEATURE_FLAGS.DISABLE_GPA_REFRESH) { const recursiveFetch = (delay = WS_FALLBACK_FETCH_INTERVAL) => { setTimeout(() => { + const startFetch = Date.now(); dlobProvider.fetch().then(() => { + gpaFetchDurationHistogram.record(Date.now() - startFetch); // eslint-disable-next-line @typescript-eslint/no-unused-vars recursiveFetch(); });