From 53768bdc928b7fa5b1e3f9eed2c05dc4f938212f Mon Sep 17 00:00:00 2001 From: legendecas Date: Fri, 24 Sep 2021 12:01:30 +0800 Subject: [PATCH 1/8] feat: rename metric instruments to match feature-freeze API specification --- .../src/NoopMeter.ts | 83 ++--- .../src/api/global-utils.ts | 2 +- .../src/types/BoundInstrument.ts | 6 +- .../src/types/Meter.ts | 76 ++--- .../src/types/Metric.ts | 18 +- .../src/types/Observation.ts | 2 +- .../noop-implementations/noop-meter.test.ts | 16 +- .../src/PrometheusSerializer.ts | 4 +- .../test/PrometheusExporter.test.ts | 16 +- .../test/PrometheusSerializer.test.ts | 32 +- .../tsconfig.json | 3 + .../opentelemetry-sdk-metrics-base/README.md | 34 +- .../src/BoundInstrument.ts | 4 +- ...rverMetric.ts => CounterObserverMetric.ts} | 10 +- ...serverMetric.ts => GaugeObserverMetric.ts} | 8 +- ...ueRecorderMetric.ts => HistogramMetric.ts} | 16 +- .../src/Meter.ts | 66 ++-- ...tric.ts => UpDownCounterObserverMetric.ts} | 8 +- .../src/export/Processor.ts | 8 +- .../src/export/types.ts | 8 +- .../src/index.ts | 4 +- .../test/Meter.test.ts | 320 +++++++++--------- experimental/tsconfig.esm.json | 3 + experimental/tsconfig.json | 3 + 24 files changed, 380 insertions(+), 370 deletions(-) rename experimental/packages/opentelemetry-sdk-metrics-base/src/{SumObserverMetric.ts => CounterObserverMetric.ts} (88%) rename experimental/packages/opentelemetry-sdk-metrics-base/src/{ValueObserverMetric.ts => GaugeObserverMetric.ts} (89%) rename experimental/packages/opentelemetry-sdk-metrics-base/src/{ValueRecorderMetric.ts => HistogramMetric.ts} (79%) rename experimental/packages/opentelemetry-sdk-metrics-base/src/{UpDownSumObserverMetric.ts => UpDownCounterObserverMetric.ts} (87%) diff --git a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts index 6e0fd5bd207..57563349247 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts @@ -21,14 +21,15 @@ import { UnboundMetric, Labels, Counter, - ValueRecorder, - ValueObserver, + Histogram, + GaugeObserver, UpDownCounter, BaseObserver, - UpDownSumObserver, + CounterObserver, + UpDownCounterObserver, } from './types/Metric'; import { - BoundValueRecorder, + BoundHistogram, BoundCounter, BoundBaseObserver, } from './types/BoundInstrument'; @@ -43,72 +44,72 @@ export class NoopMeter implements Meter { constructor() {} /** - * Returns constant noop value recorder. + * Returns a constant noop counter. * @param name the name of the metric. * @param [options] the metric options. */ - createValueRecorder(_name: string, _options?: MetricOptions): ValueRecorder { - return NOOP_VALUE_RECORDER_METRIC; + createCounter(_name: string, _options?: MetricOptions): Counter { + return NOOP_COUNTER_METRIC; } /** - * Returns a constant noop counter. + * Returns constant noop counter observer. * @param name the name of the metric. * @param [options] the metric options. + * @param [callback] the counter observer callback */ - createCounter(_name: string, _options?: MetricOptions): Counter { - return NOOP_COUNTER_METRIC; + createCounterObserver( + _name: string, + _options?: MetricOptions, + _callback?: (observerResult: ObserverResult) => void + ): CounterObserver { + return NOOP_COUNTER_OBSERVER_METRIC; } /** - * Returns a constant noop UpDownCounter. + * Returns constant noop histogram. * @param name the name of the metric. * @param [options] the metric options. */ - createUpDownCounter(_name: string, _options?: MetricOptions): UpDownCounter { - return NOOP_COUNTER_METRIC; + createHistogram(_name: string, _options?: MetricOptions): Histogram { + return NOOP_HISTOGRAM_METRIC; } /** - * Returns constant noop value observer. + * Returns constant noop gauge observer. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the value observer callback + * @param [callback] the gauge observer callback */ - createValueObserver( + createGaugeObserver( _name: string, _options?: MetricOptions, _callback?: (observerResult: ObserverResult) => void - ): ValueObserver { - return NOOP_VALUE_OBSERVER_METRIC; + ): GaugeObserver { + return NOOP_GAUGE_OBSERVER_METRIC; } /** - * Returns constant noop sum observer. + * Returns a constant noop UpDownCounter. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the sum observer callback */ - createSumObserver( - _name: string, - _options?: MetricOptions, - _callback?: (observerResult: ObserverResult) => void - ): ValueObserver { - return NOOP_SUM_OBSERVER_METRIC; + createUpDownCounter(_name: string, _options?: MetricOptions): UpDownCounter { + return NOOP_COUNTER_METRIC; } /** - * Returns constant noop up down sum observer. + * Returns constant noop up down counter observer. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the up down sum observer callback + * @param [callback] the up down counter observer callback */ - createUpDownSumObserver( + createUpDownCounterObserver( _name: string, _options?: MetricOptions, _callback?: (observerResult: ObserverResult) => void - ): UpDownSumObserver { - return NOOP_UP_DOWN_SUM_OBSERVER_METRIC; + ): UpDownCounterObserver { + return NOOP_UP_DOWN_COUNTER_OBSERVER_METRIC; } /** @@ -165,9 +166,9 @@ export class NoopCounterMetric } } -export class NoopValueRecorderMetric - extends NoopMetric - implements ValueRecorder { +export class NoopHistogramMetric + extends NoopMetric + implements Histogram { record(value: number, labels: Labels): void { this.bind(labels).record(value); } @@ -192,7 +193,7 @@ export class NoopBoundCounter implements BoundCounter { } } -export class NoopBoundValueRecorder implements BoundValueRecorder { +export class NoopBoundHistogram implements BoundHistogram { record(_value: number, _baggage?: unknown, _spanContext?: unknown): void { return; } @@ -206,21 +207,21 @@ export const NOOP_METER = new NoopMeter(); export const NOOP_BOUND_COUNTER = new NoopBoundCounter(); export const NOOP_COUNTER_METRIC = new NoopCounterMetric(NOOP_BOUND_COUNTER); -export const NOOP_BOUND_VALUE_RECORDER = new NoopBoundValueRecorder(); -export const NOOP_VALUE_RECORDER_METRIC = new NoopValueRecorderMetric( - NOOP_BOUND_VALUE_RECORDER +export const NOOP_BOUND_HISTOGRAM = new NoopBoundHistogram(); +export const NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric( + NOOP_BOUND_HISTOGRAM ); export const NOOP_BOUND_BASE_OBSERVER = new NoopBoundBaseObserver(); -export const NOOP_VALUE_OBSERVER_METRIC = new NoopBaseObserverMetric( +export const NOOP_GAUGE_OBSERVER_METRIC = new NoopBaseObserverMetric( NOOP_BOUND_BASE_OBSERVER ); -export const NOOP_UP_DOWN_SUM_OBSERVER_METRIC = new NoopBaseObserverMetric( +export const NOOP_UP_DOWN_COUNTER_OBSERVER_METRIC = new NoopBaseObserverMetric( NOOP_BOUND_BASE_OBSERVER ); -export const NOOP_SUM_OBSERVER_METRIC = new NoopBaseObserverMetric( +export const NOOP_COUNTER_OBSERVER_METRIC = new NoopBaseObserverMetric( NOOP_BOUND_BASE_OBSERVER ); diff --git a/experimental/packages/opentelemetry-api-metrics/src/api/global-utils.ts b/experimental/packages/opentelemetry-api-metrics/src/api/global-utils.ts index a23f76396d7..e371d5165d7 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/api/global-utils.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/api/global-utils.ts @@ -52,4 +52,4 @@ export function makeGetter( * version. If the global API is not compatible with the API package * attempting to get it, a NOOP API implementation will be returned. */ -export const API_BACKWARDS_COMPATIBILITY_VERSION = 3; +export const API_BACKWARDS_COMPATIBILITY_VERSION = 4; diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts b/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts index 0d5554771e6..828b6a741c2 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts @@ -23,10 +23,10 @@ export interface BoundCounter { add(value: number): void; } -/** ValueRecorder to report instantaneous measurement of a value. */ -export interface BoundValueRecorder { +/** Histogram to report instantaneous measurement of a value. */ +export interface BoundHistogram { /** - * Records the given value to this value recorder. + * Records the given value to this histogram. * @param value to record. */ record(value: number): void; diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts index 27428f2554d..7abab0ad84c 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts @@ -18,12 +18,12 @@ import { BatchObserverResult } from './BatchObserverResult'; import { MetricOptions, Counter, - ValueRecorder, - ValueObserver, + Histogram, + GaugeObserver, BatchObserverOptions, UpDownCounter, - SumObserver, - UpDownSumObserver, + CounterObserver, + UpDownCounterObserver, } from './Metric'; import { ObserverResult } from './ObserverResult'; @@ -31,80 +31,80 @@ import { ObserverResult } from './ObserverResult'; * An interface to allow the recording metrics. * * {@link Metric}s are used for recording pre-defined aggregation (`Counter`), - * or raw values (`ValueRecorder`) in which the aggregation and labels + * or raw values (`Histogram`) in which the aggregation and labels * for the exported metric are deferred. */ export interface Meter { /** - * Creates and returns a new `ValueRecorder`. + * Creates a new `Counter` metric. Generally, this kind of metric when the + * value is a quantity, the sum is of primary interest, and the event count + * and value distribution are not of primary interest. * @param name the name of the metric. * @param [options] the metric options. */ - createValueRecorder(name: string, options?: MetricOptions): ValueRecorder; + createCounter(name: string, options?: MetricOptions): Counter; /** - * Creates a new `Counter` metric. Generally, this kind of metric when the - * value is a quantity, the sum is of primary interest, and the event count - * and value distribution are not of primary interest. + * Creates a new `CounterObserver` metric. * @param name the name of the metric. * @param [options] the metric options. + * @param [callback] the observer callback */ - createCounter(name: string, options?: MetricOptions): Counter; + createCounterObserver( + name: string, + options?: MetricOptions, + callback?: (observerResult: ObserverResult) => void + ): CounterObserver; /** - * Creates a new `UpDownCounter` metric. UpDownCounter is a synchronous - * instrument and very similar to Counter except that Add(increment) - * supports negative increments. It is generally useful for capturing changes - * in an amount of resources used, or any quantity that rises and falls - * during a request. - * Example uses for UpDownCounter: - *
    - *
  1. count the number of active requests.
  2. - *
  3. count memory in use by instrumenting new and delete.
  4. - *
  5. count queue size by instrumenting enqueue and dequeue.
  6. - *
  7. count semaphore up and down operations.
  8. - *
- * + * Creates and returns a new `Histogram`. * @param name the name of the metric. * @param [options] the metric options. */ - createUpDownCounter(name: string, options?: MetricOptions): UpDownCounter; + createHistogram(name: string, options?: MetricOptions): Histogram; /** - * Creates a new `ValueObserver` metric. + * Creates a new `GaugeObserver` metric. * @param name the name of the metric. * @param [options] the metric options. * @param [callback] the observer callback */ - createValueObserver( + createGaugeObserver( name: string, options?: MetricOptions, callback?: (observerResult: ObserverResult) => void - ): ValueObserver; + ): GaugeObserver; /** - * Creates a new `SumObserver` metric. + * Creates a new `UpDownCounter` metric. UpDownCounter is a synchronous + * instrument and very similar to Counter except that Add(increment) + * supports negative increments. It is generally useful for capturing changes + * in an amount of resources used, or any quantity that rises and falls + * during a request. + * Example uses for UpDownCounter: + *
    + *
  1. count the number of active requests.
  2. + *
  3. count memory in use by instrumenting new and delete.
  4. + *
  5. count queue size by instrumenting enqueue and dequeue.
  6. + *
  7. count semaphore up and down operations.
  8. + *
+ * * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the observer callback */ - createSumObserver( - name: string, - options?: MetricOptions, - callback?: (observerResult: ObserverResult) => void - ): SumObserver; + createUpDownCounter(name: string, options?: MetricOptions): UpDownCounter; /** - * Creates a new `UpDownSumObserver` metric. + * Creates a new `UpDownCounterObserver` metric. * @param name the name of the metric. * @param [options] the metric options. * @param [callback] the observer callback */ - createUpDownSumObserver( + createUpDownCounterObserver( name: string, options?: MetricOptions, callback?: (observerResult: ObserverResult) => void - ): UpDownSumObserver; + ): UpDownCounterObserver; /** * Creates a new `BatchObserver`, can be used to update many metrics diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts index aebbc462460..a30fc9da6a0 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts @@ -17,7 +17,7 @@ import { BoundBaseObserver, BoundCounter, - BoundValueRecorder, + BoundHistogram, } from './BoundInstrument'; /** @@ -146,9 +146,9 @@ export interface UpDownCounter extends UnboundMetric { add(value: number, labels?: Labels): void; } -export interface ValueRecorder extends UnboundMetric { +export interface Histogram extends UnboundMetric { /** - * Records the given value to this value recorder. + * Records the given value to this histogram. */ record(value: number, labels?: Labels): void; } @@ -163,14 +163,14 @@ export interface BaseObserver extends UnboundMetric { }; } -/** Base interface for the ValueObserver metrics. */ -export type ValueObserver = BaseObserver; +/** Base interface for the GaugeObserver metrics. */ +export type GaugeObserver = BaseObserver; -/** Base interface for the UpDownSumObserver metrics. */ -export type UpDownSumObserver = BaseObserver; +/** Base interface for the UpDownCounterObserver metrics. */ +export type UpDownCounterObserver = BaseObserver; -/** Base interface for the SumObserver metrics. */ -export type SumObserver = BaseObserver; +/** Base interface for the CounterObserver metrics. */ +export type CounterObserver = BaseObserver; /** * key-value pairs passed by the user. diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts index d36f48fb717..eb946c93315 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts @@ -17,7 +17,7 @@ import { BaseObserver } from './Metric'; /** - * Interface for updating value of certain value observer + * Interface for updating value of certain observer */ export interface Observation { observer: BaseObserver; diff --git a/experimental/packages/opentelemetry-api-metrics/test/noop-implementations/noop-meter.test.ts b/experimental/packages/opentelemetry-api-metrics/test/noop-implementations/noop-meter.test.ts index cbfe044a9f7..07b2e7b4020 100644 --- a/experimental/packages/opentelemetry-api-metrics/test/noop-implementations/noop-meter.test.ts +++ b/experimental/packages/opentelemetry-api-metrics/test/noop-implementations/noop-meter.test.ts @@ -18,9 +18,9 @@ import * as assert from 'assert'; import { NoopMeterProvider, NOOP_BOUND_COUNTER, - NOOP_BOUND_VALUE_RECORDER, + NOOP_BOUND_HISTOGRAM, NOOP_COUNTER_METRIC, - NOOP_VALUE_RECORDER_METRIC, + NOOP_HISTOGRAM_METRIC, } from '../../src'; describe('NoopMeter', () => { @@ -38,23 +38,23 @@ describe('NoopMeter', () => { assert.strictEqual(counter.bind(labels), NOOP_BOUND_COUNTER); counter.clear(); - const valueRecorder = meter.createValueRecorder('some-name'); - valueRecorder.bind(labels).record(1); + const histogram = meter.createHistogram('some-name'); + histogram.bind(labels).record(1); // ensure the correct noop const is returned - assert.strictEqual(valueRecorder, NOOP_VALUE_RECORDER_METRIC); - assert.strictEqual(valueRecorder.bind(labels), NOOP_BOUND_VALUE_RECORDER); + assert.strictEqual(histogram, NOOP_HISTOGRAM_METRIC); + assert.strictEqual(histogram.bind(labels), NOOP_BOUND_HISTOGRAM); const options = { component: 'tests', description: 'the testing package', }; - const valueRecorderWithOptions = meter.createValueRecorder( + const histogramWithOptions = meter.createHistogram( 'some-name', options ); - assert.strictEqual(valueRecorderWithOptions, NOOP_VALUE_RECORDER_METRIC); + assert.strictEqual(histogramWithOptions, NOOP_HISTOGRAM_METRIC); const counterWithOptions = meter.createCounter('some-name', options); assert.strictEqual(counterWithOptions, NOOP_COUNTER_METRIC); }); diff --git a/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts b/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts index e62ba0478ac..284b7276152 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts @@ -106,11 +106,11 @@ function toPrometheusType( case AggregatorKind.SUM: if ( metricKind === MetricKind.COUNTER || - metricKind === MetricKind.SUM_OBSERVER + metricKind === MetricKind.COUNTER_OBSERVER ) { return 'counter'; } - /** MetricKind.UP_DOWN_COUNTER and MetricKind.UP_DOWN_SUM_OBSERVER */ + /** MetricKind.UP_DOWN_COUNTER and MetricKind.UP_DOWN_COUNTER_OBSERVER */ return 'gauge'; case AggregatorKind.LAST_VALUE: return 'gauge'; diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts index 11d0090861e..5f8838fec32 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts @@ -275,7 +275,7 @@ describe('PrometheusExporter', () => { return 0.999; } - meter.createValueObserver( + meter.createGaugeObserver( 'metric_observer', { description: 'a test description', @@ -472,12 +472,12 @@ describe('PrometheusExporter', () => { }); }); - it('should export a SumObserver as a counter', done => { + it('should export a CounterObserver as a counter', done => { function getValue() { return 20; } - meter.createSumObserver( + meter.createCounterObserver( 'sum_observer', { description: 'a test description', @@ -512,12 +512,12 @@ describe('PrometheusExporter', () => { }); }); - it('should export a UpDownSumObserver as a gauge', done => { + it('should export a UpDownCounterObserver as a gauge', done => { function getValue() { return 20; } - meter.createUpDownSumObserver( + meter.createUpDownCounterObserver( 'updown_observer', { description: 'a test description', @@ -552,12 +552,12 @@ describe('PrometheusExporter', () => { }); }); - it('should export a ValueRecorder as a summary', done => { - const valueRecorder = meter.createValueRecorder('value_recorder', { + it('should export a Histogram as a summary', done => { + const histogram = meter.createHistogram('value_recorder', { description: 'a test description', }); - valueRecorder.bind({ key1: 'labelValue1' }).record(20); + histogram.bind({ key1: 'labelValue1' }).record(20); meter.collect().then(() => { exporter.export(meter.getProcessor().checkPointSet(), () => { diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts index 4934ebb7889..b4391861101 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts @@ -19,9 +19,9 @@ import { LastValueAggregator, MeterProvider, CounterMetric, - ValueRecorderMetric, + HistogramMetric, UpDownCounterMetric, - ValueObserverMetric, + GaugeObserverMetric, } from '@opentelemetry/sdk-metrics-base'; import { diag, DiagLogLevel } from '@opentelemetry/api'; import * as assert from 'assert'; @@ -99,13 +99,13 @@ describe('PrometheusSerializer', () => { const meter = new MeterProvider({ processor: new ExactProcessor(LastValueAggregator), }).getMeter('test'); - const observer = meter.createValueObserver( + const observer = meter.createGaugeObserver( 'test', {}, observerResult => { observerResult.observe(1, labels); } - ) as ValueObserverMetric; + ) as GaugeObserverMetric; await meter.collect(); const records = await observer.getMetricRecord(); const record = records[0]; @@ -126,13 +126,13 @@ describe('PrometheusSerializer', () => { const meter = new MeterProvider({ processor: new ExactProcessor(LastValueAggregator), }).getMeter('test'); - const observer = meter.createValueObserver( + const observer = meter.createGaugeObserver( 'test', {}, observerResult => { observerResult.observe(1, labels); } - ) as ValueObserverMetric; + ) as GaugeObserverMetric; await meter.collect(); const records = await observer.getMetricRecord(); const record = records[0]; @@ -153,9 +153,9 @@ describe('PrometheusSerializer', () => { const processor = new ExactProcessor(HistogramAggregator, [1, 10, 100]); const meter = new MeterProvider({ processor }).getMeter('test'); - const recorder = meter.createValueRecorder('test', { + const recorder = meter.createHistogram('test', { description: 'foobar', - }) as ValueRecorderMetric; + }) as HistogramMetric; recorder.bind(labels).record(5); @@ -181,10 +181,10 @@ describe('PrometheusSerializer', () => { const serializer = new PrometheusSerializer(); const meter = new MeterProvider().getMeter('test'); - const recorder = meter.createValueRecorder('test', { + const recorder = meter.createHistogram('test', { description: 'foobar', boundaries: [1, 10, 100], - }) as ValueRecorderMetric; + }) as HistogramMetric; recorder.bind(labels).record(5); const records = await recorder.getMetricRecord(); @@ -210,9 +210,9 @@ describe('PrometheusSerializer', () => { const processor = new ExactProcessor(HistogramAggregator, [1, 10, 100]); const meter = new MeterProvider({ processor }).getMeter('test'); - const recorder = meter.createValueRecorder('test', { + const recorder = meter.createHistogram('test', { description: 'foobar', - }) as ValueRecorderMetric; + }) as HistogramMetric; recorder.bind(labels).record(5); const records = await recorder.getMetricRecord(); @@ -304,7 +304,7 @@ describe('PrometheusSerializer', () => { processor: new ExactProcessor(LastValueAggregator), }).getMeter('test'); const processor = new PrometheusLabelsBatcher(); - const observer = meter.createValueObserver( + const observer = meter.createGaugeObserver( 'test', { description: 'foobar', @@ -312,7 +312,7 @@ describe('PrometheusSerializer', () => { observerResult => { observerResult.observe(1, labels); } - ) as ValueObserverMetric; + ) as GaugeObserverMetric; await meter.collect(); const records = await observer.getMetricRecord(); records.forEach(it => processor.process(it)); @@ -336,9 +336,9 @@ describe('PrometheusSerializer', () => { const processor = new ExactProcessor(HistogramAggregator, [1, 10, 100]); const meter = new MeterProvider({ processor }).getMeter('test'); - const recorder = meter.createValueRecorder('test', { + const recorder = meter.createHistogram('test', { description: 'foobar', - }) as ValueRecorderMetric; + }) as HistogramMetric; recorder.bind({ val: '1' }).record(5); recorder.bind({ val: '1' }).record(50); recorder.bind({ val: '1' }).record(120); diff --git a/experimental/packages/opentelemetry-exporter-prometheus/tsconfig.json b/experimental/packages/opentelemetry-exporter-prometheus/tsconfig.json index 948abef3ceb..3c062d3feb2 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/tsconfig.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/tsconfig.json @@ -11,6 +11,9 @@ "references": [ { "path": "../opentelemetry-api-metrics" + }, + { + "path": "../opentelemetry-sdk-metrics-base" } ] } diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/README.md b/experimental/packages/opentelemetry-sdk-metrics-base/README.md index 1761164b0f5..435cbc1db25 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/README.md +++ b/experimental/packages/opentelemetry-sdk-metrics-base/README.md @@ -73,7 +73,7 @@ boundCounter.add(Math.random() > 0.5 ? 1 : -1); ``` -### Value Observer +### Gauge Observer Choose this kind of metric when only last value is important without worry about aggregation. The callback can be sync or async. @@ -85,7 +85,7 @@ const meter = new MeterProvider().getMeter('your-meter-name'); // async callback - for operation that needs to wait for value -meter.createValueObserver('your_metric_name', { +meter.createGaugeObserver('your_metric_name', { description: 'Example of an async observer with callback', }, async (observerResult) => { const value = await getAsyncValue(); @@ -101,7 +101,7 @@ function getAsyncValue() { } // sync callback in case you don't need to wait for value -meter.createValueObserver('your_metric_name', { +meter.createGaugeObserver('your_metric_name', { description: 'Example of a sync observer with callback', }, (observerResult) => { observerResult.observe(getRandomValue(), { label: '1' }); @@ -113,7 +113,7 @@ function getRandomValue() { } ``` -### UpDownSumObserver +### UpDownCounterObserver Choose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime. The callback can be sync or async. @@ -124,7 +124,7 @@ const { MeterProvider } = require('@opentelemetry/sdk-metrics-base'); const meter = new MeterProvider().getMeter('your-meter-name'); // async callback - for operation that needs to wait for value -meter.createUpDownSumObserver('your_metric_name', { +meter.createUpDownCounterObserver('your_metric_name', { description: 'Example of an async observer with callback', }, async (observerResult) => { const value = await getAsyncValue(); @@ -140,7 +140,7 @@ function getAsyncValue() { } // sync callback in case you don't need to wait for value -meter.createUpDownSumObserver('your_metric_name', { +meter.createUpDownCounterObserver('your_metric_name', { description: 'Example of a sync observer with callback', }, (observerResult) => { observerResult.observe(getRandomValue(), { label: '1' }); @@ -152,7 +152,7 @@ function getRandomValue() { ``` -### Sum Observer +### Counter Observer Choose this kind of metric when collecting a sum that never decreases. The callback can be sync or async. @@ -163,8 +163,8 @@ const { MeterProvider } = require('@opentelemetry/sdk-metrics-base'); const meter = new MeterProvider().getMeter('your-meter-name'); // async callback in case you need to wait for values -meter.createSumObserver('example_metric', { - description: 'Example of an async sum observer with callback', +meter.createCounterObserver('example_metric', { + description: 'Example of an async counter observer with callback', }, async (observerResult) => { const value = await getAsyncValue(); observerResult.observe(value, { label: '1' }); @@ -179,8 +179,8 @@ function getAsyncValue() { } // sync callback in case you don't need to wait for values -meter.createSumObserver('example_metric', { - description: 'Example of a sync sum observer with callback', +meter.createCounterObserver('example_metric', { + description: 'Example of a sync counter observer with callback', }, (observerResult) => { const value = getRandomValue(); observerResult.observe(value, { label: '1' }); @@ -213,11 +213,11 @@ const meter = new MeterProvider({ interval: 3000, }).getMeter('example-observer'); -const cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', { +const cpuUsageMetric = meter.createGaugeObserver('cpu_usage_per_app', { description: 'CPU', }); -const MemUsageMetric = meter.createValueObserver('mem_usage_per_app', { +const MemUsageMetric = meter.createGaugeObserver('mem_usage_per_app', { description: 'Memory', }); @@ -245,11 +245,11 @@ function getSomeAsyncMetrics() { See [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example. -### Value Recorder +### Histogram -`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative. -Values captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized. -`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting. +`Histogram` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative. +Values captured by `Histogram.record(value)` are treated as individual events belonging to a distribution that is being summarized. +`Histogram` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting. ## Useful links diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts index 296bf72909e..24c90c9daf4 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts @@ -117,9 +117,9 @@ export class BoundUpDownCounter /** * BoundMeasure is an implementation of the {@link BoundMeasure} interface. */ -export class BoundValueRecorder +export class BoundHistogram extends BaseBoundInstrument - implements api.BoundValueRecorder { + implements api.BoundHistogram { constructor( labels: api.Labels, disabled: boolean, diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/SumObserverMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/CounterObserverMetric.ts similarity index 88% rename from experimental/packages/opentelemetry-sdk-metrics-base/src/SumObserverMetric.ts rename to experimental/packages/opentelemetry-sdk-metrics-base/src/CounterObserverMetric.ts index 8f58727cebd..2e5d72b12d9 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/SumObserverMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/CounterObserverMetric.ts @@ -22,10 +22,10 @@ import { Processor } from './export/Processor'; import { LastValue, MetricKind } from './export/types'; import { ObserverResult } from './ObserverResult'; -/** This is a SDK implementation of SumObserver Metric. */ -export class SumObserverMetric +/** This is a SDK implementation of CounterObserver Metric. */ +export class CounterObserverMetric extends BaseObserverMetric - implements api.SumObserver { + implements api.CounterObserver { constructor( name: string, options: api.MetricOptions, @@ -39,7 +39,7 @@ export class SumObserverMetric options, processor, resource, - MetricKind.SUM_OBSERVER, + MetricKind.COUNTER_OBSERVER, instrumentationLibrary, callback ); @@ -48,7 +48,7 @@ export class SumObserverMetric protected override _processResults(observerResult: ObserverResult): void { observerResult.values.forEach((value, labels) => { const instrument = this.bind(labels); - // SumObserver is monotonic which means it should only accept values + // CounterObserver is monotonic which means it should only accept values // greater or equal then previous value const previous = instrument.getAggregator().toPoint(); let previousValue = -Infinity; diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/ValueObserverMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/GaugeObserverMetric.ts similarity index 89% rename from experimental/packages/opentelemetry-sdk-metrics-base/src/ValueObserverMetric.ts rename to experimental/packages/opentelemetry-sdk-metrics-base/src/GaugeObserverMetric.ts index a7ac5c5ff59..ced7f5c2926 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/ValueObserverMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/GaugeObserverMetric.ts @@ -20,10 +20,10 @@ import { BaseObserverMetric } from './BaseObserverMetric'; import { Processor } from './export/Processor'; import { MetricKind } from './export/types'; -/** This is a SDK implementation of Value Observer Metric. */ -export class ValueObserverMetric +/** This is a SDK implementation of Gauge Observer Metric. */ +export class GaugeObserverMetric extends BaseObserverMetric - implements api.ValueObserver { + implements api.GaugeObserver { constructor( name: string, options: api.MetricOptions, @@ -37,7 +37,7 @@ export class ValueObserverMetric options, processor, resource, - MetricKind.VALUE_OBSERVER, + MetricKind.GAUGE_OBSERVER, instrumentationLibrary, callback ); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/ValueRecorderMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/HistogramMetric.ts similarity index 79% rename from experimental/packages/opentelemetry-sdk-metrics-base/src/ValueRecorderMetric.ts rename to experimental/packages/opentelemetry-sdk-metrics-base/src/HistogramMetric.ts index 28e9d7e1b2c..20a7ade3a77 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/ValueRecorderMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/HistogramMetric.ts @@ -17,15 +17,15 @@ import * as api from '@opentelemetry/api-metrics'; import { InstrumentationLibrary } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; -import { BoundValueRecorder } from './BoundInstrument'; +import { BoundHistogram } from './BoundInstrument'; import { Processor } from './export/Processor'; import { MetricKind } from './export/types'; import { Metric } from './Metric'; -/** This is a SDK implementation of Value Recorder Metric. */ -export class ValueRecorderMetric - extends Metric - implements api.ValueRecorder { +/** This is a SDK implementation of Histogram Metric. */ +export class HistogramMetric + extends Metric + implements api.Histogram { constructor( name: string, options: api.MetricOptions, @@ -36,14 +36,14 @@ export class ValueRecorderMetric super( name, options, - MetricKind.VALUE_RECORDER, + MetricKind.HISTOGRAM, resource, instrumentationLibrary ); } - protected _makeInstrument(labels: api.Labels): BoundValueRecorder { - return new BoundValueRecorder( + protected _makeInstrument(labels: api.Labels): BoundHistogram { + return new BoundHistogram( labels, this._disabled, this._valueType, diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts index 32f295694c6..684f4f22b21 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts @@ -25,12 +25,12 @@ import { PushController } from './export/Controller'; import { NoopExporter } from './export/NoopExporter'; import { Processor, UngroupedProcessor } from './export/Processor'; import { Metric } from './Metric'; -import { SumObserverMetric } from './SumObserverMetric'; +import { CounterObserverMetric } from './CounterObserverMetric'; import { DEFAULT_CONFIG, DEFAULT_METRIC_OPTIONS, MeterConfig } from './types'; import { UpDownCounterMetric } from './UpDownCounterMetric'; -import { UpDownSumObserverMetric } from './UpDownSumObserverMetric'; -import { ValueObserverMetric } from './ValueObserverMetric'; -import { ValueRecorderMetric } from './ValueRecorderMetric'; +import { UpDownCounterObserverMetric } from './UpDownCounterObserverMetric'; +import { GaugeObserverMetric } from './GaugeObserverMetric'; +import { HistogramMetric } from './HistogramMetric'; // eslint-disable-next-line @typescript-eslint/no-var-requires const merge = require('lodash.merge'); @@ -66,34 +66,34 @@ export class Meter implements api.Meter { } /** - * Creates and returns a new {@link ValueRecorder}. + * Creates and returns a new {@link Histogram}. * @param name the name of the metric. * @param [options] the metric options. */ - createValueRecorder( + createHistogram( name: string, options?: api.MetricOptions - ): api.ValueRecorder { + ): api.Histogram { if (!this._isValidName(name)) { diag.warn( `Invalid metric name ${name}. Defaulting to noop metric implementation.` ); - return api.NOOP_VALUE_RECORDER_METRIC; + return api.NOOP_HISTOGRAM_METRIC; } const opt: api.MetricOptions = { ...DEFAULT_METRIC_OPTIONS, ...options, }; - const valueRecorder = new ValueRecorderMetric( + const histogram = new HistogramMetric( name, opt, this._processor, this._resource, this._instrumentationLibrary ); - this._registerMetric(name, valueRecorder); - return valueRecorder; + this._registerMetric(name, histogram); + return histogram; } /** @@ -161,27 +161,27 @@ export class Meter implements api.Meter { } /** - * Creates a new `ValueObserver` metric. + * Creates a new `GaugeObserver` metric. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the value observer callback + * @param [callback] the gauge observer callback */ - createValueObserver( + createGaugeObserver( name: string, options: api.MetricOptions = {}, callback?: (observerResult: api.ObserverResult) => unknown - ): api.ValueObserver { + ): api.GaugeObserver { if (!this._isValidName(name)) { diag.warn( `Invalid metric name ${name}. Defaulting to noop metric implementation.` ); - return api.NOOP_VALUE_OBSERVER_METRIC; + return api.NOOP_GAUGE_OBSERVER_METRIC; } const opt: api.MetricOptions = { ...DEFAULT_METRIC_OPTIONS, ...options, }; - const valueObserver = new ValueObserverMetric( + const gaugeObserver = new GaugeObserverMetric( name, opt, this._processor, @@ -189,26 +189,26 @@ export class Meter implements api.Meter { this._instrumentationLibrary, callback ); - this._registerMetric(name, valueObserver); - return valueObserver; + this._registerMetric(name, gaugeObserver); + return gaugeObserver; } - createSumObserver( + createCounterObserver( name: string, options: api.MetricOptions = {}, callback?: (observerResult: api.ObserverResult) => unknown - ): api.SumObserver { + ): api.CounterObserver { if (!this._isValidName(name)) { diag.warn( `Invalid metric name ${name}. Defaulting to noop metric implementation.` ); - return api.NOOP_SUM_OBSERVER_METRIC; + return api.NOOP_COUNTER_OBSERVER_METRIC; } const opt: api.MetricOptions = { ...DEFAULT_METRIC_OPTIONS, ...options, }; - const sumObserver = new SumObserverMetric( + const counterObserver = new CounterObserverMetric( name, opt, this._processor, @@ -216,32 +216,32 @@ export class Meter implements api.Meter { this._instrumentationLibrary, callback ); - this._registerMetric(name, sumObserver); - return sumObserver; + this._registerMetric(name, counterObserver); + return counterObserver; } /** - * Creates a new `UpDownSumObserver` metric. + * Creates a new `UpDownCounterObserver` metric. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the value observer callback + * @param [callback] the gauge observer callback */ - createUpDownSumObserver( + createUpDownCounterObserver( name: string, options: api.MetricOptions = {}, callback?: (observerResult: api.ObserverResult) => unknown - ): api.UpDownSumObserver { + ): api.UpDownCounterObserver { if (!this._isValidName(name)) { diag.warn( `Invalid metric name ${name}. Defaulting to noop metric implementation.` ); - return api.NOOP_UP_DOWN_SUM_OBSERVER_METRIC; + return api.NOOP_UP_DOWN_COUNTER_OBSERVER_METRIC; } const opt: api.MetricOptions = { ...DEFAULT_METRIC_OPTIONS, ...options, }; - const upDownSumObserver = new UpDownSumObserverMetric( + const upDownCounterObserver = new UpDownCounterObserverMetric( name, opt, this._processor, @@ -249,8 +249,8 @@ export class Meter implements api.Meter { this._instrumentationLibrary, callback ); - this._registerMetric(name, upDownSumObserver); - return upDownSumObserver; + this._registerMetric(name, upDownCounterObserver); + return upDownCounterObserver; } /** diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/UpDownSumObserverMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/UpDownCounterObserverMetric.ts similarity index 87% rename from experimental/packages/opentelemetry-sdk-metrics-base/src/UpDownSumObserverMetric.ts rename to experimental/packages/opentelemetry-sdk-metrics-base/src/UpDownCounterObserverMetric.ts index 31cec8af7a5..990a5506fb9 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/UpDownSumObserverMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/UpDownCounterObserverMetric.ts @@ -21,10 +21,10 @@ import { BaseObserverMetric } from './BaseObserverMetric'; import { Processor } from './export/Processor'; import { MetricKind } from './export/types'; -/** This is a SDK implementation of UpDownSumObserver Metric. */ -export class UpDownSumObserverMetric +/** This is a SDK implementation of UpDownCounterObserver Metric. */ +export class UpDownCounterObserverMetric extends BaseObserverMetric - implements api.UpDownSumObserver { + implements api.UpDownCounterObserver { constructor( name: string, options: api.MetricOptions, @@ -38,7 +38,7 @@ export class UpDownSumObserverMetric options, processor, resource, - MetricKind.UP_DOWN_SUM_OBSERVER, + MetricKind.UP_DOWN_COUNTER_OBSERVER, instrumentationLibrary, callback ); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/export/Processor.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/export/Processor.ts index 03d2cbcf52d..1316b80dd7d 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/export/Processor.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/export/Processor.ts @@ -54,12 +54,12 @@ export class UngroupedProcessor extends Processor { case MetricKind.UP_DOWN_COUNTER: return new aggregators.SumAggregator(); - case MetricKind.SUM_OBSERVER: - case MetricKind.UP_DOWN_SUM_OBSERVER: - case MetricKind.VALUE_OBSERVER: + case MetricKind.COUNTER_OBSERVER: + case MetricKind.UP_DOWN_COUNTER_OBSERVER: + case MetricKind.GAUGE_OBSERVER: return new aggregators.LastValueAggregator(); - case MetricKind.VALUE_RECORDER: + case MetricKind.HISTOGRAM: return new aggregators.HistogramAggregator( metricDescriptor.boundaries || [Infinity] ); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/export/types.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/export/types.ts index 889e96598d7..941a3519bbd 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/export/types.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/export/types.ts @@ -27,10 +27,10 @@ import { Resource } from '@opentelemetry/resources'; export enum MetricKind { COUNTER, UP_DOWN_COUNTER, - VALUE_RECORDER, - SUM_OBSERVER, - UP_DOWN_SUM_OBSERVER, - VALUE_OBSERVER, + HISTOGRAM, + COUNTER_OBSERVER, + UP_DOWN_COUNTER_OBSERVER, + GAUGE_OBSERVER, BATCH_OBSERVER, } diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/index.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/index.ts index afcdeea5b13..a6e18ec48dc 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/index.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/index.ts @@ -16,11 +16,11 @@ export * from './BoundInstrument'; export * from './CounterMetric'; -export * from './ValueRecorderMetric'; +export * from './HistogramMetric'; export * from './Meter'; export * from './MeterProvider'; export * from './Metric'; -export * from './ValueObserverMetric'; +export * from './GaugeObserverMetric'; export * from './export/aggregators'; export * from './export/ConsoleMetricExporter'; export * from './export/Processor'; diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts b/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts index b1e6389b5d3..0d49cd26830 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts @@ -34,15 +34,15 @@ import { MetricRecord, Sum, UpDownCounterMetric, - ValueObserverMetric, - ValueRecorderMetric, + GaugeObserverMetric, + HistogramMetric, } from '../src'; import { BatchObserver } from '../src/BatchObserver'; import { BatchObserverResult } from '../src/BatchObserverResult'; import { SumAggregator } from '../src/export/aggregators'; import { Processor } from '../src/export/Processor'; -import { SumObserverMetric } from '../src/SumObserverMetric'; -import { UpDownSumObserverMetric } from '../src/UpDownSumObserverMetric'; +import { CounterObserverMetric } from '../src/CounterObserverMetric'; +import { UpDownCounterObserverMetric } from '../src/UpDownCounterObserverMetric'; import { hashLabels } from '../src/Utils'; const nonNumberValues = [ @@ -543,33 +543,33 @@ describe('Meter', () => { }); }); - describe('#ValueRecorder', () => { - it('should create a valueRecorder', () => { - const valueRecorder = meter.createValueRecorder('name'); - assert.ok(valueRecorder instanceof Metric); + describe('#Histogram', () => { + it('should create a histogram', () => { + const histogram = meter.createHistogram('name'); + assert.ok(histogram instanceof Metric); }); - it('should create a valueRecorder with options', () => { - const valueRecorder = meter.createValueRecorder('name', { + it('should create a histogram with options', () => { + const histogram = meter.createHistogram('name', { description: 'desc', unit: '1', disabled: false, }); - assert.ok(valueRecorder instanceof Metric); + assert.ok(histogram instanceof Metric); }); - it('should set histogram boundaries for value recorder', async () => { - const valueRecorder = meter.createValueRecorder('name', { + it('should set histogram boundaries for histogram', async () => { + const histogram = meter.createHistogram('name', { description: 'desc', unit: '1', disabled: false, boundaries: [10, 20, 30, 100], - }) as ValueRecorderMetric; + }) as HistogramMetric; - valueRecorder.record(10); - valueRecorder.record(30); - valueRecorder.record(50); - valueRecorder.record(200); + histogram.record(10); + histogram.record(30); + histogram.record(50); + histogram.record(200); await meter.collect(); const [record] = meter.getProcessor().checkPointSet(); @@ -582,30 +582,30 @@ describe('Meter', () => { sum: 290, }); - assert.ok(valueRecorder instanceof Metric); + assert.ok(histogram instanceof Metric); }); it('should pipe through resource', async () => { - const valueRecorder = meter.createValueRecorder( + const histogram = meter.createHistogram( 'name' - ) as ValueRecorderMetric; - assert.ok(valueRecorder.resource instanceof Resource); + ) as HistogramMetric; + assert.ok(histogram.resource instanceof Resource); - valueRecorder.record(1, { foo: 'bar' }); + histogram.record(1, { foo: 'bar' }); - const [record] = await valueRecorder.getMetricRecord(); + const [record] = await histogram.getMetricRecord(); assert.ok(record.resource instanceof Resource); }); it('should pipe through instrumentation library', async () => { - const valueRecorder = meter.createValueRecorder( + const histogram = meter.createHistogram( 'name' - ) as ValueRecorderMetric; - assert.ok(valueRecorder.instrumentationLibrary); + ) as HistogramMetric; + assert.ok(histogram.instrumentationLibrary); - valueRecorder.record(1, { foo: 'bar' }); + histogram.record(1, { foo: 'bar' }); - const [record] = await valueRecorder.getMetricRecord(); + const [record] = await histogram.getMetricRecord(); const { name, version } = record.instrumentationLibrary; assert.strictEqual(name, 'test-meter'); assert.strictEqual(version, undefined); @@ -613,42 +613,42 @@ describe('Meter', () => { describe('names', () => { it('should return no op metric if name is an empty string', () => { - const valueRecorder = meter.createValueRecorder(''); - assert.ok(valueRecorder instanceof api.NoopMetric); + const histogram = meter.createHistogram(''); + assert.ok(histogram instanceof api.NoopMetric); }); it('should return no op metric if name does not start with a letter', () => { - const valueRecorder1 = meter.createValueRecorder('1name'); - const valueRecorder_ = meter.createValueRecorder('_name'); - assert.ok(valueRecorder1 instanceof api.NoopMetric); - assert.ok(valueRecorder_ instanceof api.NoopMetric); + const histogram1 = meter.createHistogram('1name'); + const histogram_ = meter.createHistogram('_name'); + assert.ok(histogram1 instanceof api.NoopMetric); + assert.ok(histogram_ instanceof api.NoopMetric); }); it('should return no op metric if name is an empty string contain only letters, numbers, ".", "_", and "-"', () => { - const valueRecorder = meter.createValueRecorder( + const histogram = meter.createHistogram( 'name with invalid characters^&*(' ); - assert.ok(valueRecorder instanceof api.NoopMetric); + assert.ok(histogram instanceof api.NoopMetric); }); }); describe('.bind()', () => { const performanceTimeOrigin = hrTime(); - it('should create a valueRecorder instrument', () => { - const valueRecorder = meter.createValueRecorder( + it('should create a histogram instrument', () => { + const histogram = meter.createHistogram( 'name' - ) as ValueRecorderMetric; - const boundValueRecorder = valueRecorder.bind(labels); - assert.doesNotThrow(() => boundValueRecorder.record(10)); + ) as HistogramMetric; + const boundHistogram = histogram.bind(labels); + assert.doesNotThrow(() => boundHistogram.record(10)); }); it('should not set the instrument data when disabled', async () => { - const valueRecorder = meter.createValueRecorder('name', { + const histogram = meter.createHistogram('name', { disabled: true, - }) as ValueRecorderMetric; - const boundValueRecorder = valueRecorder.bind(labels); - boundValueRecorder.record(10); + }) as HistogramMetric; + const boundHistogram = histogram.bind(labels); + boundHistogram.record(10); await meter.collect(); const [record1] = meter.getProcessor().checkPointSet(); @@ -666,10 +666,10 @@ describe('Meter', () => { }); it('should accept negative (and positive) values', async () => { - const valueRecorder = meter.createValueRecorder('name'); - const boundValueRecorder = valueRecorder.bind(labels); - boundValueRecorder.record(-10); - boundValueRecorder.record(50); + const histogram = meter.createHistogram('name'); + const boundHistogram = histogram.bind(labels); + boundHistogram.record(-10); + boundHistogram.record(50); await meter.collect(); const [record1] = meter.getProcessor().checkPointSet(); @@ -691,13 +691,13 @@ describe('Meter', () => { }); it('should return same instrument on same label values', async () => { - const valueRecorder = meter.createValueRecorder( + const histogram = meter.createHistogram( 'name' - ) as ValueRecorderMetric; - const boundValueRecorder1 = valueRecorder.bind(labels); - boundValueRecorder1.record(10); - const boundValueRecorder2 = valueRecorder.bind(labels); - boundValueRecorder2.record(100); + ) as HistogramMetric; + const boundHistogram1 = histogram.bind(labels); + boundHistogram1.record(10); + const boundHistogram2 = histogram.bind(labels); + boundHistogram2.record(100); await meter.collect(); const [record1] = meter.getProcessor().checkPointSet(); assert.deepStrictEqual( @@ -711,19 +711,19 @@ describe('Meter', () => { sum: 110, } ); - assert.strictEqual(boundValueRecorder1, boundValueRecorder2); + assert.strictEqual(boundHistogram1, boundHistogram2); }); it('should ignore non-number values', async () => { - const valueRecorder = meter.createValueRecorder( + const histogram = meter.createHistogram( 'name' - ) as ValueRecorderMetric; - const boundValueRecorder = valueRecorder.bind(labels); + ) as HistogramMetric; + const boundHistogram = histogram.bind(labels); await Promise.all( nonNumberValues.map(async val => { // @ts-expect-error verify non number types - boundValueRecorder.record(val); + boundHistogram.record(val); await meter.collect(); const [record1] = meter.getProcessor().checkPointSet(); assert.deepStrictEqual( @@ -743,47 +743,47 @@ describe('Meter', () => { }); describe('.unbind()', () => { - it('should remove the valueRecorder instrument', () => { - const valueRecorder = meter.createValueRecorder( + it('should remove the histogram instrument', () => { + const histogram = meter.createHistogram( 'name' - ) as ValueRecorderMetric; - const boundValueRecorder = valueRecorder.bind(labels); - assert.strictEqual(valueRecorder['_instruments'].size, 1); - valueRecorder.unbind(labels); - assert.strictEqual(valueRecorder['_instruments'].size, 0); - const boundValueRecorder2 = valueRecorder.bind(labels); - assert.strictEqual(valueRecorder['_instruments'].size, 1); - assert.notStrictEqual(boundValueRecorder, boundValueRecorder2); + ) as HistogramMetric; + const boundHistogram = histogram.bind(labels); + assert.strictEqual(histogram['_instruments'].size, 1); + histogram.unbind(labels); + assert.strictEqual(histogram['_instruments'].size, 0); + const boundHistogram2 = histogram.bind(labels); + assert.strictEqual(histogram['_instruments'].size, 1); + assert.notStrictEqual(boundHistogram, boundHistogram2); }); it('should not fail when removing non existing instrument', () => { - const valueRecorder = meter.createValueRecorder('name'); - valueRecorder.unbind({}); + const histogram = meter.createHistogram('name'); + histogram.unbind({}); }); it('should clear all instruments', () => { - const valueRecorder = meter.createValueRecorder( + const histogram = meter.createHistogram( 'name' - ) as ValueRecorderMetric; - valueRecorder.bind(labels); - assert.strictEqual(valueRecorder['_instruments'].size, 1); - valueRecorder.clear(); - assert.strictEqual(valueRecorder['_instruments'].size, 0); + ) as HistogramMetric; + histogram.bind(labels); + assert.strictEqual(histogram['_instruments'].size, 1); + histogram.clear(); + assert.strictEqual(histogram['_instruments'].size, 0); }); }); }); - describe('#SumObserverMetric', () => { + describe('#CounterObserverMetric', () => { it('should create an Sum observer', () => { - const sumObserver = meter.createSumObserver('name') as SumObserverMetric; - assert.ok(sumObserver instanceof Metric); + const counterObserver = meter.createCounterObserver('name') as CounterObserverMetric; + assert.ok(counterObserver instanceof Metric); }); it('should return noop observer when name is invalid', () => { // Need to stub/spy on the underlying logger as the "diag" instance is global const spy = sinon.stub(diag, 'warn'); - const sumObserver = meter.createSumObserver('na me'); - assert.ok(sumObserver === api.NOOP_SUM_OBSERVER_METRIC); + const counterObserver = meter.createCounterObserver('na me'); + assert.ok(counterObserver === api.NOOP_COUNTER_OBSERVER_METRIC); const args = spy.args[0]; assert.ok( args[0], @@ -792,12 +792,12 @@ describe('Meter', () => { }); it('should create observer with options', () => { - const sumObserver = meter.createSumObserver('name', { + const counterObserver = meter.createCounterObserver('name', { description: 'desc', unit: '1', disabled: false, - }) as SumObserverMetric; - assert.ok(sumObserver instanceof Metric); + }) as CounterObserverMetric; + assert.ok(counterObserver instanceof Metric); }); it('should set callback and observe value ', async () => { @@ -811,7 +811,7 @@ describe('Meter', () => { return -1; } - const sumObserver = meter.createSumObserver( + const counterObserver = meter.createCounterObserver( 'name', { description: 'desc', @@ -825,9 +825,9 @@ describe('Meter', () => { }, 1); }); } - ) as SumObserverMetric; + ) as CounterObserverMetric; - let metricRecords = await sumObserver.getMetricRecord(); + let metricRecords = await counterObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); let point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, -1); @@ -836,19 +836,19 @@ describe('Meter', () => { '|#core:1,pid:123' ); - metricRecords = await sumObserver.getMetricRecord(); + metricRecords = await counterObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, 3); - metricRecords = await sumObserver.getMetricRecord(); + metricRecords = await counterObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, 3); }); it('should set callback and observe value when callback returns nothing', async () => { - const sumObserver = meter.createSumObserver( + const counterObserver = meter.createCounterObserver( 'name', { description: 'desc', @@ -856,9 +856,9 @@ describe('Meter', () => { (observerResult: api.ObserverResult) => { observerResult.observe(1, { pid: '123', core: '1' }); } - ) as SumObserverMetric; + ) as CounterObserverMetric; - const metricRecords = await sumObserver.getMetricRecord(); + const metricRecords = await counterObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); }); @@ -866,7 +866,7 @@ describe('Meter', () => { 'should set callback and observe value when callback returns anything' + ' but Promise', async () => { - const sumObserver = meter.createSumObserver( + const counterObserver = meter.createCounterObserver( 'name', { description: 'desc', @@ -875,15 +875,15 @@ describe('Meter', () => { observerResult.observe(1, { pid: '123', core: '1' }); return '1'; } - ) as SumObserverMetric; + ) as CounterObserverMetric; - const metricRecords = await sumObserver.getMetricRecord(); + const metricRecords = await counterObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); } ); it('should reject getMetricRecord when callback throws an error', async () => { - const sumObserver = meter.createSumObserver( + const counterObserver = meter.createCounterObserver( 'name', { description: 'desc', @@ -892,8 +892,8 @@ describe('Meter', () => { observerResult.observe(1, { pid: '123', core: '1' }); throw new Error('Boom'); } - ) as SumObserverMetric; - await sumObserver + ) as CounterObserverMetric; + await counterObserver .getMetricRecord() .then() .catch(e => { @@ -902,30 +902,30 @@ describe('Meter', () => { }); it('should pipe through resource', async () => { - const sumObserver = meter.createSumObserver('name', {}, result => { + const counterObserver = meter.createCounterObserver('name', {}, result => { result.observe(42, { foo: 'bar' }); return Promise.resolve(); - }) as SumObserverMetric; - assert.ok(sumObserver.resource instanceof Resource); + }) as CounterObserverMetric; + assert.ok(counterObserver.resource instanceof Resource); - const [record] = await sumObserver.getMetricRecord(); + const [record] = await counterObserver.getMetricRecord(); assert.ok(record.resource instanceof Resource); }); }); - describe('#ValueObserver', () => { - it('should create a value observer', () => { - const valueObserver = meter.createValueObserver( + describe('#GaugeObserver', () => { + it('should create a gauge observer', () => { + const gaugeObserver = meter.createGaugeObserver( 'name' - ) as ValueObserverMetric; - assert.ok(valueObserver instanceof Metric); + ) as GaugeObserverMetric; + assert.ok(gaugeObserver instanceof Metric); }); it('should return noop observer when name is invalid', () => { // Need to stub/spy on the underlying logger as the "diag" instance is global const spy = sinon.stub(diag, 'warn'); - const valueObserver = meter.createValueObserver('na me'); - assert.ok(valueObserver === api.NOOP_VALUE_OBSERVER_METRIC); + const gaugeObserver = meter.createGaugeObserver('na me'); + assert.ok(gaugeObserver === api.NOOP_GAUGE_OBSERVER_METRIC); const args = spy.args[0]; assert.ok( args[0], @@ -934,16 +934,16 @@ describe('Meter', () => { }); it('should create observer with options', () => { - const valueObserver = meter.createValueObserver('name', { + const gaugeObserver = meter.createGaugeObserver('name', { description: 'desc', unit: '1', disabled: false, - }) as ValueObserverMetric; - assert.ok(valueObserver instanceof Metric); + }) as GaugeObserverMetric; + assert.ok(gaugeObserver instanceof Metric); }); it('should set callback and observe value ', async () => { - const valueObserver = meter.createValueObserver( + const gaugeObserver = meter.createGaugeObserver( 'name', { description: 'desc', @@ -960,13 +960,13 @@ describe('Meter', () => { }, 1); }); } - ) as ValueObserverMetric; + ) as GaugeObserverMetric; function getCpuUsage() { return Math.random(); } - const metricRecords: MetricRecord[] = await valueObserver.getMetricRecord(); + const metricRecords: MetricRecord[] = await gaugeObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 4); const metric1 = metricRecords[0]; @@ -985,29 +985,29 @@ describe('Meter', () => { }); it('should pipe through resource', async () => { - const valueObserver = meter.createValueObserver('name', {}, result => { + const gaugeObserver = meter.createGaugeObserver('name', {}, result => { result.observe(42, { foo: 'bar' }); - }) as ValueObserverMetric; - assert.ok(valueObserver.resource instanceof Resource); + }) as GaugeObserverMetric; + assert.ok(gaugeObserver.resource instanceof Resource); - const [record] = await valueObserver.getMetricRecord(); + const [record] = await gaugeObserver.getMetricRecord(); assert.ok(record.resource instanceof Resource); }); }); - describe('#UpDownSumObserverMetric', () => { + describe('#UpDownCounterObserverMetric', () => { it('should create an UpDownSum observer', () => { - const upDownSumObserver = meter.createUpDownSumObserver( + const upDownCounterObserver = meter.createUpDownCounterObserver( 'name' - ) as UpDownSumObserverMetric; - assert.ok(upDownSumObserver instanceof Metric); + ) as UpDownCounterObserverMetric; + assert.ok(upDownCounterObserver instanceof Metric); }); it('should return noop observer when name is invalid', () => { // Need to stub/spy on the underlying logger as the "diag" instance is global const spy = sinon.stub(diag, 'warn'); - const upDownSumObserver = meter.createUpDownSumObserver('na me'); - assert.ok(upDownSumObserver === api.NOOP_UP_DOWN_SUM_OBSERVER_METRIC); + const upDownCounterObserver = meter.createUpDownCounterObserver('na me'); + assert.ok(upDownCounterObserver === api.NOOP_UP_DOWN_COUNTER_OBSERVER_METRIC); const args = spy.args[0]; assert.ok( args[0], @@ -1016,12 +1016,12 @@ describe('Meter', () => { }); it('should create observer with options', () => { - const upDownSumObserver = meter.createUpDownSumObserver('name', { + const upDownCounterObserver = meter.createUpDownCounterObserver('name', { description: 'desc', unit: '1', disabled: false, - }) as UpDownSumObserverMetric; - assert.ok(upDownSumObserver instanceof Metric); + }) as UpDownCounterObserverMetric; + assert.ok(upDownCounterObserver instanceof Metric); }); it('should set callback and observe value ', async () => { @@ -1035,7 +1035,7 @@ describe('Meter', () => { return 3; } - const upDownSumObserver = meter.createUpDownSumObserver( + const upDownCounterObserver = meter.createUpDownCounterObserver( 'name', { description: 'desc', @@ -1049,9 +1049,9 @@ describe('Meter', () => { }, 1); }); } - ) as UpDownSumObserverMetric; + ) as UpDownCounterObserverMetric; - let metricRecords = await upDownSumObserver.getMetricRecord(); + let metricRecords = await upDownCounterObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); let point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, 3); @@ -1060,19 +1060,19 @@ describe('Meter', () => { '|#core:1,pid:123' ); - metricRecords = await upDownSumObserver.getMetricRecord(); + metricRecords = await upDownCounterObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, 2); - metricRecords = await upDownSumObserver.getMetricRecord(); + metricRecords = await upDownCounterObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, 3); }); it('should set callback and observe value when callback returns nothing', async () => { - const upDownSumObserver = meter.createUpDownSumObserver( + const upDownCounterObserver = meter.createUpDownCounterObserver( 'name', { description: 'desc', @@ -1080,9 +1080,9 @@ describe('Meter', () => { (observerResult: api.ObserverResult) => { observerResult.observe(1, { pid: '123', core: '1' }); } - ) as UpDownSumObserverMetric; + ) as UpDownCounterObserverMetric; - const metricRecords = await upDownSumObserver.getMetricRecord(); + const metricRecords = await upDownCounterObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); }); @@ -1090,7 +1090,7 @@ describe('Meter', () => { 'should set callback and observe value when callback returns anything' + ' but Promise', async () => { - const upDownSumObserver = meter.createUpDownSumObserver( + const upDownCounterObserver = meter.createUpDownCounterObserver( 'name', { description: 'desc', @@ -1099,15 +1099,15 @@ describe('Meter', () => { observerResult.observe(1, { pid: '123', core: '1' }); return '1'; } - ) as UpDownSumObserverMetric; + ) as UpDownCounterObserverMetric; - const metricRecords = await upDownSumObserver.getMetricRecord(); + const metricRecords = await upDownCounterObserver.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); } ); it('should reject getMetricRecord when callback throws an error', async () => { - const upDownSumObserver = meter.createUpDownSumObserver( + const upDownCounterObserver = meter.createUpDownCounterObserver( 'name', { description: 'desc', @@ -1116,8 +1116,8 @@ describe('Meter', () => { observerResult.observe(1, { pid: '123', core: '1' }); throw new Error('Boom'); } - ) as UpDownSumObserverMetric; - await upDownSumObserver + ) as UpDownCounterObserverMetric; + await upDownCounterObserver .getMetricRecord() .then() .catch(e => { @@ -1126,17 +1126,17 @@ describe('Meter', () => { }); it('should pipe through resource', async () => { - const upDownSumObserver = meter.createUpDownSumObserver( + const upDownCounterObserver = meter.createUpDownCounterObserver( 'name', {}, result => { result.observe(42, { foo: 'bar' }); return Promise.resolve(); } - ) as UpDownSumObserverMetric; - assert.ok(upDownSumObserver.resource instanceof Resource); + ) as UpDownCounterObserverMetric; + assert.ok(upDownCounterObserver.resource instanceof Resource); - const [record] = await upDownSumObserver.getMetricRecord(); + const [record] = await upDownCounterObserver.getMetricRecord(); assert.ok(record.resource instanceof Resource); }); }); @@ -1155,13 +1155,13 @@ describe('Meter', () => { }); it('should use callback to observe values ', async () => { - const tempMetric = meter.createValueObserver('cpu_temp_per_app', { + const tempMetric = meter.createGaugeObserver('cpu_temp_per_app', { description: 'desc', - }) as ValueObserverMetric; + }) as GaugeObserverMetric; - const cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', { + const cpuUsageMetric = meter.createGaugeObserver('cpu_usage_per_app', { description: 'desc', - }) as ValueObserverMetric; + }) as GaugeObserverMetric; meter.createBatchObserver(observerBatchResult => { interface StatItem { @@ -1248,9 +1248,9 @@ describe('Meter', () => { }); it('should not observe values when timeout', done => { - const cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', { + const cpuUsageMetric = meter.createGaugeObserver('cpu_usage_per_app', { description: 'desc', - }) as ValueObserverMetric; + }) as GaugeObserverMetric; meter.createBatchObserver( observerBatchResult => { @@ -1289,13 +1289,13 @@ describe('Meter', () => { }); it('should pipe through instrumentation library', async () => { - const observer = meter.createValueObserver( + const observer = meter.createGaugeObserver( 'name', {}, (observerResult: api.ObserverResult) => { observerResult.observe(42, { foo: 'bar' }); } - ) as ValueObserverMetric; + ) as GaugeObserverMetric; assert.ok(observer.instrumentationLibrary); const [record] = await observer.getMetricRecord(); @@ -1363,8 +1363,8 @@ describe('Meter', () => { processor: new CustomProcessor(), }); assert.throws(() => { - const valueRecorder = customMeter.createValueRecorder('myValueRecorder'); - valueRecorder.bind({}).record(1); + const histogram = customMeter.createHistogram('myHistogram'); + histogram.bind({}).record(1); }, /aggregatorFor method not implemented/); }); }); @@ -1389,6 +1389,6 @@ function ensureMetric(metric: MetricRecord, name?: string, value?: LastValue) { assert.strictEqual(descriptor.name, name || 'name'); assert.strictEqual(descriptor.description, 'desc'); assert.strictEqual(descriptor.unit, '1'); - assert.strictEqual(descriptor.metricKind, MetricKind.VALUE_OBSERVER); + assert.strictEqual(descriptor.metricKind, MetricKind.GAUGE_OBSERVER); assert.strictEqual(descriptor.valueType, api.ValueType.DOUBLE); } diff --git a/experimental/tsconfig.esm.json b/experimental/tsconfig.esm.json index cd3052ad278..24601a96f96 100644 --- a/experimental/tsconfig.esm.json +++ b/experimental/tsconfig.esm.json @@ -5,6 +5,9 @@ { "path": "packages/opentelemetry-api-metrics/tsconfig.esm.json" }, + { + "path": "packages/opentelemetry-exporter-prometheus" + }, { "path": "packages/opentelemetry-instrumentation-fetch/tsconfig.esm.json" }, diff --git a/experimental/tsconfig.json b/experimental/tsconfig.json index a4220672a87..9b72d3c1f1a 100644 --- a/experimental/tsconfig.json +++ b/experimental/tsconfig.json @@ -5,6 +5,9 @@ { "path": "packages/opentelemetry-api-metrics" }, + { + "path": "packages/opentelemetry-exporter-prometheus" + }, { "path": "packages/opentelemetry-instrumentation-fetch" }, From 8d882227a4669eb5114bc66105822df682cbc0d9 Mon Sep 17 00:00:00 2001 From: legendecas Date: Thu, 7 Oct 2021 00:10:53 +0800 Subject: [PATCH 2/8] fixup! rename observables --- doc/processor-api.md | 2 +- examples/metrics/metrics/observer.js | 6 +- examples/otlp-exporter-node/metrics.js | 4 +- .../src/NoopMeter.ts | 58 +++--- .../src/types/BoundInstrument.ts | 4 +- .../src/types/Meter.ts | 30 ++-- .../src/types/Metric.ts | 18 +- .../src/types/Observation.ts | 6 +- .../src/types/ObserverResult.ts | 2 +- .../test/OTLPMetricExporter.test.ts | 38 ++-- .../test/helper.ts | 28 +-- .../src/transformMetrics.ts | 8 +- .../browser/CollectorMetricExporter.test.ts | 22 +-- .../common/CollectorMetricExporter.test.ts | 6 +- .../test/common/transformMetrics.test.ts | 68 +++---- .../test/helper.ts | 44 ++--- .../test/node/CollectorMetricExporter.test.ts | 20 +-- .../test/OTLPMetricExporter.test.ts | 18 +- .../test/helper.ts | 16 +- .../src/PrometheusSerializer.ts | 4 +- .../test/PrometheusExporter.test.ts | 22 +-- .../test/PrometheusSerializer.test.ts | 14 +- .../opentelemetry-sdk-metrics-base/README.md | 24 +-- ...erverMetric.ts => BaseObservableMetric.ts} | 14 +- .../src/BoundInstrument.ts | 6 +- .../src/Meter.ts | 46 ++--- ...erMetric.ts => ObservableCounterMetric.ts} | 14 +- ...rverMetric.ts => ObservableGaugeMetric.ts} | 10 +- ...ic.ts => ObservableUpDownCounterMetric.ts} | 12 +- .../src/export/Processor.ts | 6 +- .../src/export/types.ts | 6 +- .../src/index.ts | 2 +- .../test/Meter.test.ts | 166 +++++++++--------- 33 files changed, 372 insertions(+), 372 deletions(-) rename experimental/packages/opentelemetry-sdk-metrics-base/src/{BaseObserverMetric.ts => BaseObservableMetric.ts} (88%) rename experimental/packages/opentelemetry-sdk-metrics-base/src/{CounterObserverMetric.ts => ObservableCounterMetric.ts} (83%) rename experimental/packages/opentelemetry-sdk-metrics-base/src/{GaugeObserverMetric.ts => ObservableGaugeMetric.ts} (86%) rename experimental/packages/opentelemetry-sdk-metrics-base/src/{UpDownCounterObserverMetric.ts => ObservableUpDownCounterMetric.ts} (80%) diff --git a/doc/processor-api.md b/doc/processor-api.md index b3abbcdecc5..944834b038e 100644 --- a/doc/processor-api.md +++ b/doc/processor-api.md @@ -138,7 +138,7 @@ const meter = new MeterProvider({ interval: 1000, }).getMeter('example-custom-processor'); -const requestsLatency = meter.createValueRecorder('requests', { +const requestsLatency = meter.createHistogram('requests', { monotonic: true, description: 'Average latency' }); diff --git a/examples/metrics/metrics/observer.js b/examples/metrics/metrics/observer.js index def56d872b7..1c41e0c6dc2 100644 --- a/examples/metrics/metrics/observer.js +++ b/examples/metrics/metrics/observer.js @@ -23,7 +23,7 @@ const meter = new MeterProvider({ interval: 2000, }).getMeter('example-observer'); -meter.createValueObserver('cpu_core_usage', { +meter.createObservableGauge('cpu_core_usage', { description: 'Example of a sync value observer with callback', }, async (observerResult) => { // this callback is called once per each interval await new Promise((resolve) => { @@ -34,12 +34,12 @@ meter.createValueObserver('cpu_core_usage', { }); // no callback as they will be updated in batch observer -const tempMetric = meter.createValueObserver('cpu_temp_per_app', { +const tempMetric = meter.createObservableGauge('cpu_temp_per_app', { description: 'Example of sync value observer used with async batch observer', }); // no callback as they will be updated in batch observer -const cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', { +const cpuUsageMetric = meter.createObservableGauge('cpu_usage_per_app', { description: 'Example of sync value observer used with async batch observer', }); diff --git a/examples/otlp-exporter-node/metrics.js b/examples/otlp-exporter-node/metrics.js index e0065aa6972..c920f1c5b4e 100644 --- a/examples/otlp-exporter-node/metrics.js +++ b/examples/otlp-exporter-node/metrics.js @@ -31,8 +31,8 @@ const upDownCounter = meter.createUpDownCounter('test_up_down_counter', { description: 'Example of a UpDownCounter', }); -const recorder = meter.createValueRecorder('test_value_recorder', { - description: 'Example of a ValueRecorder', +const recorder = meter.createHistogram('test_histogram', { + description: 'Example of a Histogram', }); const labels = { pid: process.pid, environment: 'staging' }; diff --git a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts index 57563349247..7bb7fe1797c 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts @@ -22,16 +22,16 @@ import { Labels, Counter, Histogram, - GaugeObserver, + ObservableGauge, UpDownCounter, - BaseObserver, - CounterObserver, - UpDownCounterObserver, + BaseObservable, + ObservableCounter, + ObservableUpDownCounter, } from './types/Metric'; import { BoundHistogram, BoundCounter, - BoundBaseObserver, + BoundBaseObservable, } from './types/BoundInstrument'; import { ObserverResult } from './types/ObserverResult'; import { Observation } from './types/Observation'; @@ -53,17 +53,17 @@ export class NoopMeter implements Meter { } /** - * Returns constant noop counter observer. + * Returns constant noop observable counter. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the counter observer callback + * @param [callback] the observable counter callback */ - createCounterObserver( + createObservableCounter( _name: string, _options?: MetricOptions, _callback?: (observerResult: ObserverResult) => void - ): CounterObserver { - return NOOP_COUNTER_OBSERVER_METRIC; + ): ObservableCounter { + return NOOP_OBSERVABLE_COUNTER_METRIC; } /** @@ -76,17 +76,17 @@ export class NoopMeter implements Meter { } /** - * Returns constant noop gauge observer. + * Returns constant noop observable gauge. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the gauge observer callback + * @param [callback] the observable gauge callback */ - createGaugeObserver( + createObservableGauge( _name: string, _options?: MetricOptions, _callback?: (observerResult: ObserverResult) => void - ): GaugeObserver { - return NOOP_GAUGE_OBSERVER_METRIC; + ): ObservableGauge { + return NOOP_OBSERVABLE_GAUGE_METRIC; } /** @@ -99,17 +99,17 @@ export class NoopMeter implements Meter { } /** - * Returns constant noop up down counter observer. + * Returns constant noop up down observable counter. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the up down counter observer callback + * @param [callback] the up down observable counter callback */ - createUpDownCounterObserver( + createObservableUpDownCounter( _name: string, _options?: MetricOptions, _callback?: (observerResult: ObserverResult) => void - ): UpDownCounterObserver { - return NOOP_UP_DOWN_COUNTER_OBSERVER_METRIC; + ): ObservableUpDownCounter { + return NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC; } /** @@ -174,12 +174,12 @@ export class NoopHistogramMetric } } -export class NoopBaseObserverMetric - extends NoopMetric - implements BaseObserver { +export class NoopBaseObservableMetric + extends NoopMetric + implements BaseObservable { observation(): Observation { return { - observer: this as BaseObserver, + observer: this as BaseObservable, value: 0, }; } @@ -199,7 +199,7 @@ export class NoopBoundHistogram implements BoundHistogram { } } -export class NoopBoundBaseObserver implements BoundBaseObserver { +export class NoopBoundBaseObservable implements BoundBaseObservable { update(_value: number): void {} } @@ -212,16 +212,16 @@ export const NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric( NOOP_BOUND_HISTOGRAM ); -export const NOOP_BOUND_BASE_OBSERVER = new NoopBoundBaseObserver(); -export const NOOP_GAUGE_OBSERVER_METRIC = new NoopBaseObserverMetric( +export const NOOP_BOUND_BASE_OBSERVER = new NoopBoundBaseObservable(); +export const NOOP_OBSERVABLE_GAUGE_METRIC = new NoopBaseObservableMetric( NOOP_BOUND_BASE_OBSERVER ); -export const NOOP_UP_DOWN_COUNTER_OBSERVER_METRIC = new NoopBaseObserverMetric( +export const NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopBaseObservableMetric( NOOP_BOUND_BASE_OBSERVER ); -export const NOOP_COUNTER_OBSERVER_METRIC = new NoopBaseObserverMetric( +export const NOOP_OBSERVABLE_COUNTER_METRIC = new NoopBaseObservableMetric( NOOP_BOUND_BASE_OBSERVER ); diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts b/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts index 828b6a741c2..39351ee53ed 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts @@ -32,7 +32,7 @@ export interface BoundHistogram { record(value: number): void; } -/** An Instrument for Base Observer */ -export interface BoundBaseObserver { +/** An Instrument for Base Observable */ +export interface BoundBaseObservable { update(value: number): void; } diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts index 7abab0ad84c..c16dd329578 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts @@ -19,11 +19,11 @@ import { MetricOptions, Counter, Histogram, - GaugeObserver, + ObservableGauge, BatchObserverOptions, UpDownCounter, - CounterObserver, - UpDownCounterObserver, + ObservableCounter, + ObservableUpDownCounter, } from './Metric'; import { ObserverResult } from './ObserverResult'; @@ -45,16 +45,16 @@ export interface Meter { createCounter(name: string, options?: MetricOptions): Counter; /** - * Creates a new `CounterObserver` metric. + * Creates a new `ObservableCounter` metric. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the observer callback + * @param [callback] the observable callback */ - createCounterObserver( + createObservableCounter( name: string, options?: MetricOptions, callback?: (observerResult: ObserverResult) => void - ): CounterObserver; + ): ObservableCounter; /** * Creates and returns a new `Histogram`. @@ -64,16 +64,16 @@ export interface Meter { createHistogram(name: string, options?: MetricOptions): Histogram; /** - * Creates a new `GaugeObserver` metric. + * Creates a new `ObservableGauge` metric. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the observer callback + * @param [callback] the observable callback */ - createGaugeObserver( + createObservableGauge( name: string, options?: MetricOptions, callback?: (observerResult: ObserverResult) => void - ): GaugeObserver; + ): ObservableGauge; /** * Creates a new `UpDownCounter` metric. UpDownCounter is a synchronous @@ -95,16 +95,16 @@ export interface Meter { createUpDownCounter(name: string, options?: MetricOptions): UpDownCounter; /** - * Creates a new `UpDownCounterObserver` metric. + * Creates a new `ObservableUpDownCounter` metric. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the observer callback + * @param [callback] the observable callback */ - createUpDownCounterObserver( + createObservableUpDownCounter( name: string, options?: MetricOptions, callback?: (observerResult: ObserverResult) => void - ): UpDownCounterObserver; + ): ObservableUpDownCounter; /** * Creates a new `BatchObserver`, can be used to update many metrics diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts index a30fc9da6a0..42f3471ea2c 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts @@ -15,7 +15,7 @@ */ import { - BoundBaseObserver, + BoundBaseObservable, BoundCounter, BoundHistogram, } from './BoundInstrument'; @@ -154,23 +154,23 @@ export interface Histogram extends UnboundMetric { } /** Base interface for the Observer metrics. */ -export interface BaseObserver extends UnboundMetric { +export interface BaseObservable extends UnboundMetric { observation: ( value: number ) => { value: number; - observer: BaseObserver; + observer: BaseObservable; }; } -/** Base interface for the GaugeObserver metrics. */ -export type GaugeObserver = BaseObserver; +/** Base interface for the ObservableGauge metrics. */ +export type ObservableGauge = BaseObservable; -/** Base interface for the UpDownCounterObserver metrics. */ -export type UpDownCounterObserver = BaseObserver; +/** Base interface for the ObservableUpDownCounter metrics. */ +export type ObservableUpDownCounter = BaseObservable; -/** Base interface for the CounterObserver metrics. */ -export type CounterObserver = BaseObserver; +/** Base interface for the ObservableCounter metrics. */ +export type ObservableCounter = BaseObservable; /** * key-value pairs passed by the user. diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts index eb946c93315..e535897f0b0 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts @@ -14,12 +14,12 @@ * limitations under the License. */ -import { BaseObserver } from './Metric'; +import { BaseObservable } from './Metric'; /** - * Interface for updating value of certain observer + * Interface for updating value of certain observable */ export interface Observation { - observer: BaseObserver; + observer: BaseObservable; value: number; } diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/ObserverResult.ts b/experimental/packages/opentelemetry-api-metrics/src/types/ObserverResult.ts index 7792483ad1a..6e287c5b39e 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/ObserverResult.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/ObserverResult.ts @@ -17,7 +17,7 @@ import { Labels } from './Metric'; /** - * Interface that is being used in callback function for Observer Metric + * Interface that is being used in callback function for Observable Metric */ export interface ObserverResult { observe(value: number, labels: Labels): void; diff --git a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts index 86b8e1cef33..59567091aa6 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts @@ -17,8 +17,8 @@ import * as protoLoader from '@grpc/proto-loader'; import { Counter, - ValueObserver, - ValueRecorder, + ObservableGauge, + Histogram, } from '@opentelemetry/api-metrics'; import { diag } from '@opentelemetry/api'; import { otlpTypes } from '@opentelemetry/exporter-otlp-http'; @@ -31,13 +31,13 @@ import * as sinon from 'sinon'; import { OTLPMetricExporter } from '../src'; import { ensureExportedCounterIsCorrect, - ensureExportedObserverIsCorrect, - ensureExportedValueRecorderIsCorrect, + ensureExportedObservableGaugeIsCorrect, + ensureExportedHistogramIsCorrect, ensureMetadataIsCorrect, ensureResourceIsCorrect, mockCounter, - mockObserver, - mockValueRecorder, + mockObservableGauge, + mockHistogram, } from './helper'; const metricsServiceProtoPath = @@ -140,20 +140,20 @@ const testOTLPMetricExporter = (params: TestParams) => metrics = []; const counter: metrics.Metric & Counter = mockCounter(); - const observer: metrics.Metric & - ValueObserver = mockObserver(observerResult => { + const observableGauge: metrics.Metric & + ObservableGauge = mockObservableGauge(observerResult => { observerResult.observe(3, {}); observerResult.observe(6, {}); }); - const recorder: metrics.Metric & - ValueRecorder = mockValueRecorder(); + const recorder: metrics.Metric & + Histogram = mockHistogram(); counter.add(1); recorder.record(7); recorder.record(14); metrics.push((await counter.getMetricRecord())[0]); - metrics.push((await observer.getMetricRecord())[0]); + metrics.push((await observableGauge.getMetricRecord())[0]); metrics.push((await recorder.getMetricRecord())[0]); }); @@ -203,21 +203,21 @@ const testOTLPMetricExporter = (params: TestParams) => resource = exportedData[0].resource; const counter = exportedData[0].instrumentationLibraryMetrics[0].metrics[0]; - const observer = + const observableGauge = exportedData[0].instrumentationLibraryMetrics[0].metrics[1]; - const recorder = + const histogram = exportedData[0].instrumentationLibraryMetrics[0].metrics[2]; ensureExportedCounterIsCorrect( counter, counter.intSum?.dataPoints[0].timeUnixNano ); - ensureExportedObserverIsCorrect( - observer, - observer.doubleGauge?.dataPoints[0].timeUnixNano + ensureExportedObservableGaugeIsCorrect( + observableGauge, + observableGauge.doubleGauge?.dataPoints[0].timeUnixNano ); - ensureExportedValueRecorderIsCorrect( - recorder, - recorder.intHistogram?.dataPoints[0].timeUnixNano, + ensureExportedHistogramIsCorrect( + histogram, + histogram.intHistogram?.dataPoints[0].timeUnixNano, [0, 100], ['0', '2', '0'] ); diff --git a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts index e77f0f1742e..f7c1294edc8 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts @@ -18,8 +18,8 @@ import { SpanStatusCode, TraceFlags } from '@opentelemetry/api'; import { Counter, ObserverResult, - ValueObserver, - ValueRecorder, + ObservableGauge, + Histogram, ValueType, } from '@opentelemetry/api-metrics'; import { otlpTypes } from '@opentelemetry/exporter-otlp-http'; @@ -75,16 +75,16 @@ export function mockCounter(): metrics.Metric & Counter { return metric; } -export function mockObserver( +export function mockObservableGauge( callback: (observerResult: ObserverResult) => void -): metrics.Metric & ValueObserver { - const name = 'double-observer'; +): metrics.Metric & ObservableGauge { + const name = 'double-observable'; const metric = meter['_metrics'].get(name) || - meter.createValueObserver( + meter.createObservableGauge( name, { - description: 'sample observer description', + description: 'sample observable description', valueType: ValueType.DOUBLE, }, callback @@ -94,12 +94,12 @@ export function mockObserver( return metric; } -export function mockValueRecorder(): metrics.Metric & - ValueRecorder { +export function mockHistogram(): metrics.Metric & + Histogram { const name = 'int-recorder'; const metric = meter['_metrics'].get(name) || - meter.createValueRecorder(name, { + meter.createHistogram(name, { description: 'sample recorder description', valueType: ValueType.INT, boundaries: [0, 100], @@ -352,13 +352,13 @@ export function ensureExportedCounterIsCorrect( }); } -export function ensureExportedObserverIsCorrect( +export function ensureExportedObservableGaugeIsCorrect( metric: otlpTypes.opentelemetryProto.metrics.v1.Metric, time?: number ) { assert.deepStrictEqual(metric, { - name: 'double-observer', - description: 'sample observer description', + name: 'double-observable', + description: 'sample observable description', unit: '1', data: 'doubleGauge', doubleGauge: { @@ -375,7 +375,7 @@ export function ensureExportedObserverIsCorrect( }); } -export function ensureExportedValueRecorderIsCorrect( +export function ensureExportedHistogramIsCorrect( metric: otlpTypes.opentelemetryProto.metrics.v1.Metric, time?: number, explicitBounds: number[] = [Infinity], diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/src/transformMetrics.ts b/experimental/packages/opentelemetry-exporter-otlp-http/src/transformMetrics.ts index cc0f580883c..97a0e1ec3e4 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/src/transformMetrics.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/src/transformMetrics.ts @@ -47,7 +47,7 @@ export function toCollectorLabels( export function toAggregationTemporality( metric: MetricRecord ): opentelemetryProto.metrics.v1.AggregationTemporality { - if (metric.descriptor.metricKind === MetricKind.VALUE_OBSERVER) { + if (metric.descriptor.metricKind === MetricKind.OBSERVABLE_GAUGE) { return opentelemetryProto.metrics.v1.AggregationTemporality .AGGREGATION_TEMPORALITY_UNSPECIFIED; } @@ -115,14 +115,14 @@ export function toCollectorMetric( if ( metric.aggregator.kind === AggregatorKind.SUM || - metric.descriptor.metricKind === MetricKind.SUM_OBSERVER || - metric.descriptor.metricKind === MetricKind.UP_DOWN_SUM_OBSERVER + metric.descriptor.metricKind === MetricKind.OBSERVABLE_COUNTER || + metric.descriptor.metricKind === MetricKind.OBSERVABLE_UP_DOWN_COUNTER ) { const result = { dataPoints: [toDataPoint(metric, startTime)], isMonotonic: metric.descriptor.metricKind === MetricKind.COUNTER || - metric.descriptor.metricKind === MetricKind.SUM_OBSERVER, + metric.descriptor.metricKind === MetricKind.OBSERVABLE_COUNTER, aggregationTemporality: toAggregationTemporality(metric), }; if (metric.descriptor.valueType === ValueType.INT) { diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts index 34463695c86..743d34f1629 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts @@ -17,14 +17,14 @@ import { diag } from '@opentelemetry/api'; import { Counter, - ValueObserver, - ValueRecorder, + ObservableGauge, + Histogram, } from '@opentelemetry/api-metrics'; import { ExportResultCode, hrTimeToNanoseconds } from '@opentelemetry/core'; import { BoundCounter, - BoundObserver, - BoundValueRecorder, + BoundObservable, + BoundHistogram, Metric, MetricRecord, } from '@opentelemetry/sdk-metrics-base'; @@ -38,11 +38,11 @@ import { ensureExportMetricsServiceRequestIsSet, ensureHeadersContain, ensureObserverIsCorrect, - ensureValueRecorderIsCorrect, + ensureHistogramIsCorrect, ensureWebResourceIsCorrect, mockCounter, mockObserver, - mockValueRecorder, + mockHistogram, } from '../helper'; describe('OTLPMetricExporter - web', () => { @@ -57,15 +57,15 @@ describe('OTLPMetricExporter - web', () => { stubBeacon = sinon.stub(navigator, 'sendBeacon'); metrics = []; const counter: Metric & Counter = mockCounter(); - const observer: Metric & ValueObserver = mockObserver( + const observer: Metric & ObservableGauge = mockObserver( observerResult => { observerResult.observe(3, {}); observerResult.observe(6, {}); }, 'double-observer2' ); - const recorder: Metric & - ValueRecorder = mockValueRecorder(); + const recorder: Metric & + Histogram = mockHistogram(); counter.add(1); recorder.record(7); recorder.record(14); @@ -134,7 +134,7 @@ describe('OTLPMetricExporter - web', () => { "third metric doesn't exist" ); if (metric3) { - ensureValueRecorderIsCorrect( + ensureHistogramIsCorrect( metric3, hrTimeToNanoseconds(metrics[2].aggregator.toPoint().timestamp), [0, 100], @@ -247,7 +247,7 @@ describe('OTLPMetricExporter - web', () => { "third metric doesn't exist" ); if (metric3) { - ensureValueRecorderIsCorrect( + ensureHistogramIsCorrect( metric3, hrTimeToNanoseconds(metrics[2].aggregator.toPoint().timestamp), [0, 100], diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts index 119702c6836..cacdbbb21e3 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { Counter, ValueObserver } from '@opentelemetry/api-metrics'; +import { Counter, ObservableGauge } from '@opentelemetry/api-metrics'; import { ExportResultCode } from '@opentelemetry/core'; import { BoundCounter, - BoundObserver, + BoundObservable, Metric, MetricRecord, } from '@opentelemetry/sdk-metrics-base'; @@ -70,7 +70,7 @@ describe('OTLPMetricExporter - common', () => { collectorExporter = new OTLPMetricExporter(collectorExporterConfig); metrics = []; const counter: Metric & Counter = mockCounter(); - const observer: Metric & ValueObserver = mockObserver( + const observer: Metric & ObservableGauge = mockObserver( observerResult => { observerResult.observe(3, {}); observerResult.observe(6, {}); diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts index e94a6cf71df..8c61373807a 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts @@ -15,16 +15,16 @@ */ import { Counter, - SumObserver, - UpDownSumObserver, - ValueObserver, - ValueRecorder, + ObservableCounter, + ObservableUpDownCounter, + ObservableGauge, + Histogram, } from '@opentelemetry/api-metrics'; import { hrTimeToNanoseconds } from '@opentelemetry/core'; import { BoundCounter, - BoundObserver, - BoundValueRecorder, + BoundObservable, + BoundHistogram, Metric, SumAggregator, } from '@opentelemetry/sdk-metrics-base'; @@ -35,17 +35,17 @@ import { ensureCounterIsCorrect, ensureDoubleCounterIsCorrect, ensureObserverIsCorrect, - ensureSumObserverIsCorrect, - ensureUpDownSumObserverIsCorrect, - ensureValueRecorderIsCorrect, + ensureObservableCounterIsCorrect, + ensureObservableUpDownCounterIsCorrect, + ensureHistogramIsCorrect, mockCounter, mockDoubleCounter, mockedInstrumentationLibraries, mockedResources, mockObserver, - mockSumObserver, - mockUpDownSumObserver, - mockValueRecorder, + mockObservableCounter, + mockObservableUpDownCounter, + mockHistogram, multiInstrumentationLibraryMetricsGet, multiResourceMetricsGet, } from '../helper'; @@ -54,10 +54,10 @@ describe('transformMetrics', () => { describe('toCollectorMetric', async () => { let counter: Metric & Counter; let doubleCounter: Metric & Counter; - let observer: Metric & ValueObserver; - let sumObserver: Metric & SumObserver; - let upDownSumObserver: Metric & UpDownSumObserver; - let recorder: Metric & ValueRecorder; + let observer: Metric & ObservableGauge; + let observableCounter: Metric & ObservableCounter; + let observableUpDownCounter: Metric & ObservableUpDownCounter; + let recorder: Metric & Histogram; beforeEach(() => { counter = mockCounter(); doubleCounter = mockDoubleCounter(); @@ -77,17 +77,17 @@ describe('transformMetrics', () => { observerResult.observe(getValue(count1), {}); }); - sumObserver = mockSumObserver(observerResult => { + observableCounter = mockObservableCounter(observerResult => { count2++; observerResult.observe(getValue(count2), {}); }); - upDownSumObserver = mockUpDownSumObserver(observerResult => { + observableUpDownCounter = mockObservableUpDownCounter(observerResult => { count3++; observerResult.observe(getValue(count3), {}); }); - recorder = mockValueRecorder(); + recorder = mockHistogram(); // Counter counter.add(1); @@ -95,7 +95,7 @@ describe('transformMetrics', () => { // Double Counter doubleCounter.add(8); - // ValueRecorder + // Histogram recorder.record(7); recorder.record(14); }); @@ -123,34 +123,34 @@ describe('transformMetrics', () => { ); // collect 3 times - await sumObserver.getMetricRecord(); - await sumObserver.getMetricRecord(); - const sumObserverMetric = (await sumObserver.getMetricRecord())[0]; - ensureSumObserverIsCorrect( - transform.toCollectorMetric(sumObserverMetric, 1592602232694000000), - hrTimeToNanoseconds(sumObserverMetric.aggregator.toPoint().timestamp), + await observableCounter.getMetricRecord(); + await observableCounter.getMetricRecord(); + const observableCounterMetric = (await observableCounter.getMetricRecord())[0]; + ensureObservableCounterIsCorrect( + transform.toCollectorMetric(observableCounterMetric, 1592602232694000000), + hrTimeToNanoseconds(observableCounterMetric.aggregator.toPoint().timestamp), 3 ); // collect 3 times - await upDownSumObserver.getMetricRecord(); - await upDownSumObserver.getMetricRecord(); - const upDownSumObserverMetric = ( - await upDownSumObserver.getMetricRecord() + await observableUpDownCounter.getMetricRecord(); + await observableUpDownCounter.getMetricRecord(); + const observableUpDownCounterMetric = ( + await observableUpDownCounter.getMetricRecord() )[0]; - ensureUpDownSumObserverIsCorrect( + ensureObservableUpDownCounterIsCorrect( transform.toCollectorMetric( - upDownSumObserverMetric, + observableUpDownCounterMetric, 1592602232694000000 ), hrTimeToNanoseconds( - upDownSumObserverMetric.aggregator.toPoint().timestamp + observableUpDownCounterMetric.aggregator.toPoint().timestamp ), -1 ); const recorderMetric = (await recorder.getMetricRecord())[0]; - ensureValueRecorderIsCorrect( + ensureHistogramIsCorrect( transform.toCollectorMetric(recorderMetric, 1592602232694000000), hrTimeToNanoseconds(recorderMetric.aggregator.toPoint().timestamp), [0, 100], diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts index 87839060349..a34073bd4ec 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts @@ -18,10 +18,10 @@ import { SpanStatusCode, TraceFlags } from '@opentelemetry/api'; import { Counter, ObserverResult, - SumObserver, - UpDownSumObserver, - ValueObserver, - ValueRecorder, + ObservableCounter, + ObservableUpDownCounter, + ObservableGauge, + Histogram, ValueType, } from '@opentelemetry/api-metrics'; import { hexToBase64, InstrumentationLibrary, VERSION } from '@opentelemetry/core'; @@ -81,10 +81,10 @@ export function mockDoubleCounter(): metrics.Metric & export function mockObserver( callback: (observerResult: ObserverResult) => unknown, name = 'double-observer' -): metrics.Metric & ValueObserver { +): metrics.Metric & ObservableGauge { const metric = meter['_metrics'].get(name) || - meter.createValueObserver( + meter.createObservableGauge( name, { description: 'sample observer description', @@ -97,16 +97,16 @@ export function mockObserver( return metric; } -export function mockSumObserver( +export function mockObservableCounter( callback: (observerResult: ObserverResult) => unknown, name = 'double-sum-observer' -): metrics.Metric & SumObserver { +): metrics.Metric & ObservableCounter { const metric = meter['_metrics'].get(name) || - meter.createSumObserver( + meter.createObservableCounter( name, { - description: 'sample sum observer description', + description: 'sample observable counter description', valueType: ValueType.DOUBLE, }, callback @@ -116,16 +116,16 @@ export function mockSumObserver( return metric; } -export function mockUpDownSumObserver( +export function mockObservableUpDownCounter( callback: (observerResult: ObserverResult) => unknown, name = 'double-up-down-sum-observer' -): metrics.Metric & UpDownSumObserver { +): metrics.Metric & ObservableUpDownCounter { const metric = meter['_metrics'].get(name) || - meter.createUpDownSumObserver( + meter.createObservableUpDownCounter( name, { - description: 'sample up down sum observer description', + description: 'sample observable up down counter description', valueType: ValueType.DOUBLE, }, callback @@ -135,12 +135,12 @@ export function mockUpDownSumObserver( return metric; } -export function mockValueRecorder(): metrics.Metric & - ValueRecorder { +export function mockHistogram(): metrics.Metric & + Histogram { const name = 'int-recorder'; const metric = meter['_metrics'].get(name) || - meter.createValueRecorder(name, { + meter.createHistogram(name, { description: 'sample recorder description', valueType: ValueType.INT, boundaries: [0, 100], @@ -624,7 +624,7 @@ export function ensureObserverIsCorrect( }); } -export function ensureSumObserverIsCorrect( +export function ensureObservableCounterIsCorrect( metric: otlpTypes.opentelemetryProto.metrics.v1.Metric, time: number, value: number, @@ -632,7 +632,7 @@ export function ensureSumObserverIsCorrect( ) { assert.deepStrictEqual(metric, { name, - description: 'sample sum observer description', + description: 'sample observable counter description', unit: '1', doubleSum: { isMonotonic: true, @@ -651,7 +651,7 @@ export function ensureSumObserverIsCorrect( }); } -export function ensureUpDownSumObserverIsCorrect( +export function ensureObservableUpDownCounterIsCorrect( metric: otlpTypes.opentelemetryProto.metrics.v1.Metric, time: number, value: number, @@ -659,7 +659,7 @@ export function ensureUpDownSumObserverIsCorrect( ) { assert.deepStrictEqual(metric, { name, - description: 'sample up down sum observer description', + description: 'sample observable up down counter description', unit: '1', doubleSum: { isMonotonic: false, @@ -678,7 +678,7 @@ export function ensureUpDownSumObserverIsCorrect( }); } -export function ensureValueRecorderIsCorrect( +export function ensureHistogramIsCorrect( metric: otlpTypes.opentelemetryProto.metrics.v1.Metric, time: number, explicitBounds: (number | null)[] = [Infinity], diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts index 4937ef37370..14bf744ab8e 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts @@ -17,14 +17,14 @@ import { diag } from '@opentelemetry/api'; import { Counter, - ValueObserver, - ValueRecorder, + ObservableGauge, + Histogram, } from '@opentelemetry/api-metrics'; import * as core from '@opentelemetry/core'; import { BoundCounter, - BoundObserver, - BoundValueRecorder, + BoundObservable, + BoundHistogram, Metric, MetricRecord, } from '@opentelemetry/sdk-metrics-base'; @@ -40,10 +40,10 @@ import { ensureCounterIsCorrect, ensureExportMetricsServiceRequestIsSet, ensureObserverIsCorrect, - ensureValueRecorderIsCorrect, + ensureHistogramIsCorrect, mockCounter, mockObserver, - mockValueRecorder, + mockHistogram, } from '../helper'; import { MockedResponse } from './nodeHelpers'; @@ -149,14 +149,14 @@ describe('OTLPMetricExporter - node with json over http', () => { }); metrics = []; const counter: Metric & Counter = mockCounter(); - const observer: Metric & ValueObserver = mockObserver( + const observer: Metric & ObservableGauge = mockObserver( observerResult => { observerResult.observe(6, {}); }, 'double-observer2' ); - const recorder: Metric & - ValueRecorder = mockValueRecorder(); + const recorder: Metric & + Histogram = mockHistogram(); counter.add(1); recorder.record(7); recorder.record(14); @@ -232,7 +232,7 @@ describe('OTLPMetricExporter - node with json over http', () => { 'double-observer2' ); assert.ok(typeof metric3 !== 'undefined', "histogram doesn't exist"); - ensureValueRecorderIsCorrect( + ensureHistogramIsCorrect( metric3, core.hrTimeToNanoseconds(metrics[2].aggregator.toPoint().timestamp), [0, 100], diff --git a/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts index 17716f0887f..af1fe6180d3 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts @@ -17,8 +17,8 @@ import { diag } from '@opentelemetry/api'; import { Counter, - ValueObserver, - ValueRecorder, + ObservableGauge, + Histogram, } from '@opentelemetry/api-metrics'; import { ExportResultCode } from '@opentelemetry/core'; import { @@ -34,12 +34,12 @@ import { getExportRequestProto } from '../src/util'; import { ensureExportedCounterIsCorrect, ensureExportedObserverIsCorrect, - ensureExportedValueRecorderIsCorrect, + ensureExportedHistogramIsCorrect, ensureExportMetricsServiceRequestIsSet, mockCounter, MockedResponse, mockObserver, - mockValueRecorder, + mockHistogram, } from './helper'; const fakeRequest = { @@ -121,13 +121,13 @@ describe('OTLPMetricExporter - node with proto over http', () => { metrics = []; const counter: metrics.Metric & Counter = mockCounter(); - const observer: metrics.Metric & - ValueObserver = mockObserver(observerResult => { + const observer: metrics.Metric & + ObservableGauge = mockObserver(observerResult => { observerResult.observe(3, {}); observerResult.observe(6, {}); }); - const recorder: metrics.Metric & - ValueRecorder = mockValueRecorder(); + const recorder: metrics.Metric & + Histogram = mockHistogram(); counter.add(1); recorder.record(7); @@ -206,7 +206,7 @@ describe('OTLPMetricExporter - node with proto over http', () => { typeof metric3 !== 'undefined', "value recorder doesn't exist" ); - ensureExportedValueRecorderIsCorrect( + ensureExportedHistogramIsCorrect( metric3, metric3.intHistogram?.dataPoints[0].timeUnixNano, [0, 100], diff --git a/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts b/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts index f8b90b9feff..2f6207e4085 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts @@ -18,8 +18,8 @@ import { SpanStatusCode, TraceFlags } from '@opentelemetry/api'; import { Counter, ObserverResult, - ValueObserver, - ValueRecorder, + ObservableGauge, + Histogram, ValueType, } from '@opentelemetry/api-metrics'; import { hexToBase64 } from '@opentelemetry/core'; @@ -56,11 +56,11 @@ export function mockCounter(): metrics.Metric & Counter { export function mockObserver( callback: (observerResult: ObserverResult) => void -): metrics.Metric & ValueObserver { +): metrics.Metric & ObservableGauge { const name = 'double-observer'; const metric = meter['_metrics'].get(name) || - meter.createValueObserver( + meter.createObservableGauge( name, { description: 'sample observer description', @@ -73,12 +73,12 @@ export function mockObserver( return metric; } -export function mockValueRecorder(): metrics.Metric & - ValueRecorder { +export function mockHistogram(): metrics.Metric & + Histogram { const name = 'int-recorder'; const metric = meter['_metrics'].get(name) || - meter.createValueRecorder(name, { + meter.createHistogram(name, { description: 'sample recorder description', valueType: ValueType.INT, boundaries: [0, 100], @@ -336,7 +336,7 @@ export function ensureExportedObserverIsCorrect( }); } -export function ensureExportedValueRecorderIsCorrect( +export function ensureExportedHistogramIsCorrect( metric: otlpTypes.opentelemetryProto.metrics.v1.Metric, time?: number, explicitBounds: number[] = [Infinity], diff --git a/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts b/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts index 284b7276152..35473b14a3d 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts @@ -106,11 +106,11 @@ function toPrometheusType( case AggregatorKind.SUM: if ( metricKind === MetricKind.COUNTER || - metricKind === MetricKind.COUNTER_OBSERVER + metricKind === MetricKind.OBSERVABLE_COUNTER ) { return 'counter'; } - /** MetricKind.UP_DOWN_COUNTER and MetricKind.UP_DOWN_COUNTER_OBSERVER */ + /** MetricKind.UP_DOWN_COUNTER and MetricKind.OBSERVABLE_UP_DOWN_COUNTER */ return 'gauge'; case AggregatorKind.LAST_VALUE: return 'gauge'; diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts index 5f8838fec32..bd2f9f0bd49 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts @@ -275,7 +275,7 @@ describe('PrometheusExporter', () => { return 0.999; } - meter.createGaugeObserver( + meter.createObservableGauge( 'metric_observer', { description: 'a test description', @@ -472,12 +472,12 @@ describe('PrometheusExporter', () => { }); }); - it('should export a CounterObserver as a counter', done => { + it('should export a ObservableCounter as a counter', done => { function getValue() { return 20; } - meter.createCounterObserver( + meter.createObservableCounter( 'sum_observer', { description: 'a test description', @@ -512,12 +512,12 @@ describe('PrometheusExporter', () => { }); }); - it('should export a UpDownCounterObserver as a gauge', done => { + it('should export a ObservableUpDownCounter as a gauge', done => { function getValue() { return 20; } - meter.createUpDownCounterObserver( + meter.createObservableUpDownCounter( 'updown_observer', { description: 'a test description', @@ -553,7 +553,7 @@ describe('PrometheusExporter', () => { }); it('should export a Histogram as a summary', done => { - const histogram = meter.createHistogram('value_recorder', { + const histogram = meter.createHistogram('test_histogram', { description: 'a test description', }); @@ -568,11 +568,11 @@ describe('PrometheusExporter', () => { const lines = body.split('\n'); assert.deepStrictEqual(lines, [ - '# HELP value_recorder a test description', - '# TYPE value_recorder histogram', - `value_recorder_count{key1="labelValue1"} 1 ${mockedHrTimeMs}`, - `value_recorder_sum{key1="labelValue1"} 20 ${mockedHrTimeMs}`, - `value_recorder_bucket{key1="labelValue1",le="+Inf"} 1 ${mockedHrTimeMs}`, + '# HELP test_histogram a test description', + '# TYPE test_histogram histogram', + `test_histogram_count{key1="labelValue1"} 1 ${mockedHrTimeMs}`, + `test_histogram_sum{key1="labelValue1"} 20 ${mockedHrTimeMs}`, + `test_histogram_bucket{key1="labelValue1",le="+Inf"} 1 ${mockedHrTimeMs}`, '', ]); diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts index b4391861101..4165c2f7f65 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts @@ -21,7 +21,7 @@ import { CounterMetric, HistogramMetric, UpDownCounterMetric, - GaugeObserverMetric, + ObservableGaugeMetric, } from '@opentelemetry/sdk-metrics-base'; import { diag, DiagLogLevel } from '@opentelemetry/api'; import * as assert from 'assert'; @@ -99,13 +99,13 @@ describe('PrometheusSerializer', () => { const meter = new MeterProvider({ processor: new ExactProcessor(LastValueAggregator), }).getMeter('test'); - const observer = meter.createGaugeObserver( + const observer = meter.createObservableGauge( 'test', {}, observerResult => { observerResult.observe(1, labels); } - ) as GaugeObserverMetric; + ) as ObservableGaugeMetric; await meter.collect(); const records = await observer.getMetricRecord(); const record = records[0]; @@ -126,13 +126,13 @@ describe('PrometheusSerializer', () => { const meter = new MeterProvider({ processor: new ExactProcessor(LastValueAggregator), }).getMeter('test'); - const observer = meter.createGaugeObserver( + const observer = meter.createObservableGauge( 'test', {}, observerResult => { observerResult.observe(1, labels); } - ) as GaugeObserverMetric; + ) as ObservableGaugeMetric; await meter.collect(); const records = await observer.getMetricRecord(); const record = records[0]; @@ -304,7 +304,7 @@ describe('PrometheusSerializer', () => { processor: new ExactProcessor(LastValueAggregator), }).getMeter('test'); const processor = new PrometheusLabelsBatcher(); - const observer = meter.createGaugeObserver( + const observer = meter.createObservableGauge( 'test', { description: 'foobar', @@ -312,7 +312,7 @@ describe('PrometheusSerializer', () => { observerResult => { observerResult.observe(1, labels); } - ) as GaugeObserverMetric; + ) as ObservableGaugeMetric; await meter.collect(); const records = await observer.getMetricRecord(); records.forEach(it => processor.process(it)); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/README.md b/experimental/packages/opentelemetry-sdk-metrics-base/README.md index 435cbc1db25..9583487d0a2 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/README.md +++ b/experimental/packages/opentelemetry-sdk-metrics-base/README.md @@ -85,7 +85,7 @@ const meter = new MeterProvider().getMeter('your-meter-name'); // async callback - for operation that needs to wait for value -meter.createGaugeObserver('your_metric_name', { +meter.createObservableGauge('your_metric_name', { description: 'Example of an async observer with callback', }, async (observerResult) => { const value = await getAsyncValue(); @@ -101,7 +101,7 @@ function getAsyncValue() { } // sync callback in case you don't need to wait for value -meter.createGaugeObserver('your_metric_name', { +meter.createObservableGauge('your_metric_name', { description: 'Example of a sync observer with callback', }, (observerResult) => { observerResult.observe(getRandomValue(), { label: '1' }); @@ -113,7 +113,7 @@ function getRandomValue() { } ``` -### UpDownCounterObserver +### ObservableUpDownCounter Choose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime. The callback can be sync or async. @@ -124,7 +124,7 @@ const { MeterProvider } = require('@opentelemetry/sdk-metrics-base'); const meter = new MeterProvider().getMeter('your-meter-name'); // async callback - for operation that needs to wait for value -meter.createUpDownCounterObserver('your_metric_name', { +meter.createObservableUpDownCounter('your_metric_name', { description: 'Example of an async observer with callback', }, async (observerResult) => { const value = await getAsyncValue(); @@ -140,7 +140,7 @@ function getAsyncValue() { } // sync callback in case you don't need to wait for value -meter.createUpDownCounterObserver('your_metric_name', { +meter.createObservableUpDownCounter('your_metric_name', { description: 'Example of a sync observer with callback', }, (observerResult) => { observerResult.observe(getRandomValue(), { label: '1' }); @@ -152,7 +152,7 @@ function getRandomValue() { ``` -### Counter Observer +### Observable Counter Choose this kind of metric when collecting a sum that never decreases. The callback can be sync or async. @@ -163,8 +163,8 @@ const { MeterProvider } = require('@opentelemetry/sdk-metrics-base'); const meter = new MeterProvider().getMeter('your-meter-name'); // async callback in case you need to wait for values -meter.createCounterObserver('example_metric', { - description: 'Example of an async counter observer with callback', +meter.createObservableCounter('example_metric', { + description: 'Example of an async observable counter with callback', }, async (observerResult) => { const value = await getAsyncValue(); observerResult.observe(value, { label: '1' }); @@ -179,8 +179,8 @@ function getAsyncValue() { } // sync callback in case you don't need to wait for values -meter.createCounterObserver('example_metric', { - description: 'Example of a sync counter observer with callback', +meter.createObservableCounter('example_metric', { + description: 'Example of a sync observable counter with callback', }, (observerResult) => { const value = getRandomValue(); observerResult.observe(value, { label: '1' }); @@ -213,11 +213,11 @@ const meter = new MeterProvider({ interval: 3000, }).getMeter('example-observer'); -const cpuUsageMetric = meter.createGaugeObserver('cpu_usage_per_app', { +const cpuUsageMetric = meter.createObservableGauge('cpu_usage_per_app', { description: 'CPU', }); -const MemUsageMetric = meter.createGaugeObserver('mem_usage_per_app', { +const MemUsageMetric = meter.createObservableGauge('mem_usage_per_app', { description: 'Memory', }); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/BaseObserverMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/BaseObservableMetric.ts similarity index 88% rename from experimental/packages/opentelemetry-sdk-metrics-base/src/BaseObserverMetric.ts rename to experimental/packages/opentelemetry-sdk-metrics-base/src/BaseObservableMetric.ts index 6f48df49bf0..becd7029cf4 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/BaseObserverMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/BaseObservableMetric.ts @@ -17,7 +17,7 @@ import * as api from '@opentelemetry/api-metrics'; import { Observation } from '@opentelemetry/api-metrics'; import { InstrumentationLibrary } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; -import { BoundObserver } from './BoundInstrument'; +import { BoundObservable } from './BoundInstrument'; import { Processor } from './export/Processor'; import { MetricKind, MetricRecord } from './export/types'; import { Metric } from './Metric'; @@ -29,9 +29,9 @@ const NOOP_CALLBACK = () => {}; * This is a SDK implementation of Base Observer Metric. * All observers should extend this class */ -export abstract class BaseObserverMetric - extends Metric - implements api.BaseObserver { +export abstract class BaseObservableMetric + extends Metric + implements api.BaseObservable { protected _callback: (observerResult: api.ObserverResult) => unknown; constructor( @@ -47,8 +47,8 @@ export abstract class BaseObserverMetric this._callback = callback || NOOP_CALLBACK; } - protected _makeInstrument(labels: api.Labels): BoundObserver { - return new BoundObserver( + protected _makeInstrument(labels: api.Labels): BoundObservable { + return new BoundObservable( labels, this._disabled, this._valueType, @@ -75,7 +75,7 @@ export abstract class BaseObserverMetric observation(value: number): Observation { return { value, - observer: this as BaseObserverMetric, + observer: this as BaseObservableMetric, }; } } diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts index 24c90c9daf4..84e199cb224 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts @@ -135,11 +135,11 @@ export class BoundHistogram } /** - * BoundObserver is an implementation of the {@link BoundObserver} interface. + * BoundObservable is an implementation of the {@link BoundObservable} interface. */ -export class BoundObserver +export class BoundObservable extends BaseBoundInstrument - implements api.BoundBaseObserver { + implements api.BoundBaseObservable { constructor( labels: api.Labels, disabled: boolean, diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts index 684f4f22b21..f440abd0297 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts @@ -25,11 +25,11 @@ import { PushController } from './export/Controller'; import { NoopExporter } from './export/NoopExporter'; import { Processor, UngroupedProcessor } from './export/Processor'; import { Metric } from './Metric'; -import { CounterObserverMetric } from './CounterObserverMetric'; +import { ObservableCounterMetric } from './ObservableCounterMetric'; import { DEFAULT_CONFIG, DEFAULT_METRIC_OPTIONS, MeterConfig } from './types'; import { UpDownCounterMetric } from './UpDownCounterMetric'; -import { UpDownCounterObserverMetric } from './UpDownCounterObserverMetric'; -import { GaugeObserverMetric } from './GaugeObserverMetric'; +import { ObservableUpDownCounterMetric } from './ObservableUpDownCounterMetric'; +import { ObservableGaugeMetric } from './ObservableGaugeMetric'; import { HistogramMetric } from './HistogramMetric'; // eslint-disable-next-line @typescript-eslint/no-var-requires const merge = require('lodash.merge'); @@ -161,27 +161,27 @@ export class Meter implements api.Meter { } /** - * Creates a new `GaugeObserver` metric. + * Creates a new `ObservableGauge` metric. * @param name the name of the metric. * @param [options] the metric options. * @param [callback] the gauge observer callback */ - createGaugeObserver( + createObservableGauge( name: string, options: api.MetricOptions = {}, callback?: (observerResult: api.ObserverResult) => unknown - ): api.GaugeObserver { + ): api.ObservableGauge { if (!this._isValidName(name)) { diag.warn( `Invalid metric name ${name}. Defaulting to noop metric implementation.` ); - return api.NOOP_GAUGE_OBSERVER_METRIC; + return api.NOOP_OBSERVABLE_GAUGE_METRIC; } const opt: api.MetricOptions = { ...DEFAULT_METRIC_OPTIONS, ...options, }; - const gaugeObserver = new GaugeObserverMetric( + const observableGauge = new ObservableGaugeMetric( name, opt, this._processor, @@ -189,26 +189,26 @@ export class Meter implements api.Meter { this._instrumentationLibrary, callback ); - this._registerMetric(name, gaugeObserver); - return gaugeObserver; + this._registerMetric(name, observableGauge); + return observableGauge; } - createCounterObserver( + createObservableCounter( name: string, options: api.MetricOptions = {}, callback?: (observerResult: api.ObserverResult) => unknown - ): api.CounterObserver { + ): api.ObservableCounter { if (!this._isValidName(name)) { diag.warn( `Invalid metric name ${name}. Defaulting to noop metric implementation.` ); - return api.NOOP_COUNTER_OBSERVER_METRIC; + return api.NOOP_OBSERVABLE_COUNTER_METRIC; } const opt: api.MetricOptions = { ...DEFAULT_METRIC_OPTIONS, ...options, }; - const counterObserver = new CounterObserverMetric( + const observableCounter = new ObservableCounterMetric( name, opt, this._processor, @@ -216,32 +216,32 @@ export class Meter implements api.Meter { this._instrumentationLibrary, callback ); - this._registerMetric(name, counterObserver); - return counterObserver; + this._registerMetric(name, observableCounter); + return observableCounter; } /** - * Creates a new `UpDownCounterObserver` metric. + * Creates a new `ObservableUpDownCounter` metric. * @param name the name of the metric. * @param [options] the metric options. * @param [callback] the gauge observer callback */ - createUpDownCounterObserver( + createObservableUpDownCounter( name: string, options: api.MetricOptions = {}, callback?: (observerResult: api.ObserverResult) => unknown - ): api.UpDownCounterObserver { + ): api.ObservableUpDownCounter { if (!this._isValidName(name)) { diag.warn( `Invalid metric name ${name}. Defaulting to noop metric implementation.` ); - return api.NOOP_UP_DOWN_COUNTER_OBSERVER_METRIC; + return api.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC; } const opt: api.MetricOptions = { ...DEFAULT_METRIC_OPTIONS, ...options, }; - const upDownCounterObserver = new UpDownCounterObserverMetric( + const observableUpDownCounter = new ObservableUpDownCounterMetric( name, opt, this._processor, @@ -249,8 +249,8 @@ export class Meter implements api.Meter { this._instrumentationLibrary, callback ); - this._registerMetric(name, upDownCounterObserver); - return upDownCounterObserver; + this._registerMetric(name, observableUpDownCounter); + return observableUpDownCounter; } /** diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/CounterObserverMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableCounterMetric.ts similarity index 83% rename from experimental/packages/opentelemetry-sdk-metrics-base/src/CounterObserverMetric.ts rename to experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableCounterMetric.ts index 2e5d72b12d9..5536780bfc5 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/CounterObserverMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableCounterMetric.ts @@ -17,15 +17,15 @@ import * as api from '@opentelemetry/api-metrics'; import { InstrumentationLibrary } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; -import { BaseObserverMetric } from './BaseObserverMetric'; +import { BaseObservableMetric } from './BaseObservableMetric'; import { Processor } from './export/Processor'; import { LastValue, MetricKind } from './export/types'; import { ObserverResult } from './ObserverResult'; -/** This is a SDK implementation of CounterObserver Metric. */ -export class CounterObserverMetric - extends BaseObserverMetric - implements api.CounterObserver { +/** This is a SDK implementation of ObservableCounter Metric. */ +export class ObservableCounterMetric + extends BaseObservableMetric + implements api.ObservableCounter { constructor( name: string, options: api.MetricOptions, @@ -39,7 +39,7 @@ export class CounterObserverMetric options, processor, resource, - MetricKind.COUNTER_OBSERVER, + MetricKind.OBSERVABLE_COUNTER, instrumentationLibrary, callback ); @@ -48,7 +48,7 @@ export class CounterObserverMetric protected override _processResults(observerResult: ObserverResult): void { observerResult.values.forEach((value, labels) => { const instrument = this.bind(labels); - // CounterObserver is monotonic which means it should only accept values + // ObservableCounter is monotonic which means it should only accept values // greater or equal then previous value const previous = instrument.getAggregator().toPoint(); let previousValue = -Infinity; diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/GaugeObserverMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts similarity index 86% rename from experimental/packages/opentelemetry-sdk-metrics-base/src/GaugeObserverMetric.ts rename to experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts index ced7f5c2926..3eddc3965b5 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/GaugeObserverMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts @@ -16,14 +16,14 @@ import * as api from '@opentelemetry/api-metrics'; import { InstrumentationLibrary } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; -import { BaseObserverMetric } from './BaseObserverMetric'; +import { BaseObservableMetric } from './BaseObservableMetric'; import { Processor } from './export/Processor'; import { MetricKind } from './export/types'; /** This is a SDK implementation of Gauge Observer Metric. */ -export class GaugeObserverMetric - extends BaseObserverMetric - implements api.GaugeObserver { +export class ObservableGaugeMetric + extends BaseObservableMetric + implements api.ObservableGauge { constructor( name: string, options: api.MetricOptions, @@ -37,7 +37,7 @@ export class GaugeObserverMetric options, processor, resource, - MetricKind.GAUGE_OBSERVER, + MetricKind.OBSERVABLE_GAUGE, instrumentationLibrary, callback ); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/UpDownCounterObserverMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableUpDownCounterMetric.ts similarity index 80% rename from experimental/packages/opentelemetry-sdk-metrics-base/src/UpDownCounterObserverMetric.ts rename to experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableUpDownCounterMetric.ts index 990a5506fb9..e130f561a9a 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/UpDownCounterObserverMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableUpDownCounterMetric.ts @@ -17,14 +17,14 @@ import * as api from '@opentelemetry/api-metrics'; import { InstrumentationLibrary } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; -import { BaseObserverMetric } from './BaseObserverMetric'; +import { BaseObservableMetric } from './BaseObservableMetric'; import { Processor } from './export/Processor'; import { MetricKind } from './export/types'; -/** This is a SDK implementation of UpDownCounterObserver Metric. */ -export class UpDownCounterObserverMetric - extends BaseObserverMetric - implements api.UpDownCounterObserver { +/** This is a SDK implementation of ObservableUpDownCounter Metric. */ +export class ObservableUpDownCounterMetric + extends BaseObservableMetric + implements api.ObservableUpDownCounter { constructor( name: string, options: api.MetricOptions, @@ -38,7 +38,7 @@ export class UpDownCounterObserverMetric options, processor, resource, - MetricKind.UP_DOWN_COUNTER_OBSERVER, + MetricKind.OBSERVABLE_UP_DOWN_COUNTER, instrumentationLibrary, callback ); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/export/Processor.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/export/Processor.ts index 1316b80dd7d..3cc23c70f00 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/export/Processor.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/export/Processor.ts @@ -54,9 +54,9 @@ export class UngroupedProcessor extends Processor { case MetricKind.UP_DOWN_COUNTER: return new aggregators.SumAggregator(); - case MetricKind.COUNTER_OBSERVER: - case MetricKind.UP_DOWN_COUNTER_OBSERVER: - case MetricKind.GAUGE_OBSERVER: + case MetricKind.OBSERVABLE_COUNTER: + case MetricKind.OBSERVABLE_UP_DOWN_COUNTER: + case MetricKind.OBSERVABLE_GAUGE: return new aggregators.LastValueAggregator(); case MetricKind.HISTOGRAM: diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/export/types.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/export/types.ts index 941a3519bbd..33206ea9363 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/export/types.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/export/types.ts @@ -28,9 +28,9 @@ export enum MetricKind { COUNTER, UP_DOWN_COUNTER, HISTOGRAM, - COUNTER_OBSERVER, - UP_DOWN_COUNTER_OBSERVER, - GAUGE_OBSERVER, + OBSERVABLE_COUNTER, + OBSERVABLE_UP_DOWN_COUNTER, + OBSERVABLE_GAUGE, BATCH_OBSERVER, } diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/index.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/index.ts index a6e18ec48dc..a3d74d5352c 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/index.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/index.ts @@ -20,7 +20,7 @@ export * from './HistogramMetric'; export * from './Meter'; export * from './MeterProvider'; export * from './Metric'; -export * from './GaugeObserverMetric'; +export * from './ObservableGaugeMetric'; export * from './export/aggregators'; export * from './export/ConsoleMetricExporter'; export * from './export/Processor'; diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts b/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts index 0d49cd26830..be17f899a97 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts @@ -34,15 +34,15 @@ import { MetricRecord, Sum, UpDownCounterMetric, - GaugeObserverMetric, + ObservableGaugeMetric, HistogramMetric, } from '../src'; import { BatchObserver } from '../src/BatchObserver'; import { BatchObserverResult } from '../src/BatchObserverResult'; import { SumAggregator } from '../src/export/aggregators'; import { Processor } from '../src/export/Processor'; -import { CounterObserverMetric } from '../src/CounterObserverMetric'; -import { UpDownCounterObserverMetric } from '../src/UpDownCounterObserverMetric'; +import { ObservableCounterMetric } from '../src/ObservableCounterMetric'; +import { ObservableUpDownCounterMetric } from '../src/ObservableUpDownCounterMetric'; import { hashLabels } from '../src/Utils'; const nonNumberValues = [ @@ -773,17 +773,17 @@ describe('Meter', () => { }); }); - describe('#CounterObserverMetric', () => { - it('should create an Sum observer', () => { - const counterObserver = meter.createCounterObserver('name') as CounterObserverMetric; - assert.ok(counterObserver instanceof Metric); + describe('#ObservableCounterMetric', () => { + it('should create an ObservableCounter', () => { + const observableCounter = meter.createObservableCounter('name') as ObservableCounterMetric; + assert.ok(observableCounter instanceof Metric); }); it('should return noop observer when name is invalid', () => { // Need to stub/spy on the underlying logger as the "diag" instance is global const spy = sinon.stub(diag, 'warn'); - const counterObserver = meter.createCounterObserver('na me'); - assert.ok(counterObserver === api.NOOP_COUNTER_OBSERVER_METRIC); + const observableCounter = meter.createObservableCounter('na me'); + assert.ok(observableCounter === api.NOOP_OBSERVABLE_COUNTER_METRIC); const args = spy.args[0]; assert.ok( args[0], @@ -792,12 +792,12 @@ describe('Meter', () => { }); it('should create observer with options', () => { - const counterObserver = meter.createCounterObserver('name', { + const observableCounter = meter.createObservableCounter('name', { description: 'desc', unit: '1', disabled: false, - }) as CounterObserverMetric; - assert.ok(counterObserver instanceof Metric); + }) as ObservableCounterMetric; + assert.ok(observableCounter instanceof Metric); }); it('should set callback and observe value ', async () => { @@ -811,7 +811,7 @@ describe('Meter', () => { return -1; } - const counterObserver = meter.createCounterObserver( + const observableCounter = meter.createObservableCounter( 'name', { description: 'desc', @@ -825,9 +825,9 @@ describe('Meter', () => { }, 1); }); } - ) as CounterObserverMetric; + ) as ObservableCounterMetric; - let metricRecords = await counterObserver.getMetricRecord(); + let metricRecords = await observableCounter.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); let point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, -1); @@ -836,19 +836,19 @@ describe('Meter', () => { '|#core:1,pid:123' ); - metricRecords = await counterObserver.getMetricRecord(); + metricRecords = await observableCounter.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, 3); - metricRecords = await counterObserver.getMetricRecord(); + metricRecords = await observableCounter.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, 3); }); it('should set callback and observe value when callback returns nothing', async () => { - const counterObserver = meter.createCounterObserver( + const observableCounter = meter.createObservableCounter( 'name', { description: 'desc', @@ -856,9 +856,9 @@ describe('Meter', () => { (observerResult: api.ObserverResult) => { observerResult.observe(1, { pid: '123', core: '1' }); } - ) as CounterObserverMetric; + ) as ObservableCounterMetric; - const metricRecords = await counterObserver.getMetricRecord(); + const metricRecords = await observableCounter.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); }); @@ -866,7 +866,7 @@ describe('Meter', () => { 'should set callback and observe value when callback returns anything' + ' but Promise', async () => { - const counterObserver = meter.createCounterObserver( + const observableCounter = meter.createObservableCounter( 'name', { description: 'desc', @@ -875,15 +875,15 @@ describe('Meter', () => { observerResult.observe(1, { pid: '123', core: '1' }); return '1'; } - ) as CounterObserverMetric; + ) as ObservableCounterMetric; - const metricRecords = await counterObserver.getMetricRecord(); + const metricRecords = await observableCounter.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); } ); it('should reject getMetricRecord when callback throws an error', async () => { - const counterObserver = meter.createCounterObserver( + const observableCounter = meter.createObservableCounter( 'name', { description: 'desc', @@ -892,8 +892,8 @@ describe('Meter', () => { observerResult.observe(1, { pid: '123', core: '1' }); throw new Error('Boom'); } - ) as CounterObserverMetric; - await counterObserver + ) as ObservableCounterMetric; + await observableCounter .getMetricRecord() .then() .catch(e => { @@ -902,30 +902,30 @@ describe('Meter', () => { }); it('should pipe through resource', async () => { - const counterObserver = meter.createCounterObserver('name', {}, result => { + const observableCounter = meter.createObservableCounter('name', {}, result => { result.observe(42, { foo: 'bar' }); return Promise.resolve(); - }) as CounterObserverMetric; - assert.ok(counterObserver.resource instanceof Resource); + }) as ObservableCounterMetric; + assert.ok(observableCounter.resource instanceof Resource); - const [record] = await counterObserver.getMetricRecord(); + const [record] = await observableCounter.getMetricRecord(); assert.ok(record.resource instanceof Resource); }); }); - describe('#GaugeObserver', () => { + describe('#ObservableGauge', () => { it('should create a gauge observer', () => { - const gaugeObserver = meter.createGaugeObserver( + const observableGauge = meter.createObservableGauge( 'name' - ) as GaugeObserverMetric; - assert.ok(gaugeObserver instanceof Metric); + ) as ObservableGaugeMetric; + assert.ok(observableGauge instanceof Metric); }); it('should return noop observer when name is invalid', () => { // Need to stub/spy on the underlying logger as the "diag" instance is global const spy = sinon.stub(diag, 'warn'); - const gaugeObserver = meter.createGaugeObserver('na me'); - assert.ok(gaugeObserver === api.NOOP_GAUGE_OBSERVER_METRIC); + const observableGauge = meter.createObservableGauge('na me'); + assert.ok(observableGauge === api.NOOP_OBSERVABLE_GAUGE_METRIC); const args = spy.args[0]; assert.ok( args[0], @@ -934,16 +934,16 @@ describe('Meter', () => { }); it('should create observer with options', () => { - const gaugeObserver = meter.createGaugeObserver('name', { + const observableGauge = meter.createObservableGauge('name', { description: 'desc', unit: '1', disabled: false, - }) as GaugeObserverMetric; - assert.ok(gaugeObserver instanceof Metric); + }) as ObservableGaugeMetric; + assert.ok(observableGauge instanceof Metric); }); it('should set callback and observe value ', async () => { - const gaugeObserver = meter.createGaugeObserver( + const observableGauge = meter.createObservableGauge( 'name', { description: 'desc', @@ -960,13 +960,13 @@ describe('Meter', () => { }, 1); }); } - ) as GaugeObserverMetric; + ) as ObservableGaugeMetric; function getCpuUsage() { return Math.random(); } - const metricRecords: MetricRecord[] = await gaugeObserver.getMetricRecord(); + const metricRecords: MetricRecord[] = await observableGauge.getMetricRecord(); assert.strictEqual(metricRecords.length, 4); const metric1 = metricRecords[0]; @@ -985,29 +985,29 @@ describe('Meter', () => { }); it('should pipe through resource', async () => { - const gaugeObserver = meter.createGaugeObserver('name', {}, result => { + const observableGauge = meter.createObservableGauge('name', {}, result => { result.observe(42, { foo: 'bar' }); - }) as GaugeObserverMetric; - assert.ok(gaugeObserver.resource instanceof Resource); + }) as ObservableGaugeMetric; + assert.ok(observableGauge.resource instanceof Resource); - const [record] = await gaugeObserver.getMetricRecord(); + const [record] = await observableGauge.getMetricRecord(); assert.ok(record.resource instanceof Resource); }); }); - describe('#UpDownCounterObserverMetric', () => { - it('should create an UpDownSum observer', () => { - const upDownCounterObserver = meter.createUpDownCounterObserver( + describe('#ObservableUpDownCounterMetric', () => { + it('should create an ObservableUpDownCounter', () => { + const observableUpDownCounter = meter.createObservableUpDownCounter( 'name' - ) as UpDownCounterObserverMetric; - assert.ok(upDownCounterObserver instanceof Metric); + ) as ObservableUpDownCounterMetric; + assert.ok(observableUpDownCounter instanceof Metric); }); it('should return noop observer when name is invalid', () => { // Need to stub/spy on the underlying logger as the "diag" instance is global const spy = sinon.stub(diag, 'warn'); - const upDownCounterObserver = meter.createUpDownCounterObserver('na me'); - assert.ok(upDownCounterObserver === api.NOOP_UP_DOWN_COUNTER_OBSERVER_METRIC); + const observableUpDownCounter = meter.createObservableUpDownCounter('na me'); + assert.ok(observableUpDownCounter === api.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC); const args = spy.args[0]; assert.ok( args[0], @@ -1016,12 +1016,12 @@ describe('Meter', () => { }); it('should create observer with options', () => { - const upDownCounterObserver = meter.createUpDownCounterObserver('name', { + const observableUpDownCounter = meter.createObservableUpDownCounter('name', { description: 'desc', unit: '1', disabled: false, - }) as UpDownCounterObserverMetric; - assert.ok(upDownCounterObserver instanceof Metric); + }) as ObservableUpDownCounterMetric; + assert.ok(observableUpDownCounter instanceof Metric); }); it('should set callback and observe value ', async () => { @@ -1035,7 +1035,7 @@ describe('Meter', () => { return 3; } - const upDownCounterObserver = meter.createUpDownCounterObserver( + const observableUpDownCounter = meter.createObservableUpDownCounter( 'name', { description: 'desc', @@ -1049,9 +1049,9 @@ describe('Meter', () => { }, 1); }); } - ) as UpDownCounterObserverMetric; + ) as ObservableUpDownCounterMetric; - let metricRecords = await upDownCounterObserver.getMetricRecord(); + let metricRecords = await observableUpDownCounter.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); let point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, 3); @@ -1060,19 +1060,19 @@ describe('Meter', () => { '|#core:1,pid:123' ); - metricRecords = await upDownCounterObserver.getMetricRecord(); + metricRecords = await observableUpDownCounter.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, 2); - metricRecords = await upDownCounterObserver.getMetricRecord(); + metricRecords = await observableUpDownCounter.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); point = metricRecords[0].aggregator.toPoint(); assert.strictEqual(point.value, 3); }); it('should set callback and observe value when callback returns nothing', async () => { - const upDownCounterObserver = meter.createUpDownCounterObserver( + const observableUpDownCounter = meter.createObservableUpDownCounter( 'name', { description: 'desc', @@ -1080,9 +1080,9 @@ describe('Meter', () => { (observerResult: api.ObserverResult) => { observerResult.observe(1, { pid: '123', core: '1' }); } - ) as UpDownCounterObserverMetric; + ) as ObservableUpDownCounterMetric; - const metricRecords = await upDownCounterObserver.getMetricRecord(); + const metricRecords = await observableUpDownCounter.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); }); @@ -1090,7 +1090,7 @@ describe('Meter', () => { 'should set callback and observe value when callback returns anything' + ' but Promise', async () => { - const upDownCounterObserver = meter.createUpDownCounterObserver( + const observableUpDownCounter = meter.createObservableUpDownCounter( 'name', { description: 'desc', @@ -1099,15 +1099,15 @@ describe('Meter', () => { observerResult.observe(1, { pid: '123', core: '1' }); return '1'; } - ) as UpDownCounterObserverMetric; + ) as ObservableUpDownCounterMetric; - const metricRecords = await upDownCounterObserver.getMetricRecord(); + const metricRecords = await observableUpDownCounter.getMetricRecord(); assert.strictEqual(metricRecords.length, 1); } ); it('should reject getMetricRecord when callback throws an error', async () => { - const upDownCounterObserver = meter.createUpDownCounterObserver( + const observableUpDownCounter = meter.createObservableUpDownCounter( 'name', { description: 'desc', @@ -1116,8 +1116,8 @@ describe('Meter', () => { observerResult.observe(1, { pid: '123', core: '1' }); throw new Error('Boom'); } - ) as UpDownCounterObserverMetric; - await upDownCounterObserver + ) as ObservableUpDownCounterMetric; + await observableUpDownCounter .getMetricRecord() .then() .catch(e => { @@ -1126,17 +1126,17 @@ describe('Meter', () => { }); it('should pipe through resource', async () => { - const upDownCounterObserver = meter.createUpDownCounterObserver( + const observableUpDownCounter = meter.createObservableUpDownCounter( 'name', {}, result => { result.observe(42, { foo: 'bar' }); return Promise.resolve(); } - ) as UpDownCounterObserverMetric; - assert.ok(upDownCounterObserver.resource instanceof Resource); + ) as ObservableUpDownCounterMetric; + assert.ok(observableUpDownCounter.resource instanceof Resource); - const [record] = await upDownCounterObserver.getMetricRecord(); + const [record] = await observableUpDownCounter.getMetricRecord(); assert.ok(record.resource instanceof Resource); }); }); @@ -1155,13 +1155,13 @@ describe('Meter', () => { }); it('should use callback to observe values ', async () => { - const tempMetric = meter.createGaugeObserver('cpu_temp_per_app', { + const tempMetric = meter.createObservableGauge('cpu_temp_per_app', { description: 'desc', - }) as GaugeObserverMetric; + }) as ObservableGaugeMetric; - const cpuUsageMetric = meter.createGaugeObserver('cpu_usage_per_app', { + const cpuUsageMetric = meter.createObservableGauge('cpu_usage_per_app', { description: 'desc', - }) as GaugeObserverMetric; + }) as ObservableGaugeMetric; meter.createBatchObserver(observerBatchResult => { interface StatItem { @@ -1248,9 +1248,9 @@ describe('Meter', () => { }); it('should not observe values when timeout', done => { - const cpuUsageMetric = meter.createGaugeObserver('cpu_usage_per_app', { + const cpuUsageMetric = meter.createObservableGauge('cpu_usage_per_app', { description: 'desc', - }) as GaugeObserverMetric; + }) as ObservableGaugeMetric; meter.createBatchObserver( observerBatchResult => { @@ -1289,13 +1289,13 @@ describe('Meter', () => { }); it('should pipe through instrumentation library', async () => { - const observer = meter.createGaugeObserver( + const observer = meter.createObservableGauge( 'name', {}, (observerResult: api.ObserverResult) => { observerResult.observe(42, { foo: 'bar' }); } - ) as GaugeObserverMetric; + ) as ObservableGaugeMetric; assert.ok(observer.instrumentationLibrary); const [record] = await observer.getMetricRecord(); @@ -1389,6 +1389,6 @@ function ensureMetric(metric: MetricRecord, name?: string, value?: LastValue) { assert.strictEqual(descriptor.name, name || 'name'); assert.strictEqual(descriptor.description, 'desc'); assert.strictEqual(descriptor.unit, '1'); - assert.strictEqual(descriptor.metricKind, MetricKind.GAUGE_OBSERVER); + assert.strictEqual(descriptor.metricKind, MetricKind.OBSERVABLE_GAUGE); assert.strictEqual(descriptor.valueType, api.ValueType.DOUBLE); } From 5148567648902d5163ab08cf9309445a77e2aecc Mon Sep 17 00:00:00 2001 From: legendecas Date: Thu, 7 Oct 2021 00:28:57 +0800 Subject: [PATCH 3/8] fixup! --- .../src/NoopMeter.ts | 8 ++--- .../test/OTLPMetricExporter.test.ts | 8 ++--- .../test/helper.ts | 16 +++++----- .../browser/CollectorMetricExporter.test.ts | 26 +++++++-------- .../common/CollectorMetricExporter.test.ts | 8 ++--- .../test/common/transformMetrics.test.ts | 30 ++++++++--------- .../test/helper.ts | 32 +++++++++---------- .../test/node/CollectorMetricExporter.test.ts | 22 ++++++------- .../test/OTLPMetricExporter.test.ts | 8 ++--- .../test/helper.ts | 20 ++++++------ .../test/PrometheusSerializer.test.ts | 30 ++++++++--------- .../opentelemetry-sdk-metrics-base/README.md | 2 +- .../src/Meter.ts | 4 +-- .../src/ObservableGaugeMetric.ts | 2 +- .../test/Meter.test.ts | 2 +- 15 files changed, 109 insertions(+), 109 deletions(-) diff --git a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts index 7bb7fe1797c..80a117afcf6 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts @@ -212,17 +212,17 @@ export const NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric( NOOP_BOUND_HISTOGRAM ); -export const NOOP_BOUND_BASE_OBSERVER = new NoopBoundBaseObservable(); +export const NOOP_BOUND_BASE_OBSERVABLE = new NoopBoundBaseObservable(); export const NOOP_OBSERVABLE_GAUGE_METRIC = new NoopBaseObservableMetric( - NOOP_BOUND_BASE_OBSERVER + NOOP_BOUND_BASE_OBSERVABLE ); export const NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopBaseObservableMetric( - NOOP_BOUND_BASE_OBSERVER + NOOP_BOUND_BASE_OBSERVABLE ); export const NOOP_OBSERVABLE_COUNTER_METRIC = new NoopBaseObservableMetric( - NOOP_BOUND_BASE_OBSERVER + NOOP_BOUND_BASE_OBSERVABLE ); export const NOOP_BATCH_OBSERVER = new NoopBatchObserver(); diff --git a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts index 59567091aa6..8395e882959 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts @@ -145,16 +145,16 @@ const testOTLPMetricExporter = (params: TestParams) => observerResult.observe(3, {}); observerResult.observe(6, {}); }); - const recorder: metrics.Metric & + const histogram: metrics.Metric & Histogram = mockHistogram(); counter.add(1); - recorder.record(7); - recorder.record(14); + histogram.record(7); + histogram.record(14); metrics.push((await counter.getMetricRecord())[0]); metrics.push((await observableGauge.getMetricRecord())[0]); - metrics.push((await recorder.getMetricRecord())[0]); + metrics.push((await histogram.getMetricRecord())[0]); }); afterEach(() => { diff --git a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts index f7c1294edc8..94d8d34f07b 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts @@ -78,13 +78,13 @@ export function mockCounter(): metrics.Metric & Counter { export function mockObservableGauge( callback: (observerResult: ObserverResult) => void ): metrics.Metric & ObservableGauge { - const name = 'double-observable'; + const name = 'double-observable-gauge'; const metric = meter['_metrics'].get(name) || meter.createObservableGauge( name, { - description: 'sample observable description', + description: 'sample observable gauge description', valueType: ValueType.DOUBLE, }, callback @@ -96,11 +96,11 @@ export function mockObservableGauge( export function mockHistogram(): metrics.Metric & Histogram { - const name = 'int-recorder'; + const name = 'int-histogram'; const metric = meter['_metrics'].get(name) || meter.createHistogram(name, { - description: 'sample recorder description', + description: 'sample histogram description', valueType: ValueType.INT, boundaries: [0, 100], }); @@ -357,8 +357,8 @@ export function ensureExportedObservableGaugeIsCorrect( time?: number ) { assert.deepStrictEqual(metric, { - name: 'double-observable', - description: 'sample observable description', + name: 'double-observable-gauge', + description: 'sample observable gauge description', unit: '1', data: 'doubleGauge', doubleGauge: { @@ -382,8 +382,8 @@ export function ensureExportedHistogramIsCorrect( bucketCounts: string[] = ['2', '0'] ) { assert.deepStrictEqual(metric, { - name: 'int-recorder', - description: 'sample recorder description', + name: 'int-histogram', + description: 'sample histogram description', unit: '1', data: 'intHistogram', intHistogram: { diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts index 743d34f1629..87fe174cd57 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts @@ -37,11 +37,11 @@ import { ensureCounterIsCorrect, ensureExportMetricsServiceRequestIsSet, ensureHeadersContain, - ensureObserverIsCorrect, + ensureObservableGaugeIsCorrect, ensureHistogramIsCorrect, ensureWebResourceIsCorrect, mockCounter, - mockObserver, + mockObservableGauge, mockHistogram, } from '../helper'; @@ -57,22 +57,22 @@ describe('OTLPMetricExporter - web', () => { stubBeacon = sinon.stub(navigator, 'sendBeacon'); metrics = []; const counter: Metric & Counter = mockCounter(); - const observer: Metric & ObservableGauge = mockObserver( + const observerGauge: Metric & ObservableGauge = mockObservableGauge( observerResult => { observerResult.observe(3, {}); observerResult.observe(6, {}); }, - 'double-observer2' + 'double-observable-gauge2' ); - const recorder: Metric & + const histogram: Metric & Histogram = mockHistogram(); counter.add(1); - recorder.record(7); - recorder.record(14); + histogram.record(7); + histogram.record(14); metrics.push((await counter.getMetricRecord())[0]); - metrics.push((await observer.getMetricRecord())[0]); - metrics.push((await recorder.getMetricRecord())[0]); + metrics.push((await observerGauge.getMetricRecord())[0]); + metrics.push((await histogram.getMetricRecord())[0]); }); afterEach(() => { @@ -121,11 +121,11 @@ describe('OTLPMetricExporter - web', () => { "second metric doesn't exist" ); if (metric2) { - ensureObserverIsCorrect( + ensureObservableGaugeIsCorrect( metric2, hrTimeToNanoseconds(metrics[1].aggregator.toPoint().timestamp), 6, - 'double-observer2' + 'double-observable-gauge2' ); } @@ -234,11 +234,11 @@ describe('OTLPMetricExporter - web', () => { "second metric doesn't exist" ); if (metric2) { - ensureObserverIsCorrect( + ensureObservableGaugeIsCorrect( metric2, hrTimeToNanoseconds(metrics[1].aggregator.toPoint().timestamp), 6, - 'double-observer2' + 'double-observable-gauge2' ); } diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts index cacdbbb21e3..0068d9c4884 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts @@ -27,7 +27,7 @@ import * as sinon from 'sinon'; import { OTLPExporterBase } from '../../src/OTLPExporterBase'; import * as otlpTypes from '../../src/types'; import { OTLPExporterConfigBase } from '../../src/types'; -import { mockCounter, mockObserver } from '../helper'; +import { mockCounter, mockObservableGauge } from '../helper'; type CollectorExporterConfig = OTLPExporterConfigBase; class OTLPMetricExporter extends OTLPExporterBase< @@ -70,17 +70,17 @@ describe('OTLPMetricExporter - common', () => { collectorExporter = new OTLPMetricExporter(collectorExporterConfig); metrics = []; const counter: Metric & Counter = mockCounter(); - const observer: Metric & ObservableGauge = mockObserver( + const observableGauge: Metric & ObservableGauge = mockObservableGauge( observerResult => { observerResult.observe(3, {}); observerResult.observe(6, {}); }, - 'double-observer3' + 'double-observable-gauge3' ); counter.add(1); metrics.push((await counter.getMetricRecord())[0]); - metrics.push((await observer.getMetricRecord())[0]); + metrics.push((await observableGauge.getMetricRecord())[0]); }); it('should create an instance', () => { diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts index 8c61373807a..6fef0695ce2 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts @@ -34,7 +34,7 @@ import * as transform from '../../src/transformMetrics'; import { ensureCounterIsCorrect, ensureDoubleCounterIsCorrect, - ensureObserverIsCorrect, + ensureObservableGaugeIsCorrect, ensureObservableCounterIsCorrect, ensureObservableUpDownCounterIsCorrect, ensureHistogramIsCorrect, @@ -42,7 +42,7 @@ import { mockDoubleCounter, mockedInstrumentationLibraries, mockedResources, - mockObserver, + mockObservableGauge, mockObservableCounter, mockObservableUpDownCounter, mockHistogram, @@ -54,10 +54,10 @@ describe('transformMetrics', () => { describe('toCollectorMetric', async () => { let counter: Metric & Counter; let doubleCounter: Metric & Counter; - let observer: Metric & ObservableGauge; + let observableGauge: Metric & ObservableGauge; let observableCounter: Metric & ObservableCounter; let observableUpDownCounter: Metric & ObservableUpDownCounter; - let recorder: Metric & Histogram; + let histogram: Metric & Histogram; beforeEach(() => { counter = mockCounter(); doubleCounter = mockDoubleCounter(); @@ -72,7 +72,7 @@ describe('transformMetrics', () => { return -1; } - observer = mockObserver(observerResult => { + observableGauge = mockObservableGauge(observerResult => { count1++; observerResult.observe(getValue(count1), {}); }); @@ -87,7 +87,7 @@ describe('transformMetrics', () => { observerResult.observe(getValue(count3), {}); }); - recorder = mockHistogram(); + histogram = mockHistogram(); // Counter counter.add(1); @@ -96,8 +96,8 @@ describe('transformMetrics', () => { doubleCounter.add(8); // Histogram - recorder.record(7); - recorder.record(14); + histogram.record(7); + histogram.record(14); }); it('should convert metric', async () => { @@ -113,10 +113,10 @@ describe('transformMetrics', () => { hrTimeToNanoseconds(doubleCounterMetric.aggregator.toPoint().timestamp) ); - await observer.getMetricRecord(); - await observer.getMetricRecord(); - const observerMetric = (await observer.getMetricRecord())[0]; - ensureObserverIsCorrect( + await observableGauge.getMetricRecord(); + await observableGauge.getMetricRecord(); + const observerMetric = (await observableGauge.getMetricRecord())[0]; + ensureObservableGaugeIsCorrect( transform.toCollectorMetric(observerMetric, 1592602232694000000), hrTimeToNanoseconds(observerMetric.aggregator.toPoint().timestamp), -1 @@ -149,10 +149,10 @@ describe('transformMetrics', () => { -1 ); - const recorderMetric = (await recorder.getMetricRecord())[0]; + const histogramMetric = (await histogram.getMetricRecord())[0]; ensureHistogramIsCorrect( - transform.toCollectorMetric(recorderMetric, 1592602232694000000), - hrTimeToNanoseconds(recorderMetric.aggregator.toPoint().timestamp), + transform.toCollectorMetric(histogramMetric, 1592602232694000000), + hrTimeToNanoseconds(histogramMetric.aggregator.toPoint().timestamp), [0, 100], [0, 2, 0] ); diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts index a34073bd4ec..a0584cdbef7 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts @@ -78,16 +78,16 @@ export function mockDoubleCounter(): metrics.Metric & return metric; } -export function mockObserver( +export function mockObservableGauge( callback: (observerResult: ObserverResult) => unknown, - name = 'double-observer' + name = 'double-observable-gauge' ): metrics.Metric & ObservableGauge { const metric = meter['_metrics'].get(name) || meter.createObservableGauge( name, { - description: 'sample observer description', + description: 'sample observable gauge description', valueType: ValueType.DOUBLE, }, callback @@ -99,7 +99,7 @@ export function mockObserver( export function mockObservableCounter( callback: (observerResult: ObserverResult) => unknown, - name = 'double-sum-observer' + name = 'double-observable-counter' ): metrics.Metric & ObservableCounter { const metric = meter['_metrics'].get(name) || @@ -118,7 +118,7 @@ export function mockObservableCounter( export function mockObservableUpDownCounter( callback: (observerResult: ObserverResult) => unknown, - name = 'double-up-down-sum-observer' + name = 'double-up-down-observable-counter' ): metrics.Metric & ObservableUpDownCounter { const metric = meter['_metrics'].get(name) || @@ -137,11 +137,11 @@ export function mockObservableUpDownCounter( export function mockHistogram(): metrics.Metric & Histogram { - const name = 'int-recorder'; + const name = 'int-histogram'; const metric = meter['_metrics'].get(name) || meter.createHistogram(name, { - description: 'sample recorder description', + description: 'sample histogram description', valueType: ValueType.INT, boundaries: [0, 100], }); @@ -322,7 +322,7 @@ export const multiResourceMetricsGet = function ( instrumentationLibrary: mockedInstrumentationLibraries[0], }, { - ...mockObserver(callback), + ...mockObservableGauge(callback), resource: mockedResources[1], instrumentationLibrary: mockedInstrumentationLibraries[0], }, @@ -344,7 +344,7 @@ export const multiInstrumentationLibraryMetricsGet = function ( instrumentationLibrary: mockedInstrumentationLibraries[0], }, { - ...mockObserver(callback), + ...mockObservableGauge(callback), resource: mockedResources[0], instrumentationLibrary: mockedInstrumentationLibraries[1], }, @@ -601,15 +601,15 @@ export function ensureDoubleCounterIsCorrect( }); } -export function ensureObserverIsCorrect( +export function ensureObservableGaugeIsCorrect( metric: otlpTypes.opentelemetryProto.metrics.v1.Metric, time: number, value: number, - name = 'double-observer' + name = 'double-observable-gauge' ) { assert.deepStrictEqual(metric, { name, - description: 'sample observer description', + description: 'sample observable gauge description', unit: '1', doubleGauge: { dataPoints: [ @@ -628,7 +628,7 @@ export function ensureObservableCounterIsCorrect( metric: otlpTypes.opentelemetryProto.metrics.v1.Metric, time: number, value: number, - name = 'double-sum-observer' + name = 'double-observable-counter' ) { assert.deepStrictEqual(metric, { name, @@ -655,7 +655,7 @@ export function ensureObservableUpDownCounterIsCorrect( metric: otlpTypes.opentelemetryProto.metrics.v1.Metric, time: number, value: number, - name = 'double-up-down-sum-observer' + name = 'double-up-down-observable-counter' ) { assert.deepStrictEqual(metric, { name, @@ -685,8 +685,8 @@ export function ensureHistogramIsCorrect( bucketCounts: number[] = [2, 0] ) { assert.deepStrictEqual(metric, { - name: 'int-recorder', - description: 'sample recorder description', + name: 'int-histogram', + description: 'sample histogram description', unit: '1', intHistogram: { dataPoints: [ diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts index 14bf744ab8e..201475e1c02 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts @@ -39,10 +39,10 @@ import * as otlpTypes from '../../src/types'; import { ensureCounterIsCorrect, ensureExportMetricsServiceRequestIsSet, - ensureObserverIsCorrect, + ensureObservableGaugeIsCorrect, ensureHistogramIsCorrect, mockCounter, - mockObserver, + mockObservableGauge, mockHistogram, } from '../helper'; import { MockedResponse } from './nodeHelpers'; @@ -149,21 +149,21 @@ describe('OTLPMetricExporter - node with json over http', () => { }); metrics = []; const counter: Metric & Counter = mockCounter(); - const observer: Metric & ObservableGauge = mockObserver( + const observerGauge: Metric & ObservableGauge = mockObservableGauge( observerResult => { observerResult.observe(6, {}); }, - 'double-observer2' + 'double-observable-gauge2' ); - const recorder: Metric & + const histogram: Metric & Histogram = mockHistogram(); counter.add(1); - recorder.record(7); - recorder.record(14); + histogram.record(7); + histogram.record(14); metrics.push((await counter.getMetricRecord())[0]); - metrics.push((await observer.getMetricRecord())[0]); - metrics.push((await recorder.getMetricRecord())[0]); + metrics.push((await observerGauge.getMetricRecord())[0]); + metrics.push((await histogram.getMetricRecord())[0]); }); it('should open the connection', done => { @@ -225,11 +225,11 @@ describe('OTLPMetricExporter - node with json over http', () => { core.hrTimeToNanoseconds(metrics[0].aggregator.toPoint().timestamp) ); assert.ok(typeof metric2 !== 'undefined', "observer doesn't exist"); - ensureObserverIsCorrect( + ensureObservableGaugeIsCorrect( metric2, core.hrTimeToNanoseconds(metrics[1].aggregator.toPoint().timestamp), 6, - 'double-observer2' + 'double-observable-gauge2' ); assert.ok(typeof metric3 !== 'undefined', "histogram doesn't exist"); ensureHistogramIsCorrect( diff --git a/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts index af1fe6180d3..1bb9134615e 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts @@ -33,12 +33,12 @@ import { OTLPMetricExporter } from '../src'; import { getExportRequestProto } from '../src/util'; import { ensureExportedCounterIsCorrect, - ensureExportedObserverIsCorrect, + ensureExportedObservableGaugeIsCorrect, ensureExportedHistogramIsCorrect, ensureExportMetricsServiceRequestIsSet, mockCounter, MockedResponse, - mockObserver, + mockObservableGauge, mockHistogram, } from './helper'; @@ -122,7 +122,7 @@ describe('OTLPMetricExporter - node with proto over http', () => { const counter: metrics.Metric & Counter = mockCounter(); const observer: metrics.Metric & - ObservableGauge = mockObserver(observerResult => { + ObservableGauge = mockObservableGauge(observerResult => { observerResult.observe(3, {}); observerResult.observe(6, {}); }); @@ -198,7 +198,7 @@ describe('OTLPMetricExporter - node with proto over http', () => { metric1.intSum?.dataPoints[0].timeUnixNano ); assert.ok(typeof metric2 !== 'undefined', "observer doesn't exist"); - ensureExportedObserverIsCorrect( + ensureExportedObservableGaugeIsCorrect( metric2, metric2.doubleGauge?.dataPoints[0].timeUnixNano ); diff --git a/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts b/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts index 2f6207e4085..5803d59575b 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts @@ -54,16 +54,16 @@ export function mockCounter(): metrics.Metric & Counter { return metric; } -export function mockObserver( +export function mockObservableGauge( callback: (observerResult: ObserverResult) => void ): metrics.Metric & ObservableGauge { - const name = 'double-observer'; + const name = 'double-observable-gauge'; const metric = meter['_metrics'].get(name) || meter.createObservableGauge( name, { - description: 'sample observer description', + description: 'sample observable gauge description', valueType: ValueType.DOUBLE, }, callback @@ -75,11 +75,11 @@ export function mockObserver( export function mockHistogram(): metrics.Metric & Histogram { - const name = 'int-recorder'; + const name = 'int-histogram'; const metric = meter['_metrics'].get(name) || meter.createHistogram(name, { - description: 'sample recorder description', + description: 'sample histogram description', valueType: ValueType.INT, boundaries: [0, 100], }); @@ -316,13 +316,13 @@ export function ensureExportedCounterIsCorrect( }); } -export function ensureExportedObserverIsCorrect( +export function ensureExportedObservableGaugeIsCorrect( metric: otlpTypes.opentelemetryProto.metrics.v1.Metric, time?: number ) { assert.deepStrictEqual(metric, { - name: 'double-observer', - description: 'sample observer description', + name: 'double-observable-gauge', + description: 'sample observable gauge description', unit: '1', doubleGauge: { dataPoints: [ @@ -343,8 +343,8 @@ export function ensureExportedHistogramIsCorrect( bucketCounts: string[] = ['2', '0'] ) { assert.deepStrictEqual(metric, { - name: 'int-recorder', - description: 'sample recorder description', + name: 'int-histogram', + description: 'sample histogram description', unit: '1', intHistogram: { dataPoints: [ diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts index 4165c2f7f65..9f343f9a8a7 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts @@ -153,13 +153,13 @@ describe('PrometheusSerializer', () => { const processor = new ExactProcessor(HistogramAggregator, [1, 10, 100]); const meter = new MeterProvider({ processor }).getMeter('test'); - const recorder = meter.createHistogram('test', { + const histogram = meter.createHistogram('test', { description: 'foobar', }) as HistogramMetric; - recorder.bind(labels).record(5); + histogram.bind(labels).record(5); - const records = await recorder.getMetricRecord(); + const records = await histogram.getMetricRecord(); const record = records[0]; const result = serializer.serializeRecord( @@ -181,13 +181,13 @@ describe('PrometheusSerializer', () => { const serializer = new PrometheusSerializer(); const meter = new MeterProvider().getMeter('test'); - const recorder = meter.createHistogram('test', { + const histogram = meter.createHistogram('test', { description: 'foobar', boundaries: [1, 10, 100], }) as HistogramMetric; - recorder.bind(labels).record(5); + histogram.bind(labels).record(5); - const records = await recorder.getMetricRecord(); + const records = await histogram.getMetricRecord(); const record = records[0]; const result = serializer.serializeRecord( @@ -210,12 +210,12 @@ describe('PrometheusSerializer', () => { const processor = new ExactProcessor(HistogramAggregator, [1, 10, 100]); const meter = new MeterProvider({ processor }).getMeter('test'); - const recorder = meter.createHistogram('test', { + const histogram = meter.createHistogram('test', { description: 'foobar', }) as HistogramMetric; - recorder.bind(labels).record(5); + histogram.bind(labels).record(5); - const records = await recorder.getMetricRecord(); + const records = await histogram.getMetricRecord(); const record = records[0]; const result = serializer.serializeRecord( @@ -336,16 +336,16 @@ describe('PrometheusSerializer', () => { const processor = new ExactProcessor(HistogramAggregator, [1, 10, 100]); const meter = new MeterProvider({ processor }).getMeter('test'); - const recorder = meter.createHistogram('test', { + const histogram = meter.createHistogram('test', { description: 'foobar', }) as HistogramMetric; - recorder.bind({ val: '1' }).record(5); - recorder.bind({ val: '1' }).record(50); - recorder.bind({ val: '1' }).record(120); + histogram.bind({ val: '1' }).record(5); + histogram.bind({ val: '1' }).record(50); + histogram.bind({ val: '1' }).record(120); - recorder.bind({ val: '2' }).record(5); + histogram.bind({ val: '2' }).record(5); - const records = await recorder.getMetricRecord(); + const records = await histogram.getMetricRecord(); const labelBatcher = new PrometheusLabelsBatcher(); records.forEach(it => labelBatcher.process(it)); const checkPointSet = labelBatcher.checkPointSet(); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/README.md b/experimental/packages/opentelemetry-sdk-metrics-base/README.md index 9583487d0a2..722e66beb2a 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/README.md +++ b/experimental/packages/opentelemetry-sdk-metrics-base/README.md @@ -73,7 +73,7 @@ boundCounter.add(Math.random() > 0.5 ? 1 : -1); ``` -### Gauge Observer +### Observable Gauge Choose this kind of metric when only last value is important without worry about aggregation. The callback can be sync or async. diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts index f440abd0297..e9d18371169 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts @@ -164,7 +164,7 @@ export class Meter implements api.Meter { * Creates a new `ObservableGauge` metric. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the gauge observer callback + * @param [callback] the observable gauge callback */ createObservableGauge( name: string, @@ -224,7 +224,7 @@ export class Meter implements api.Meter { * Creates a new `ObservableUpDownCounter` metric. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the gauge observer callback + * @param [callback] the observable gauge callback */ createObservableUpDownCounter( name: string, diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts index 3eddc3965b5..3b7a9c3da39 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts @@ -20,7 +20,7 @@ import { BaseObservableMetric } from './BaseObservableMetric'; import { Processor } from './export/Processor'; import { MetricKind } from './export/types'; -/** This is a SDK implementation of Gauge Observer Metric. */ +/** This is a SDK implementation of ObservableGauge Metric. */ export class ObservableGaugeMetric extends BaseObservableMetric implements api.ObservableGauge { diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts b/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts index be17f899a97..e8947433988 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts @@ -914,7 +914,7 @@ describe('Meter', () => { }); describe('#ObservableGauge', () => { - it('should create a gauge observer', () => { + it('should create a observable gauge', () => { const observableGauge = meter.createObservableGauge( 'name' ) as ObservableGaugeMetric; From 85ed341bbf1ee8245eb10a87ea7502bb8b0545db Mon Sep 17 00:00:00 2001 From: legendecas Date: Thu, 7 Oct 2021 00:30:31 +0800 Subject: [PATCH 4/8] fixup! --- examples/otlp-exporter-node/metrics.js | 4 ++-- .../test/OTLPMetricExporter.test.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/otlp-exporter-node/metrics.js b/examples/otlp-exporter-node/metrics.js index c920f1c5b4e..3a2294f43f0 100644 --- a/examples/otlp-exporter-node/metrics.js +++ b/examples/otlp-exporter-node/metrics.js @@ -31,7 +31,7 @@ const upDownCounter = meter.createUpDownCounter('test_up_down_counter', { description: 'Example of a UpDownCounter', }); -const recorder = meter.createHistogram('test_histogram', { +const histogram = meter.createHistogram('test_histogram', { description: 'Example of a Histogram', }); @@ -40,5 +40,5 @@ const labels = { pid: process.pid, environment: 'staging' }; setInterval(() => { requestCounter.bind(labels).add(1); upDownCounter.bind(labels).add(Math.random() > 0.5 ? 1 : -1); - recorder.bind(labels).record(Math.random()); + histogram.bind(labels).record(Math.random()); }, 1000); diff --git a/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts index 1bb9134615e..c4697aeaf3a 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts @@ -126,16 +126,16 @@ describe('OTLPMetricExporter - node with proto over http', () => { observerResult.observe(3, {}); observerResult.observe(6, {}); }); - const recorder: metrics.Metric & + const histogram: metrics.Metric & Histogram = mockHistogram(); counter.add(1); - recorder.record(7); - recorder.record(14); + histogram.record(7); + histogram.record(14); metrics.push((await counter.getMetricRecord())[0]); metrics.push((await observer.getMetricRecord())[0]); - metrics.push((await recorder.getMetricRecord())[0]); + metrics.push((await histogram.getMetricRecord())[0]); }); afterEach(() => { sinon.restore(); From ea4de2e1abef2234f152399fe2b6b6134410abcc Mon Sep 17 00:00:00 2001 From: legendecas Date: Fri, 8 Oct 2021 00:56:31 +0800 Subject: [PATCH 5/8] fixup! --- .../src/NoopMeter.ts | 8 ++--- .../test/PrometheusExporter.test.ts | 30 +++++++++---------- .../test/Meter.test.ts | 2 +- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts index 80a117afcf6..06388f8b36b 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts @@ -53,7 +53,7 @@ export class NoopMeter implements Meter { } /** - * Returns constant noop observable counter. + * Returns a constant noop observable counter. * @param name the name of the metric. * @param [options] the metric options. * @param [callback] the observable counter callback @@ -67,7 +67,7 @@ export class NoopMeter implements Meter { } /** - * Returns constant noop histogram. + * Returns a constant noop histogram. * @param name the name of the metric. * @param [options] the metric options. */ @@ -76,7 +76,7 @@ export class NoopMeter implements Meter { } /** - * Returns constant noop observable gauge. + * Returns a constant noop observable gauge. * @param name the name of the metric. * @param [options] the metric options. * @param [callback] the observable gauge callback @@ -99,7 +99,7 @@ export class NoopMeter implements Meter { } /** - * Returns constant noop up down observable counter. + * Returns a constant noop up down observable counter. * @param name the name of the metric. * @param [options] the metric options. * @param [callback] the up down observable counter callback diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts index bd2f9f0bd49..7b7ec1645ef 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts @@ -270,13 +270,13 @@ describe('PrometheusExporter', () => { }); }); - it('should export an observer aggregation', done => { + it('should export an observable gauge aggregation', done => { function getCpuUsage() { return 0.999; } meter.createObservableGauge( - 'metric_observer', + 'metric_observable_gauge', { description: 'a test description', }, @@ -298,9 +298,9 @@ describe('PrometheusExporter', () => { const lines = body.split('\n'); assert.deepStrictEqual(lines, [ - '# HELP metric_observer a test description', - '# TYPE metric_observer gauge', - `metric_observer{pid="123",core="1"} 0.999 ${mockedHrTimeMs}`, + '# HELP metric_observable_gauge a test description', + '# TYPE metric_observable_gauge gauge', + `metric_observable_gauge{pid="123",core="1"} 0.999 ${mockedHrTimeMs}`, '', ]); done(); @@ -472,13 +472,13 @@ describe('PrometheusExporter', () => { }); }); - it('should export a ObservableCounter as a counter', done => { + it('should export an ObservableCounter as a counter', done => { function getValue() { return 20; } meter.createObservableCounter( - 'sum_observer', + 'metric_observable_counter', { description: 'a test description', }, @@ -498,9 +498,9 @@ describe('PrometheusExporter', () => { const lines = body.split('\n'); assert.deepStrictEqual(lines, [ - '# HELP sum_observer a test description', - '# TYPE sum_observer gauge', - `sum_observer{key1="labelValue1"} 20 ${mockedHrTimeMs}`, + '# HELP metric_observable_counter a test description', + '# TYPE metric_observable_counter gauge', + `metric_observable_counter{key1="labelValue1"} 20 ${mockedHrTimeMs}`, '', ]); }); @@ -512,13 +512,13 @@ describe('PrometheusExporter', () => { }); }); - it('should export a ObservableUpDownCounter as a gauge', done => { + it('should export an ObservableUpDownCounter as a gauge', done => { function getValue() { return 20; } meter.createObservableUpDownCounter( - 'updown_observer', + 'metric_observable_up_down_counter', { description: 'a test description', }, @@ -538,9 +538,9 @@ describe('PrometheusExporter', () => { const lines = body.split('\n'); assert.deepStrictEqual(lines, [ - '# HELP updown_observer a test description', - '# TYPE updown_observer gauge', - `updown_observer{key1="labelValue1"} 20 ${mockedHrTimeMs}`, + '# HELP metric_observable_up_down_counter a test description', + '# TYPE metric_observable_up_down_counter gauge', + `metric_observable_up_down_counter{key1="labelValue1"} 20 ${mockedHrTimeMs}`, '', ]); }); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts b/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts index e8947433988..6b2d17ff008 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts @@ -914,7 +914,7 @@ describe('Meter', () => { }); describe('#ObservableGauge', () => { - it('should create a observable gauge', () => { + it('should create an observable gauge', () => { const observableGauge = meter.createObservableGauge( 'name' ) as ObservableGaugeMetric; From 621d0ab39077a299edfc88bf32cbd05e1fa9fb2a Mon Sep 17 00:00:00 2001 From: legendecas Date: Thu, 14 Oct 2021 10:42:19 +0800 Subject: [PATCH 6/8] fixup! observable naming --- examples/metrics/metrics/observer.js | 20 ++--- .../src/NoopMeter.ts | 70 ++++++++--------- .../opentelemetry-api-metrics/src/index.ts | 2 +- .../src/types/BatchObserverResult.ts | 3 +- .../src/types/BoundInstrument.ts | 2 +- .../src/types/Meter.ts | 60 +++++++-------- .../src/types/Metric.ts | 20 ++--- ...{ObserverResult.ts => ObservableResult.ts} | 2 +- .../src/types/Observation.ts | 4 +- .../test/OTLPMetricExporter.test.ts | 6 +- .../test/helper.ts | 4 +- .../browser/CollectorMetricExporter.test.ts | 10 +-- .../common/CollectorMetricExporter.test.ts | 6 +- .../test/common/transformMetrics.test.ts | 30 ++++---- .../test/helper.ts | 12 +-- .../test/node/CollectorMetricExporter.test.ts | 10 +-- .../test/OTLPMetricExporter.test.ts | 12 +-- .../test/helper.ts | 4 +- .../test/PrometheusExporter.test.ts | 14 ++-- .../test/PrometheusSerializer.test.ts | 24 +++--- .../opentelemetry-sdk-metrics-base/README.md | 40 +++++----- .../src/BatchObserver.ts | 16 ++-- .../src/BatchObserverResult.ts | 4 +- .../src/BoundInstrument.ts | 2 +- .../src/Meter.ts | 8 +- ...vableMetric.ts => ObservableBaseMetric.ts} | 24 +++--- .../src/ObservableCounterMetric.ts | 12 +-- .../src/ObservableGaugeMetric.ts | 6 +- ...{ObserverResult.ts => ObservableResult.ts} | 6 +- .../src/ObservableUpDownCounterMetric.ts | 6 +- .../test/Meter.test.ts | 76 +++++++++---------- 31 files changed, 257 insertions(+), 258 deletions(-) rename experimental/packages/opentelemetry-api-metrics/src/types/{ObserverResult.ts => ObservableResult.ts} (95%) rename experimental/packages/opentelemetry-sdk-metrics-base/src/{BaseObservableMetric.ts => ObservableBaseMetric.ts} (75%) rename experimental/packages/opentelemetry-sdk-metrics-base/src/{ObserverResult.ts => ObservableResult.ts} (83%) diff --git a/examples/metrics/metrics/observer.js b/examples/metrics/metrics/observer.js index 1c41e0c6dc2..a31345f2a50 100644 --- a/examples/metrics/metrics/observer.js +++ b/examples/metrics/metrics/observer.js @@ -21,29 +21,29 @@ const exporter = new PrometheusExporter( const meter = new MeterProvider({ exporter, interval: 2000, -}).getMeter('example-observer'); +}).getMeter('example-meter'); meter.createObservableGauge('cpu_core_usage', { - description: 'Example of a sync value observer with callback', -}, async (observerResult) => { // this callback is called once per each interval + description: 'Example of a sync observable gauge with callback', +}, async (observableResult) => { // this callback is called once per each interval await new Promise((resolve) => { setTimeout(()=> {resolve()}, 50); }); - observerResult.observe(getRandomValue(), { core: '1' }); - observerResult.observe(getRandomValue(), { core: '2' }); + observableResult.observe(getRandomValue(), { core: '1' }); + observableResult.observe(getRandomValue(), { core: '2' }); }); // no callback as they will be updated in batch observer const tempMetric = meter.createObservableGauge('cpu_temp_per_app', { - description: 'Example of sync value observer used with async batch observer', + description: 'Example of sync observable gauge used with async batch observer', }); // no callback as they will be updated in batch observer const cpuUsageMetric = meter.createObservableGauge('cpu_usage_per_app', { - description: 'Example of sync value observer used with async batch observer', + description: 'Example of sync observable gauge used with async batch observer', }); -meter.createBatchObserver((observerBatchResult) => { +meter.createBatchObserver((batchObserverResult) => { Promise.all([ someAsyncMetrics(), // simulate waiting @@ -52,11 +52,11 @@ meter.createBatchObserver((observerBatchResult) => { }), ]).then(([apps, waiting]) => { apps.forEach(app => { - observerBatchResult.observe({ app: app.name, core: '1' }, [ + batchObserverResult.observe({ app: app.name, core: '1' }, [ tempMetric.observation(app.core1.temp), cpuUsageMetric.observation(app.core1.usage), ]); - observerBatchResult.observe({ app: app.name, core: '2' }, [ + batchObserverResult.observe({ app: app.name, core: '2' }, [ tempMetric.observation(app.core2.temp), cpuUsageMetric.observation(app.core2.usage), ]); diff --git a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts index 06388f8b36b..873fc4a25a5 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts @@ -24,16 +24,16 @@ import { Histogram, ObservableGauge, UpDownCounter, - BaseObservable, + ObservableBase, ObservableCounter, ObservableUpDownCounter, } from './types/Metric'; import { BoundHistogram, BoundCounter, - BoundBaseObservable, + BoundObservableBase, } from './types/BoundInstrument'; -import { ObserverResult } from './types/ObserverResult'; +import { ObservableResult } from './types/ObservableResult'; import { Observation } from './types/Observation'; /** @@ -44,35 +44,30 @@ export class NoopMeter implements Meter { constructor() {} /** - * Returns a constant noop counter. + * Returns a constant noop histogram. * @param name the name of the metric. * @param [options] the metric options. */ - createCounter(_name: string, _options?: MetricOptions): Counter { - return NOOP_COUNTER_METRIC; + createHistogram(_name: string, _options?: MetricOptions): Histogram { + return NOOP_HISTOGRAM_METRIC; } /** - * Returns a constant noop observable counter. + * Returns a constant noop counter. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the observable counter callback */ - createObservableCounter( - _name: string, - _options?: MetricOptions, - _callback?: (observerResult: ObserverResult) => void - ): ObservableCounter { - return NOOP_OBSERVABLE_COUNTER_METRIC; + createCounter(_name: string, _options?: MetricOptions): Counter { + return NOOP_COUNTER_METRIC; } /** - * Returns a constant noop histogram. + * Returns a constant noop UpDownCounter. * @param name the name of the metric. * @param [options] the metric options. */ - createHistogram(_name: string, _options?: MetricOptions): Histogram { - return NOOP_HISTOGRAM_METRIC; + createUpDownCounter(_name: string, _options?: MetricOptions): UpDownCounter { + return NOOP_COUNTER_METRIC; } /** @@ -81,21 +76,26 @@ export class NoopMeter implements Meter { * @param [options] the metric options. * @param [callback] the observable gauge callback */ - createObservableGauge( + createObservableGauge( _name: string, _options?: MetricOptions, - _callback?: (observerResult: ObserverResult) => void + _callback?: (observableResult: ObservableResult) => void ): ObservableGauge { return NOOP_OBSERVABLE_GAUGE_METRIC; } /** - * Returns a constant noop UpDownCounter. + * Returns a constant noop observable counter. * @param name the name of the metric. * @param [options] the metric options. + * @param [callback] the observable counter callback */ - createUpDownCounter(_name: string, _options?: MetricOptions): UpDownCounter { - return NOOP_COUNTER_METRIC; + createObservableCounter( + _name: string, + _options?: MetricOptions, + _callback?: (observableResult: ObservableResult) => void + ): ObservableCounter { + return NOOP_OBSERVABLE_COUNTER_METRIC; } /** @@ -107,7 +107,7 @@ export class NoopMeter implements Meter { createObservableUpDownCounter( _name: string, _options?: MetricOptions, - _callback?: (observerResult: ObserverResult) => void + _callback?: (observableResult: ObservableResult) => void ): ObservableUpDownCounter { return NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC; } @@ -174,12 +174,12 @@ export class NoopHistogramMetric } } -export class NoopBaseObservableMetric - extends NoopMetric - implements BaseObservable { +export class NoopObservableBaseMetric + extends NoopMetric + implements ObservableBase { observation(): Observation { return { - observer: this as BaseObservable, + observable: this as ObservableBase, value: 0, }; } @@ -199,7 +199,7 @@ export class NoopBoundHistogram implements BoundHistogram { } } -export class NoopBoundBaseObservable implements BoundBaseObservable { +export class NoopBoundObservableBase implements BoundObservableBase { update(_value: number): void {} } @@ -212,17 +212,17 @@ export const NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric( NOOP_BOUND_HISTOGRAM ); -export const NOOP_BOUND_BASE_OBSERVABLE = new NoopBoundBaseObservable(); -export const NOOP_OBSERVABLE_GAUGE_METRIC = new NoopBaseObservableMetric( - NOOP_BOUND_BASE_OBSERVABLE +export const NOOP_BOUND_OBSERVABLE_BASE = new NoopBoundObservableBase(); +export const NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableBaseMetric( + NOOP_BOUND_OBSERVABLE_BASE ); -export const NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopBaseObservableMetric( - NOOP_BOUND_BASE_OBSERVABLE +export const NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopObservableBaseMetric( + NOOP_BOUND_OBSERVABLE_BASE ); -export const NOOP_OBSERVABLE_COUNTER_METRIC = new NoopBaseObservableMetric( - NOOP_BOUND_BASE_OBSERVABLE +export const NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableBaseMetric( + NOOP_BOUND_OBSERVABLE_BASE ); export const NOOP_BATCH_OBSERVER = new NoopBatchObserver(); diff --git a/experimental/packages/opentelemetry-api-metrics/src/index.ts b/experimental/packages/opentelemetry-api-metrics/src/index.ts index de39eb08215..2a7a0dd2551 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/index.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/index.ts @@ -22,7 +22,7 @@ export * from './types/Meter'; export * from './types/MeterProvider'; export * from './types/Metric'; export * from './types/Observation'; -export * from './types/ObserverResult'; +export * from './types/ObservableResult'; import { MetricsAPI } from './api/metrics'; /** Entrypoint for metrics API */ diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/BatchObserverResult.ts b/experimental/packages/opentelemetry-api-metrics/src/types/BatchObserverResult.ts index bae99eb8664..971156a774c 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/BatchObserverResult.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/BatchObserverResult.ts @@ -18,8 +18,7 @@ import { Labels } from './Metric'; import { Observation } from './Observation'; /** - * Interface that is being used in callback function for Observer Metric - * for batch + * Interface that is being used in callback function for BatchObserver */ export interface BatchObserverResult { /** diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts b/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts index 39351ee53ed..378c9349884 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/BoundInstrument.ts @@ -33,6 +33,6 @@ export interface BoundHistogram { } /** An Instrument for Base Observable */ -export interface BoundBaseObservable { +export interface BoundObservableBase { update(value: number): void; } diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts index c16dd329578..a9a2ded0055 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts @@ -25,7 +25,7 @@ import { ObservableCounter, ObservableUpDownCounter, } from './Metric'; -import { ObserverResult } from './ObserverResult'; +import { ObservableResult } from './ObservableResult'; /** * An interface to allow the recording metrics. @@ -36,32 +36,39 @@ import { ObserverResult } from './ObserverResult'; */ export interface Meter { /** - * Creates a new `Counter` metric. Generally, this kind of metric when the - * value is a quantity, the sum is of primary interest, and the event count - * and value distribution are not of primary interest. + * Creates and returns a new `Histogram`. * @param name the name of the metric. * @param [options] the metric options. */ - createCounter(name: string, options?: MetricOptions): Counter; + createHistogram(name: string, options?: MetricOptions): Histogram; /** - * Creates a new `ObservableCounter` metric. + * Creates a new `Counter` metric. Generally, this kind of metric when the + * value is a quantity, the sum is of primary interest, and the event count + * and value distribution are not of primary interest. * @param name the name of the metric. * @param [options] the metric options. - * @param [callback] the observable callback */ - createObservableCounter( - name: string, - options?: MetricOptions, - callback?: (observerResult: ObserverResult) => void - ): ObservableCounter; + createCounter(name: string, options?: MetricOptions): Counter; /** - * Creates and returns a new `Histogram`. + * Creates a new `UpDownCounter` metric. UpDownCounter is a synchronous + * instrument and very similar to Counter except that Add(increment) + * supports negative increments. It is generally useful for capturing changes + * in an amount of resources used, or any quantity that rises and falls + * during a request. + * Example uses for UpDownCounter: + *
    + *
  1. count the number of active requests.
  2. + *
  3. count memory in use by instrumenting new and delete.
  4. + *
  5. count queue size by instrumenting enqueue and dequeue.
  6. + *
  7. count semaphore up and down operations.
  8. + *
+ * * @param name the name of the metric. * @param [options] the metric options. */ - createHistogram(name: string, options?: MetricOptions): Histogram; + createUpDownCounter(name: string, options?: MetricOptions): UpDownCounter; /** * Creates a new `ObservableGauge` metric. @@ -72,27 +79,20 @@ export interface Meter { createObservableGauge( name: string, options?: MetricOptions, - callback?: (observerResult: ObserverResult) => void + callback?: (observableResult: ObservableResult) => void ): ObservableGauge; /** - * Creates a new `UpDownCounter` metric. UpDownCounter is a synchronous - * instrument and very similar to Counter except that Add(increment) - * supports negative increments. It is generally useful for capturing changes - * in an amount of resources used, or any quantity that rises and falls - * during a request. - * Example uses for UpDownCounter: - *
    - *
  1. count the number of active requests.
  2. - *
  3. count memory in use by instrumenting new and delete.
  4. - *
  5. count queue size by instrumenting enqueue and dequeue.
  6. - *
  7. count semaphore up and down operations.
  8. - *
- * + * Creates a new `ObservableCounter` metric. * @param name the name of the metric. * @param [options] the metric options. + * @param [callback] the observable callback */ - createUpDownCounter(name: string, options?: MetricOptions): UpDownCounter; + createObservableCounter( + name: string, + options?: MetricOptions, + callback?: (observableResult: ObservableResult) => void + ): ObservableCounter; /** * Creates a new `ObservableUpDownCounter` metric. @@ -103,7 +103,7 @@ export interface Meter { createObservableUpDownCounter( name: string, options?: MetricOptions, - callback?: (observerResult: ObserverResult) => void + callback?: (observableResult: ObservableResult) => void ): ObservableUpDownCounter; /** diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts index 42f3471ea2c..55b51218f85 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Metric.ts @@ -15,10 +15,13 @@ */ import { - BoundBaseObservable, + BoundObservableBase, BoundCounter, BoundHistogram, } from './BoundInstrument'; +import { + Observation, +} from './Observation'; /** * Options needed for metric creation @@ -153,24 +156,21 @@ export interface Histogram extends UnboundMetric { record(value: number, labels?: Labels): void; } -/** Base interface for the Observer metrics. */ -export interface BaseObservable extends UnboundMetric { +/** Base interface for the Observable metrics. */ +export interface ObservableBase extends UnboundMetric { observation: ( value: number - ) => { - value: number; - observer: BaseObservable; - }; + ) => Observation; } /** Base interface for the ObservableGauge metrics. */ -export type ObservableGauge = BaseObservable; +export type ObservableGauge = ObservableBase; /** Base interface for the ObservableUpDownCounter metrics. */ -export type ObservableUpDownCounter = BaseObservable; +export type ObservableUpDownCounter = ObservableBase; /** Base interface for the ObservableCounter metrics. */ -export type ObservableCounter = BaseObservable; +export type ObservableCounter = ObservableBase; /** * key-value pairs passed by the user. diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/ObserverResult.ts b/experimental/packages/opentelemetry-api-metrics/src/types/ObservableResult.ts similarity index 95% rename from experimental/packages/opentelemetry-api-metrics/src/types/ObserverResult.ts rename to experimental/packages/opentelemetry-api-metrics/src/types/ObservableResult.ts index 6e287c5b39e..c909833ab9c 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/ObserverResult.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/ObservableResult.ts @@ -19,6 +19,6 @@ import { Labels } from './Metric'; /** * Interface that is being used in callback function for Observable Metric */ -export interface ObserverResult { +export interface ObservableResult { observe(value: number, labels: Labels): void; } diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts index e535897f0b0..1e805f3689f 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Observation.ts @@ -14,12 +14,12 @@ * limitations under the License. */ -import { BaseObservable } from './Metric'; +import { ObservableBase } from './Metric'; /** * Interface for updating value of certain observable */ export interface Observation { - observer: BaseObservable; + observable: ObservableBase; value: number; } diff --git a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts index 8395e882959..83d8723d4f9 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/OTLPMetricExporter.test.ts @@ -141,9 +141,9 @@ const testOTLPMetricExporter = (params: TestParams) => const counter: metrics.Metric & Counter = mockCounter(); const observableGauge: metrics.Metric & - ObservableGauge = mockObservableGauge(observerResult => { - observerResult.observe(3, {}); - observerResult.observe(6, {}); + ObservableGauge = mockObservableGauge(observableResult => { + observableResult.observe(3, {}); + observableResult.observe(6, {}); }); const histogram: metrics.Metric & Histogram = mockHistogram(); diff --git a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts index 94d8d34f07b..48325a12d4f 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-grpc/test/helper.ts @@ -17,7 +17,7 @@ import { SpanStatusCode, TraceFlags } from '@opentelemetry/api'; import { Counter, - ObserverResult, + ObservableResult, ObservableGauge, Histogram, ValueType, @@ -76,7 +76,7 @@ export function mockCounter(): metrics.Metric & Counter { } export function mockObservableGauge( - callback: (observerResult: ObserverResult) => void + callback: (observableResult: ObservableResult) => void ): metrics.Metric & ObservableGauge { const name = 'double-observable-gauge'; const metric = diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts index 87fe174cd57..a2d289a7fe9 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/browser/CollectorMetricExporter.test.ts @@ -57,10 +57,10 @@ describe('OTLPMetricExporter - web', () => { stubBeacon = sinon.stub(navigator, 'sendBeacon'); metrics = []; const counter: Metric & Counter = mockCounter(); - const observerGauge: Metric & ObservableGauge = mockObservableGauge( - observerResult => { - observerResult.observe(3, {}); - observerResult.observe(6, {}); + const observableGauge: Metric & ObservableGauge = mockObservableGauge( + observableResult => { + observableResult.observe(3, {}); + observableResult.observe(6, {}); }, 'double-observable-gauge2' ); @@ -71,7 +71,7 @@ describe('OTLPMetricExporter - web', () => { histogram.record(14); metrics.push((await counter.getMetricRecord())[0]); - metrics.push((await observerGauge.getMetricRecord())[0]); + metrics.push((await observableGauge.getMetricRecord())[0]); metrics.push((await histogram.getMetricRecord())[0]); }); diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts index 0068d9c4884..7282f538c0e 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/CollectorMetricExporter.test.ts @@ -71,9 +71,9 @@ describe('OTLPMetricExporter - common', () => { metrics = []; const counter: Metric & Counter = mockCounter(); const observableGauge: Metric & ObservableGauge = mockObservableGauge( - observerResult => { - observerResult.observe(3, {}); - observerResult.observe(6, {}); + observableResult => { + observableResult.observe(3, {}); + observableResult.observe(6, {}); }, 'double-observable-gauge3' ); diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts index 6fef0695ce2..71ce5ab274e 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/common/transformMetrics.test.ts @@ -72,19 +72,19 @@ describe('transformMetrics', () => { return -1; } - observableGauge = mockObservableGauge(observerResult => { + observableGauge = mockObservableGauge(observableResult => { count1++; - observerResult.observe(getValue(count1), {}); + observableResult.observe(getValue(count1), {}); }); - observableCounter = mockObservableCounter(observerResult => { + observableCounter = mockObservableCounter(observableResult => { count2++; - observerResult.observe(getValue(count2), {}); + observableResult.observe(getValue(count2), {}); }); - observableUpDownCounter = mockObservableUpDownCounter(observerResult => { + observableUpDownCounter = mockObservableUpDownCounter(observableResult => { count3++; - observerResult.observe(getValue(count3), {}); + observableResult.observe(getValue(count3), {}); }); histogram = mockHistogram(); @@ -115,10 +115,10 @@ describe('transformMetrics', () => { await observableGauge.getMetricRecord(); await observableGauge.getMetricRecord(); - const observerMetric = (await observableGauge.getMetricRecord())[0]; + const observableGaugeMetric = (await observableGauge.getMetricRecord())[0]; ensureObservableGaugeIsCorrect( - transform.toCollectorMetric(observerMetric, 1592602232694000000), - hrTimeToNanoseconds(observerMetric.aggregator.toPoint().timestamp), + transform.toCollectorMetric(observableGaugeMetric, 1592602232694000000), + hrTimeToNanoseconds(observableGaugeMetric.aggregator.toPoint().timestamp), -1 ); @@ -186,8 +186,8 @@ describe('transformMetrics', () => { const [resource1, resource2] = mockedResources; const [library] = mockedInstrumentationLibraries; const [metric1, metric2, metric3] = multiResourceMetricsGet( - observerResult => { - observerResult.observe(1, {}); + observableResult => { + observableResult.observe(1, {}); } ); @@ -197,8 +197,8 @@ describe('transformMetrics', () => { ]); const result = transform.groupMetricsByResourceAndLibrary( - multiResourceMetricsGet(observerResult => { - observerResult.observe(1, {}); + multiResourceMetricsGet(observableResult => { + observableResult.observe(1, {}); }) ); @@ -212,7 +212,7 @@ describe('transformMetrics', () => { metric1, metric2, metric3, - ] = multiInstrumentationLibraryMetricsGet(observerResult => {}); + ] = multiInstrumentationLibraryMetricsGet(observableResult => {}); const expected = new Map([ [ resource, @@ -224,7 +224,7 @@ describe('transformMetrics', () => { ]); const result = transform.groupMetricsByResourceAndLibrary( - multiInstrumentationLibraryMetricsGet(observerResult => {}) + multiInstrumentationLibraryMetricsGet(observableResult => {}) ); assert.deepStrictEqual(result, expected); diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts index a0584cdbef7..5befa3515f7 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/helper.ts @@ -17,7 +17,7 @@ import { SpanStatusCode, TraceFlags } from '@opentelemetry/api'; import { Counter, - ObserverResult, + ObservableResult, ObservableCounter, ObservableUpDownCounter, ObservableGauge, @@ -79,7 +79,7 @@ export function mockDoubleCounter(): metrics.Metric & } export function mockObservableGauge( - callback: (observerResult: ObserverResult) => unknown, + callback: (observableResult: ObservableResult) => unknown, name = 'double-observable-gauge' ): metrics.Metric & ObservableGauge { const metric = @@ -98,7 +98,7 @@ export function mockObservableGauge( } export function mockObservableCounter( - callback: (observerResult: ObserverResult) => unknown, + callback: (observableResult: ObservableResult) => unknown, name = 'double-observable-counter' ): metrics.Metric & ObservableCounter { const metric = @@ -117,7 +117,7 @@ export function mockObservableCounter( } export function mockObservableUpDownCounter( - callback: (observerResult: ObserverResult) => unknown, + callback: (observableResult: ObservableResult) => unknown, name = 'double-up-down-observable-counter' ): metrics.Metric & ObservableUpDownCounter { const metric = @@ -313,7 +313,7 @@ export const multiResourceTrace: ReadableSpan[] = [ ]; export const multiResourceMetricsGet = function ( - callback: (observerResult: ObserverResult) => unknown + callback: (observableResult: ObservableResult) => unknown ): any[] { return [ { @@ -335,7 +335,7 @@ export const multiResourceMetricsGet = function ( }; export const multiInstrumentationLibraryMetricsGet = function ( - callback: (observerResult: ObserverResult) => unknown + callback: (observableResult: ObservableResult) => unknown ): any[] { return [ { diff --git a/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts index 201475e1c02..11308aeef2d 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-http/test/node/CollectorMetricExporter.test.ts @@ -149,9 +149,9 @@ describe('OTLPMetricExporter - node with json over http', () => { }); metrics = []; const counter: Metric & Counter = mockCounter(); - const observerGauge: Metric & ObservableGauge = mockObservableGauge( - observerResult => { - observerResult.observe(6, {}); + const observableGauge: Metric & ObservableGauge = mockObservableGauge( + observableResult => { + observableResult.observe(6, {}); }, 'double-observable-gauge2' ); @@ -162,7 +162,7 @@ describe('OTLPMetricExporter - node with json over http', () => { histogram.record(14); metrics.push((await counter.getMetricRecord())[0]); - metrics.push((await observerGauge.getMetricRecord())[0]); + metrics.push((await observableGauge.getMetricRecord())[0]); metrics.push((await histogram.getMetricRecord())[0]); }); @@ -224,7 +224,7 @@ describe('OTLPMetricExporter - node with json over http', () => { metric1, core.hrTimeToNanoseconds(metrics[0].aggregator.toPoint().timestamp) ); - assert.ok(typeof metric2 !== 'undefined', "observer doesn't exist"); + assert.ok(typeof metric2 !== 'undefined', "observable gauge doesn't exist"); ensureObservableGaugeIsCorrect( metric2, core.hrTimeToNanoseconds(metrics[1].aggregator.toPoint().timestamp), diff --git a/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts index c4697aeaf3a..b623d2d8191 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-proto/test/OTLPMetricExporter.test.ts @@ -121,10 +121,10 @@ describe('OTLPMetricExporter - node with proto over http', () => { metrics = []; const counter: metrics.Metric & Counter = mockCounter(); - const observer: metrics.Metric & - ObservableGauge = mockObservableGauge(observerResult => { - observerResult.observe(3, {}); - observerResult.observe(6, {}); + const observableGauge: metrics.Metric & + ObservableGauge = mockObservableGauge(observableResult => { + observableResult.observe(3, {}); + observableResult.observe(6, {}); }); const histogram: metrics.Metric & Histogram = mockHistogram(); @@ -134,7 +134,7 @@ describe('OTLPMetricExporter - node with proto over http', () => { histogram.record(14); metrics.push((await counter.getMetricRecord())[0]); - metrics.push((await observer.getMetricRecord())[0]); + metrics.push((await observableGauge.getMetricRecord())[0]); metrics.push((await histogram.getMetricRecord())[0]); }); afterEach(() => { @@ -197,7 +197,7 @@ describe('OTLPMetricExporter - node with proto over http', () => { metric1, metric1.intSum?.dataPoints[0].timeUnixNano ); - assert.ok(typeof metric2 !== 'undefined', "observer doesn't exist"); + assert.ok(typeof metric2 !== 'undefined', "observable gauge doesn't exist"); ensureExportedObservableGaugeIsCorrect( metric2, metric2.doubleGauge?.dataPoints[0].timeUnixNano diff --git a/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts b/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts index 5803d59575b..f76b8619b07 100644 --- a/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts +++ b/experimental/packages/opentelemetry-exporter-otlp-proto/test/helper.ts @@ -17,7 +17,7 @@ import { SpanStatusCode, TraceFlags } from '@opentelemetry/api'; import { Counter, - ObserverResult, + ObservableResult, ObservableGauge, Histogram, ValueType, @@ -55,7 +55,7 @@ export function mockCounter(): metrics.Metric & Counter { } export function mockObservableGauge( - callback: (observerResult: ObserverResult) => void + callback: (observableResult: ObservableResult) => void ): metrics.Metric & ObservableGauge { const name = 'double-observable-gauge'; const metric = diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts index 7b7ec1645ef..3b5f044be3c 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { ObserverResult } from '@opentelemetry/api-metrics'; +import { ObservableResult } from '@opentelemetry/api-metrics'; import { CounterMetric, SumAggregator, @@ -280,8 +280,8 @@ describe('PrometheusExporter', () => { { description: 'a test description', }, - (observerResult: ObserverResult) => { - observerResult.observe(getCpuUsage(), { + (observableResult: ObservableResult) => { + observableResult.observe(getCpuUsage(), { pid: String(123), core: '1', }); @@ -482,8 +482,8 @@ describe('PrometheusExporter', () => { { description: 'a test description', }, - (observerResult: ObserverResult) => { - observerResult.observe(getValue(), { + (observableResult: ObservableResult) => { + observableResult.observe(getValue(), { key1: 'labelValue1', }); } @@ -522,8 +522,8 @@ describe('PrometheusExporter', () => { { description: 'a test description', }, - (observerResult: ObserverResult) => { - observerResult.observe(getValue(), { + (observableResult: ObservableResult) => { + observableResult.observe(getValue(), { key1: 'labelValue1', }); } diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts index 9f343f9a8a7..7c3582f07bd 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts @@ -99,15 +99,15 @@ describe('PrometheusSerializer', () => { const meter = new MeterProvider({ processor: new ExactProcessor(LastValueAggregator), }).getMeter('test'); - const observer = meter.createObservableGauge( + const observableGauge = meter.createObservableGauge( 'test', {}, - observerResult => { - observerResult.observe(1, labels); + observableResult => { + observableResult.observe(1, labels); } ) as ObservableGaugeMetric; await meter.collect(); - const records = await observer.getMetricRecord(); + const records = await observableGauge.getMetricRecord(); const record = records[0]; const result = serializer.serializeRecord( @@ -126,15 +126,15 @@ describe('PrometheusSerializer', () => { const meter = new MeterProvider({ processor: new ExactProcessor(LastValueAggregator), }).getMeter('test'); - const observer = meter.createObservableGauge( + const observableGauge = meter.createObservableGauge( 'test', {}, - observerResult => { - observerResult.observe(1, labels); + observableResult => { + observableResult.observe(1, labels); } ) as ObservableGaugeMetric; await meter.collect(); - const records = await observer.getMetricRecord(); + const records = await observableGauge.getMetricRecord(); const record = records[0]; const result = serializer.serializeRecord( @@ -304,17 +304,17 @@ describe('PrometheusSerializer', () => { processor: new ExactProcessor(LastValueAggregator), }).getMeter('test'); const processor = new PrometheusLabelsBatcher(); - const observer = meter.createObservableGauge( + const observableGauge = meter.createObservableGauge( 'test', { description: 'foobar', }, - observerResult => { - observerResult.observe(1, labels); + observableResult => { + observableResult.observe(1, labels); } ) as ObservableGaugeMetric; await meter.collect(); - const records = await observer.getMetricRecord(); + const records = await observableGauge.getMetricRecord(); records.forEach(it => processor.process(it)); const checkPointSet = processor.checkPointSet(); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/README.md b/experimental/packages/opentelemetry-sdk-metrics-base/README.md index 722e66beb2a..b760ecc3369 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/README.md +++ b/experimental/packages/opentelemetry-sdk-metrics-base/README.md @@ -86,10 +86,10 @@ const meter = new MeterProvider().getMeter('your-meter-name'); // async callback - for operation that needs to wait for value meter.createObservableGauge('your_metric_name', { - description: 'Example of an async observer with callback', -}, async (observerResult) => { + description: 'Example of an async observable gauge with callback', +}, async (observableResult) => { const value = await getAsyncValue(); - observerResult.observe(value, { label: '1' }); + observableResult.observe(value, { label: '1' }); }); function getAsyncValue() { @@ -102,10 +102,10 @@ function getAsyncValue() { // sync callback in case you don't need to wait for value meter.createObservableGauge('your_metric_name', { - description: 'Example of a sync observer with callback', -}, (observerResult) => { - observerResult.observe(getRandomValue(), { label: '1' }); - observerResult.observe(getRandomValue(), { label: '2' }); + description: 'Example of a sync observable gauge with callback', +}, (observableResult) => { + observableResult.observe(getRandomValue(), { label: '1' }); + observableResult.observe(getRandomValue(), { label: '2' }); }); function getRandomValue() { @@ -125,10 +125,10 @@ const meter = new MeterProvider().getMeter('your-meter-name'); // async callback - for operation that needs to wait for value meter.createObservableUpDownCounter('your_metric_name', { - description: 'Example of an async observer with callback', -}, async (observerResult) => { + description: 'Example of an async observable up down counter with callback', +}, async (observableResult) => { const value = await getAsyncValue(); - observerResult.observe(value, { label: '1' }); + observableResult.observe(value, { label: '1' }); }); function getAsyncValue() { @@ -141,9 +141,9 @@ function getAsyncValue() { // sync callback in case you don't need to wait for value meter.createObservableUpDownCounter('your_metric_name', { - description: 'Example of a sync observer with callback', -}, (observerResult) => { - observerResult.observe(getRandomValue(), { label: '1' }); + description: 'Example of a sync observable up down counter with callback', +}, (observableResult) => { + observableResult.observe(getRandomValue(), { label: '1' }); }); function getRandomValue() { @@ -165,9 +165,9 @@ const meter = new MeterProvider().getMeter('your-meter-name'); // async callback in case you need to wait for values meter.createObservableCounter('example_metric', { description: 'Example of an async observable counter with callback', -}, async (observerResult) => { +}, async (observableResult) => { const value = await getAsyncValue(); - observerResult.observe(value, { label: '1' }); + observableResult.observe(value, { label: '1' }); }); function getAsyncValue() { @@ -181,9 +181,9 @@ function getAsyncValue() { // sync callback in case you don't need to wait for values meter.createObservableCounter('example_metric', { description: 'Example of a sync observable counter with callback', -}, (observerResult) => { +}, (observableResult) => { const value = getRandomValue(); - observerResult.observe(value, { label: '1' }); + observableResult.observe(value, { label: '1' }); }); function getRandomValue() { @@ -193,7 +193,7 @@ function getRandomValue() { ### Batch Observer -Choose this kind of metric when you need to update multiple observers with the results of a single async calculation. +Choose this kind of metric when you need to update multiple observables with the results of a single async calculation. ```js const { MeterProvider } = require('@opentelemetry/sdk-metrics-base'); @@ -221,9 +221,9 @@ const MemUsageMetric = meter.createObservableGauge('mem_usage_per_app', { description: 'Memory', }); -meter.createBatchObserver((observerBatchResult) => { +meter.createBatchObserver((batchObserverResult) => { getSomeAsyncMetrics().then(metrics => { - observerBatchResult.observe({ app: 'myApp' }, [ + batchObserverResult.observe({ app: 'myApp' }, [ cpuUsageMetric.observation(metrics.value1), MemUsageMetric.observation(metrics.value2) ]); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/BatchObserver.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/BatchObserver.ts index 90c53844658..576102cb46c 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/BatchObserver.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/BatchObserver.ts @@ -23,12 +23,12 @@ const MAX_TIMEOUT_UPDATE_MS = 500; /** This is a SDK implementation of Batch Observer. */ export class BatchObserver { - private _callback: (observerResult: api.BatchObserverResult) => void; + private _callback: (observableResult: api.BatchObserverResult) => void; private _maxTimeoutUpdateMS: number; constructor( options: api.BatchObserverOptions, - callback?: (observerResult: api.BatchObserverResult) => void + callback?: (observableResult: api.BatchObserverResult) => void ) { this._maxTimeoutUpdateMS = options.maxTimeoutUpdateMS ?? MAX_TIMEOUT_UPDATE_MS; @@ -38,27 +38,27 @@ export class BatchObserver { collect(): Promise { diag.debug('getMetricRecord - start'); return new Promise(resolve => { - const observerResult = new BatchObserverResult(); + const batchObserverResult = new BatchObserverResult(); // cancels after MAX_TIMEOUT_MS - no more waiting for results const timer = setTimeout(() => { - observerResult.cancelled = true; + batchObserverResult.cancelled = true; // remove callback to prevent user from updating the values later if - // for any reason the observerBatchResult will be referenced - observerResult.onObserveCalled(); + // for any reason the batchObserverResult will be referenced + batchObserverResult.onObserveCalled(); resolve(); diag.debug('getMetricRecord - timeout'); }, this._maxTimeoutUpdateMS); // sets callback for each "observe" method - observerResult.onObserveCalled(() => { + batchObserverResult.onObserveCalled(() => { clearTimeout(timer); resolve(); diag.debug('getMetricRecord - end'); }); // calls the BatchObserverResult callback - this._callback(observerResult); + this._callback(batchObserverResult); }); } } diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/BatchObserverResult.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/BatchObserverResult.ts index 4e2c0c8b281..f882774ad0b 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/BatchObserverResult.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/BatchObserverResult.ts @@ -44,14 +44,14 @@ export class BatchObserverResult implements api.BatchObserverResult { return; } observations.forEach(observation => { - observation.observer.bind(labels).update(observation.value); + observation.observable.bind(labels).update(observation.value); }); if (!this._immediate) { this._immediate = setImmediate(() => { if (typeof this._callback === 'function') { this._callback(); // prevent user from updating the values later if for any reason - // the observerBatchResult will be referenced and then try to use + // the batchObserverResult will be referenced and then try to use this._callback = undefined; } }); diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts index 84e199cb224..67a66b204c9 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/BoundInstrument.ts @@ -139,7 +139,7 @@ export class BoundHistogram */ export class BoundObservable extends BaseBoundInstrument - implements api.BoundBaseObservable { + implements api.BoundObservableBase { constructor( labels: api.Labels, disabled: boolean, diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts index e9d18371169..0d49c9b88b8 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts @@ -169,7 +169,7 @@ export class Meter implements api.Meter { createObservableGauge( name: string, options: api.MetricOptions = {}, - callback?: (observerResult: api.ObserverResult) => unknown + callback?: (observableResult: api.ObservableResult) => unknown ): api.ObservableGauge { if (!this._isValidName(name)) { diag.warn( @@ -196,7 +196,7 @@ export class Meter implements api.Meter { createObservableCounter( name: string, options: api.MetricOptions = {}, - callback?: (observerResult: api.ObserverResult) => unknown + callback?: (observableResult: api.ObservableResult) => unknown ): api.ObservableCounter { if (!this._isValidName(name)) { diag.warn( @@ -229,7 +229,7 @@ export class Meter implements api.Meter { createObservableUpDownCounter( name: string, options: api.MetricOptions = {}, - callback?: (observerResult: api.ObserverResult) => unknown + callback?: (observableResult: api.ObservableResult) => unknown ): api.ObservableUpDownCounter { if (!this._isValidName(name)) { diag.warn( @@ -259,7 +259,7 @@ export class Meter implements api.Meter { * @param [options] the batch options. */ createBatchObserver( - callback: (observerResult: api.BatchObserverResult) => void, + callback: (observableResult: api.BatchObserverResult) => void, options: api.BatchObserverOptions = {} ): BatchObserver { const opt: api.BatchObserverOptions = { diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/BaseObservableMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableBaseMetric.ts similarity index 75% rename from experimental/packages/opentelemetry-sdk-metrics-base/src/BaseObservableMetric.ts rename to experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableBaseMetric.ts index becd7029cf4..60626680a57 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/BaseObservableMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableBaseMetric.ts @@ -21,18 +21,18 @@ import { BoundObservable } from './BoundInstrument'; import { Processor } from './export/Processor'; import { MetricKind, MetricRecord } from './export/types'; import { Metric } from './Metric'; -import { ObserverResult } from './ObserverResult'; +import { ObservableResult } from './ObservableResult'; const NOOP_CALLBACK = () => {}; /** * This is a SDK implementation of Base Observer Metric. - * All observers should extend this class + * All observables should extend this class */ -export abstract class BaseObservableMetric +export abstract class ObservableBaseMetric extends Metric - implements api.BaseObservable { - protected _callback: (observerResult: api.ObserverResult) => unknown; + implements api.ObservableBase { + protected _callback: (observableResult: api.ObservableResult) => unknown; constructor( name: string, @@ -41,7 +41,7 @@ export abstract class BaseObservableMetric resource: Resource, metricKind: MetricKind, instrumentationLibrary: InstrumentationLibrary, - callback?: (observerResult: api.ObserverResult) => unknown + callback?: (observableResult: api.ObservableResult) => unknown ) { super(name, options, metricKind, resource, instrumentationLibrary); this._callback = callback || NOOP_CALLBACK; @@ -57,16 +57,16 @@ export abstract class BaseObservableMetric } override async getMetricRecord(): Promise { - const observerResult = new ObserverResult(); - await this._callback(observerResult); + const observableResult = new ObservableResult(); + await this._callback(observableResult); - this._processResults(observerResult); + this._processResults(observableResult); return super.getMetricRecord(); } - protected _processResults(observerResult: ObserverResult): void { - observerResult.values.forEach((value, labels) => { + protected _processResults(observableResult: ObservableResult): void { + observableResult.values.forEach((value, labels) => { const instrument = this.bind(labels); instrument.update(value); }); @@ -75,7 +75,7 @@ export abstract class BaseObservableMetric observation(value: number): Observation { return { value, - observer: this as BaseObservableMetric, + observable: this as ObservableBaseMetric, }; } } diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableCounterMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableCounterMetric.ts index 5536780bfc5..5465f14eff8 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableCounterMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableCounterMetric.ts @@ -17,14 +17,14 @@ import * as api from '@opentelemetry/api-metrics'; import { InstrumentationLibrary } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; -import { BaseObservableMetric } from './BaseObservableMetric'; +import { ObservableBaseMetric } from './ObservableBaseMetric'; import { Processor } from './export/Processor'; import { LastValue, MetricKind } from './export/types'; -import { ObserverResult } from './ObserverResult'; +import { ObservableResult } from './ObservableResult'; /** This is a SDK implementation of ObservableCounter Metric. */ export class ObservableCounterMetric - extends BaseObservableMetric + extends ObservableBaseMetric implements api.ObservableCounter { constructor( name: string, @@ -32,7 +32,7 @@ export class ObservableCounterMetric processor: Processor, resource: Resource, instrumentationLibrary: InstrumentationLibrary, - callback?: (observerResult: api.ObserverResult) => unknown + callback?: (observableResult: api.ObservableResult) => unknown ) { super( name, @@ -45,8 +45,8 @@ export class ObservableCounterMetric ); } - protected override _processResults(observerResult: ObserverResult): void { - observerResult.values.forEach((value, labels) => { + protected override _processResults(observableResult: ObservableResult): void { + observableResult.values.forEach((value, labels) => { const instrument = this.bind(labels); // ObservableCounter is monotonic which means it should only accept values // greater or equal then previous value diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts index 3b7a9c3da39..2d59e78f952 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableGaugeMetric.ts @@ -16,13 +16,13 @@ import * as api from '@opentelemetry/api-metrics'; import { InstrumentationLibrary } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; -import { BaseObservableMetric } from './BaseObservableMetric'; +import { ObservableBaseMetric } from './ObservableBaseMetric'; import { Processor } from './export/Processor'; import { MetricKind } from './export/types'; /** This is a SDK implementation of ObservableGauge Metric. */ export class ObservableGaugeMetric - extends BaseObservableMetric + extends ObservableBaseMetric implements api.ObservableGauge { constructor( name: string, @@ -30,7 +30,7 @@ export class ObservableGaugeMetric processor: Processor, resource: Resource, instrumentationLibrary: InstrumentationLibrary, - callback?: (observerResult: api.ObserverResult) => unknown + callback?: (observableResult: api.ObservableResult) => unknown ) { super( name, diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/ObserverResult.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableResult.ts similarity index 83% rename from experimental/packages/opentelemetry-sdk-metrics-base/src/ObserverResult.ts rename to experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableResult.ts index 60dcc044493..51fc07899ec 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/ObserverResult.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableResult.ts @@ -15,14 +15,14 @@ */ import { - ObserverResult as TypeObserverResult, + ObservableResult as TypeObservableResult, Labels, } from '@opentelemetry/api-metrics'; /** - * Implementation of {@link TypeObserverResult} + * Implementation of {@link TypeObservableResult} */ -export class ObserverResult implements TypeObserverResult { +export class ObservableResult implements TypeObservableResult { values: Map = new Map(); observe(value: number, labels: Labels): void { diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableUpDownCounterMetric.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableUpDownCounterMetric.ts index e130f561a9a..d9a767044ab 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableUpDownCounterMetric.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/ObservableUpDownCounterMetric.ts @@ -17,13 +17,13 @@ import * as api from '@opentelemetry/api-metrics'; import { InstrumentationLibrary } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; -import { BaseObservableMetric } from './BaseObservableMetric'; +import { ObservableBaseMetric } from './ObservableBaseMetric'; import { Processor } from './export/Processor'; import { MetricKind } from './export/types'; /** This is a SDK implementation of ObservableUpDownCounter Metric. */ export class ObservableUpDownCounterMetric - extends BaseObservableMetric + extends ObservableBaseMetric implements api.ObservableUpDownCounter { constructor( name: string, @@ -31,7 +31,7 @@ export class ObservableUpDownCounterMetric processor: Processor, resource: Resource, instrumentationLibrary: InstrumentationLibrary, - callback?: (observerResult: api.ObserverResult) => unknown + callback?: (observableResult: api.ObservableResult) => unknown ) { super( name, diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts b/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts index 6b2d17ff008..fbb7af9cbcb 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/test/Meter.test.ts @@ -779,7 +779,7 @@ describe('Meter', () => { assert.ok(observableCounter instanceof Metric); }); - it('should return noop observer when name is invalid', () => { + it('should return noop observable counter when name is invalid', () => { // Need to stub/spy on the underlying logger as the "diag" instance is global const spy = sinon.stub(diag, 'warn'); const observableCounter = meter.createObservableCounter('na me'); @@ -791,7 +791,7 @@ describe('Meter', () => { ); }); - it('should create observer with options', () => { + it('should create observable counter with options', () => { const observableCounter = meter.createObservableCounter('name', { description: 'desc', unit: '1', @@ -816,11 +816,11 @@ describe('Meter', () => { { description: 'desc', }, - (observerResult: api.ObserverResult) => { + (observableResult: api.ObservableResult) => { // simulate async return new Promise(resolve => { setTimeout(() => { - observerResult.observe(getValue(), { pid: '123', core: '1' }); + observableResult.observe(getValue(), { pid: '123', core: '1' }); resolve(); }, 1); }); @@ -853,8 +853,8 @@ describe('Meter', () => { { description: 'desc', }, - (observerResult: api.ObserverResult) => { - observerResult.observe(1, { pid: '123', core: '1' }); + (observableResult: api.ObservableResult) => { + observableResult.observe(1, { pid: '123', core: '1' }); } ) as ObservableCounterMetric; @@ -871,8 +871,8 @@ describe('Meter', () => { { description: 'desc', }, - (observerResult: api.ObserverResult) => { - observerResult.observe(1, { pid: '123', core: '1' }); + (observableResult: api.ObservableResult) => { + observableResult.observe(1, { pid: '123', core: '1' }); return '1'; } ) as ObservableCounterMetric; @@ -888,8 +888,8 @@ describe('Meter', () => { { description: 'desc', }, - (observerResult: api.ObserverResult) => { - observerResult.observe(1, { pid: '123', core: '1' }); + (observableResult: api.ObservableResult) => { + observableResult.observe(1, { pid: '123', core: '1' }); throw new Error('Boom'); } ) as ObservableCounterMetric; @@ -921,7 +921,7 @@ describe('Meter', () => { assert.ok(observableGauge instanceof Metric); }); - it('should return noop observer when name is invalid', () => { + it('should return noop observable gauge when name is invalid', () => { // Need to stub/spy on the underlying logger as the "diag" instance is global const spy = sinon.stub(diag, 'warn'); const observableGauge = meter.createObservableGauge('na me'); @@ -933,7 +933,7 @@ describe('Meter', () => { ); }); - it('should create observer with options', () => { + it('should create observable gauge with options', () => { const observableGauge = meter.createObservableGauge('name', { description: 'desc', unit: '1', @@ -948,14 +948,14 @@ describe('Meter', () => { { description: 'desc', }, - (observerResult: api.ObserverResult) => { + (observableResult: api.ObservableResult) => { // simulate async return new Promise(resolve => { setTimeout(() => { - observerResult.observe(getCpuUsage(), { pid: '123', core: '1' }); - observerResult.observe(getCpuUsage(), { pid: '123', core: '2' }); - observerResult.observe(getCpuUsage(), { pid: '123', core: '3' }); - observerResult.observe(getCpuUsage(), { pid: '123', core: '4' }); + observableResult.observe(getCpuUsage(), { pid: '123', core: '1' }); + observableResult.observe(getCpuUsage(), { pid: '123', core: '2' }); + observableResult.observe(getCpuUsage(), { pid: '123', core: '3' }); + observableResult.observe(getCpuUsage(), { pid: '123', core: '4' }); resolve(); }, 1); }); @@ -1003,7 +1003,7 @@ describe('Meter', () => { assert.ok(observableUpDownCounter instanceof Metric); }); - it('should return noop observer when name is invalid', () => { + it('should return noop observable up down counter when name is invalid', () => { // Need to stub/spy on the underlying logger as the "diag" instance is global const spy = sinon.stub(diag, 'warn'); const observableUpDownCounter = meter.createObservableUpDownCounter('na me'); @@ -1015,7 +1015,7 @@ describe('Meter', () => { ); }); - it('should create observer with options', () => { + it('should create observable up down counter with options', () => { const observableUpDownCounter = meter.createObservableUpDownCounter('name', { description: 'desc', unit: '1', @@ -1040,11 +1040,11 @@ describe('Meter', () => { { description: 'desc', }, - (observerResult: api.ObserverResult) => { + (observableResult: api.ObservableResult) => { // simulate async return new Promise(resolve => { setTimeout(() => { - observerResult.observe(getValue(), { pid: '123', core: '1' }); + observableResult.observe(getValue(), { pid: '123', core: '1' }); resolve(); }, 1); }); @@ -1077,8 +1077,8 @@ describe('Meter', () => { { description: 'desc', }, - (observerResult: api.ObserverResult) => { - observerResult.observe(1, { pid: '123', core: '1' }); + (observableResult: api.ObservableResult) => { + observableResult.observe(1, { pid: '123', core: '1' }); } ) as ObservableUpDownCounterMetric; @@ -1095,8 +1095,8 @@ describe('Meter', () => { { description: 'desc', }, - (observerResult: api.ObserverResult) => { - observerResult.observe(1, { pid: '123', core: '1' }); + (observableResult: api.ObservableResult) => { + observableResult.observe(1, { pid: '123', core: '1' }); return '1'; } ) as ObservableUpDownCounterMetric; @@ -1112,8 +1112,8 @@ describe('Meter', () => { { description: 'desc', }, - (observerResult: api.ObserverResult) => { - observerResult.observe(1, { pid: '123', core: '1' }); + (observableResult: api.ObservableResult) => { + observableResult.observe(1, { pid: '123', core: '1' }); throw new Error('Boom'); } ) as ObservableUpDownCounterMetric; @@ -1163,7 +1163,7 @@ describe('Meter', () => { description: 'desc', }) as ObservableGaugeMetric; - meter.createBatchObserver(observerBatchResult => { + meter.createBatchObserver(batchObserverResult => { interface StatItem { usage: number; temp: number; @@ -1202,11 +1202,11 @@ describe('Meter', () => { ]).then((stats: unknown[]) => { const apps = (stats[0] as unknown) as Stat[]; apps.forEach(app => { - observerBatchResult.observe({ app: app.name, core: '1' }, [ + batchObserverResult.observe({ app: app.name, core: '1' }, [ tempMetric.observation(app.core1.temp), cpuUsageMetric.observation(app.core1.usage), ]); - observerBatchResult.observe({ app: app.name, core: '2' }, [ + batchObserverResult.observe({ app: app.name, core: '2' }, [ tempMetric.observation(app.core2.temp), cpuUsageMetric.observation(app.core2.usage), ]); @@ -1253,7 +1253,7 @@ describe('Meter', () => { }) as ObservableGaugeMetric; meter.createBatchObserver( - observerBatchResult => { + batchObserverResult => { Promise.all([ // simulate waiting 11ms new Promise((resolve, reject) => { @@ -1261,8 +1261,8 @@ describe('Meter', () => { }), ]).then(async () => { // try to hack to be able to update - (observerBatchResult as BatchObserverResult).cancelled = false; - observerBatchResult.observe({ foo: 'bar' }, [ + (batchObserverResult as BatchObserverResult).cancelled = false; + batchObserverResult.observe({ foo: 'bar' }, [ cpuUsageMetric.observation(123), ]); @@ -1289,16 +1289,16 @@ describe('Meter', () => { }); it('should pipe through instrumentation library', async () => { - const observer = meter.createObservableGauge( + const observableGauge = meter.createObservableGauge( 'name', {}, - (observerResult: api.ObserverResult) => { - observerResult.observe(42, { foo: 'bar' }); + (observableResult: api.ObservableResult) => { + observableResult.observe(42, { foo: 'bar' }); } ) as ObservableGaugeMetric; - assert.ok(observer.instrumentationLibrary); + assert.ok(observableGauge.instrumentationLibrary); - const [record] = await observer.getMetricRecord(); + const [record] = await observableGauge.getMetricRecord(); const { name, version } = record.instrumentationLibrary; assert.strictEqual(name, 'test-meter'); assert.strictEqual(version, undefined); From c0b2498aa797d1efae69ff0c30fb464510d73bbe Mon Sep 17 00:00:00 2001 From: legendecas Date: Thu, 14 Oct 2021 10:46:44 +0800 Subject: [PATCH 7/8] fixup! remove unnecessary spaces --- .../packages/opentelemetry-api-metrics/src/NoopMeter.ts | 8 ++++---- .../packages/opentelemetry-api-metrics/src/types/Meter.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts index 873fc4a25a5..775ad78f008 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/NoopMeter.ts @@ -48,7 +48,7 @@ export class NoopMeter implements Meter { * @param name the name of the metric. * @param [options] the metric options. */ - createHistogram(_name: string, _options?: MetricOptions): Histogram { + createHistogram(_name: string, _options?: MetricOptions): Histogram { return NOOP_HISTOGRAM_METRIC; } @@ -57,7 +57,7 @@ export class NoopMeter implements Meter { * @param name the name of the metric. * @param [options] the metric options. */ - createCounter(_name: string, _options?: MetricOptions): Counter { + createCounter(_name: string, _options?: MetricOptions): Counter { return NOOP_COUNTER_METRIC; } @@ -66,7 +66,7 @@ export class NoopMeter implements Meter { * @param name the name of the metric. * @param [options] the metric options. */ - createUpDownCounter(_name: string, _options?: MetricOptions): UpDownCounter { + createUpDownCounter(_name: string, _options?: MetricOptions): UpDownCounter { return NOOP_COUNTER_METRIC; } @@ -76,7 +76,7 @@ export class NoopMeter implements Meter { * @param [options] the metric options. * @param [callback] the observable gauge callback */ - createObservableGauge( + createObservableGauge( _name: string, _options?: MetricOptions, _callback?: (observableResult: ObservableResult) => void diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts index a9a2ded0055..a522840ec50 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts @@ -68,7 +68,7 @@ export interface Meter { * @param name the name of the metric. * @param [options] the metric options. */ - createUpDownCounter(name: string, options?: MetricOptions): UpDownCounter; + createUpDownCounter(name: string, options?: MetricOptions): UpDownCounter; /** * Creates a new `ObservableGauge` metric. @@ -76,7 +76,7 @@ export interface Meter { * @param [options] the metric options. * @param [callback] the observable callback */ - createObservableGauge( + createObservableGauge( name: string, options?: MetricOptions, callback?: (observableResult: ObservableResult) => void From 68f408ee02fa8f1b0926c3f6391755f1a8740021 Mon Sep 17 00:00:00 2001 From: legendecas Date: Thu, 14 Oct 2021 10:56:54 +0800 Subject: [PATCH 8/8] fixup! add upgrade guidelines --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index d5e2f0d9173..ae4eb6f4839 100644 --- a/README.md +++ b/README.md @@ -286,6 +286,29 @@ To request automatic tracing support for a module not on this list, please [file ## Upgrade guidelines +### 0.26.x to 0.27.x + +Metric types are renamed: + +- `@openetelemetry/api-metrics` + - `Meter` + - `createValueRecorder` => `createHistogram` + - `createValueObserver` => `createObservableGauge` + - `createSumObserver` => `createObservableCounter` + - `createUpDownSumObserver` => `createObservableUpDownCounter` + - `ValueRecorder` => `Histogram` + - `ValueObserver` => `ObservableGauge` + - `SumObserver` => `ObservableCounter` + - `UpDownSumObserver` => `ObservableUpDownCounter` + - `ObserverResult` => `ObservableResult` + - `Observation.observer` => `Observation.observable` +- `@opentelemetry/sdk-metrics-base` + - `MetricKind` + - `VALUE_RECORDER` => `HISTOGRAM` + - `SUM_OBSERVER` => `OBSERVABLE_COUNTER` + - `UP_DOWN_SUM_OBSERVER` => `OBSERVABLE_UP_DOWN_COUNTER` + - `VALUE_OBSERVER` => `OBSERVABLE_GAUGE` + ### 0.25.x to 1.x.y Collector exporter packages and types are renamed: