From 7d89c1f910b28d0661da6f2989ddea4b9bdcc643 Mon Sep 17 00:00:00 2001 From: Ivan Santos Date: Mon, 3 Jan 2022 07:10:51 -0600 Subject: [PATCH] fix(#171): fixes missing observation callback for observable metrics fixes #171 --- src/metrics/metric-data.ts | 11 +++++++---- src/metrics/metric.service.ts | 28 ++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/metrics/metric-data.ts b/src/metrics/metric-data.ts index ad3e037..f9f0ff3 100644 --- a/src/metrics/metric-data.ts +++ b/src/metrics/metric-data.ts @@ -1,6 +1,6 @@ import { Counter, MetricOptions, metrics, UpDownCounter, - Histogram, ObservableGauge, ObservableCounter, ObservableUpDownCounter, + Histogram, ObservableGauge, ObservableCounter, ObservableUpDownCounter, ObservableResult, } from '@opentelemetry/api-metrics'; import { OTEL_METER_NAME } from '../opentelemetry.constants'; @@ -70,6 +70,7 @@ export function getOrCreateUpDownCounter( export function getOrCreateObservableGauge( name: string, options: MetricOptions, + callback?: (observableResult: ObservableResult) => void, ): ObservableGauge { if (meterData.has(name)) { return meterData.get(name) as ObservableGauge; @@ -77,7 +78,7 @@ export function getOrCreateObservableGauge( const meter = metrics.getMeterProvider().getMeter(OTEL_METER_NAME); - const observableGauge = meter.createObservableGauge(name, options); + const observableGauge = meter.createObservableGauge(name, options, callback); meterData.set(name, observableGauge); return observableGauge; } @@ -85,6 +86,7 @@ export function getOrCreateObservableGauge( export function getOrCreateObservableCounter( name: string, options: MetricOptions, + callback?: (observableResult: ObservableResult) => void, ): ObservableCounter { if (meterData.has(name)) { return meterData.get(name) as ObservableCounter; @@ -92,7 +94,7 @@ export function getOrCreateObservableCounter( const meter = metrics.getMeterProvider().getMeter(OTEL_METER_NAME); - const observableCounter = meter.createObservableCounter(name, options); + const observableCounter = meter.createObservableCounter(name, options, callback); meterData.set(name, observableCounter); return observableCounter; } @@ -100,6 +102,7 @@ export function getOrCreateObservableCounter( export function getOrCreateObservableUpDownCounter( name: string, options: MetricOptions, + callback?: (observableResult: ObservableResult) => void, ): ObservableUpDownCounter { if (meterData.has(name)) { return meterData.get(name) as ObservableUpDownCounter; @@ -107,7 +110,7 @@ export function getOrCreateObservableUpDownCounter( const meter = metrics.getMeterProvider().getMeter(OTEL_METER_NAME); - const observableCounter = meter.createObservableCounter(name, options); + const observableCounter = meter.createObservableCounter(name, options, callback); meterData.set(name, observableCounter); return observableCounter; } diff --git a/src/metrics/metric.service.ts b/src/metrics/metric.service.ts index 33167e6..0a0e593 100644 --- a/src/metrics/metric.service.ts +++ b/src/metrics/metric.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common'; import { - MetricOptions, + MetricOptions, ObservableResult, } from '@opentelemetry/api-metrics'; import { getOrCreateCounter, getOrCreateHistogram, getOrCreateObservableCounter, getOrCreateObservableGauge, - getOrCreateObservableUpDownCounter, getOrCreateUpDownCounter, MetricType, + getOrCreateObservableUpDownCounter, getOrCreateUpDownCounter, } from './metric-data'; @Injectable() @@ -22,15 +22,27 @@ export class MetricService { return getOrCreateHistogram(name, options); } - getObservableCounter(name: string, options?: MetricOptions) { - return getOrCreateObservableCounter(name, options); + getObservableCounter( + name: string, + options?: MetricOptions, + callback?: (observableResult: ObservableResult) => void, + ) { + return getOrCreateObservableCounter(name, options, callback); } - getObservableGauge(name: string, options?: MetricOptions) { - return getOrCreateObservableGauge(name, options); + getObservableGauge( + name: string, + options?: MetricOptions, + callback?: (observableResult: ObservableResult) => void, + ) { + return getOrCreateObservableGauge(name, options, callback); } - getObservableUpDownCounter(name: string, options?: MetricOptions) { - return getOrCreateObservableUpDownCounter(name, options); + getObservableUpDownCounter( + name: string, + options?: MetricOptions, + callback?: (observableResult: ObservableResult) => void, + ) { + return getOrCreateObservableUpDownCounter(name, options, callback); } }