From 61cf8c5ec17926c184622637abad5680273d1e67 Mon Sep 17 00:00:00 2001 From: legendecas Date: Mon, 1 Nov 2021 23:51:33 +0800 Subject: [PATCH] feat(api-metrics): add schemaUrl to meter creations (#2529) --- .../opentelemetry-api-metrics/src/NoopMeterProvider.ts | 4 ++-- .../opentelemetry-api-metrics/src/api/metrics.ts | 6 +++--- .../opentelemetry-api-metrics/src/types/Meter.ts | 10 ++++++++++ .../src/types/MeterProvider.ts | 9 +++++---- .../src/MeterProvider.ts | 9 +++++++-- .../opentelemetry-sdk-metrics-base/src/types.ts | 2 +- packages/opentelemetry-core/src/common/types.ts | 1 + 7 files changed, 29 insertions(+), 12 deletions(-) diff --git a/experimental/packages/opentelemetry-api-metrics/src/NoopMeterProvider.ts b/experimental/packages/opentelemetry-api-metrics/src/NoopMeterProvider.ts index 2cc737960e..97628d7122 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/NoopMeterProvider.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/NoopMeterProvider.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Meter } from './types/Meter'; +import { Meter, MeterOptions } from './types/Meter'; import { MeterProvider } from './types/MeterProvider'; import { NOOP_METER } from './NoopMeter'; @@ -23,7 +23,7 @@ import { NOOP_METER } from './NoopMeter'; * for all calls to `getMeter` */ export class NoopMeterProvider implements MeterProvider { - getMeter(_name?: string, _version?: string): Meter { + getMeter(_name: string, _version?: string, _options?: MeterOptions): Meter { return NOOP_METER; } } diff --git a/experimental/packages/opentelemetry-api-metrics/src/api/metrics.ts b/experimental/packages/opentelemetry-api-metrics/src/api/metrics.ts index 079fc952e4..3e5fb6015a 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/api/metrics.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/api/metrics.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Meter } from '../types/Meter'; +import { Meter, MeterOptions } from '../types/Meter'; import { MeterProvider } from '../types/MeterProvider'; import { NOOP_METER_PROVIDER } from '../NoopMeterProvider'; import { @@ -73,8 +73,8 @@ export class MetricsAPI { /** * Returns a meter from the global meter provider. */ - public getMeter(name: string, version?: string): Meter { - return this.getMeterProvider().getMeter(name, version); + public getMeter(name: string, version?: string, options?: MeterOptions): Meter { + return this.getMeterProvider().getMeter(name, version, options); } /** Remove the global meter provider */ diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts b/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts index a522840ec5..cd30fe8f4c 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/Meter.ts @@ -27,6 +27,16 @@ import { } from './Metric'; import { ObservableResult } from './ObservableResult'; +/** + * An interface describes additional metadata of a meter. + */ +export interface MeterOptions { + /** + * The schemaUrl of the meter or instrumentation library + */ + schemaUrl?: string; +} + /** * An interface to allow the recording metrics. * diff --git a/experimental/packages/opentelemetry-api-metrics/src/types/MeterProvider.ts b/experimental/packages/opentelemetry-api-metrics/src/types/MeterProvider.ts index 981218ad59..448f10b17b 100644 --- a/experimental/packages/opentelemetry-api-metrics/src/types/MeterProvider.ts +++ b/experimental/packages/opentelemetry-api-metrics/src/types/MeterProvider.ts @@ -14,19 +14,20 @@ * limitations under the License. */ -import { Meter } from './Meter'; +import { Meter, MeterOptions } from './Meter'; /** * A registry for creating named {@link Meter}s. */ export interface MeterProvider { /** - * Returns a Meter, creating one if one with the given name and version is - * not already created. + * Returns a Meter, creating one if one with the given name, version, and + * schemaUrl pair is not already created. * * @param name The name of the meter or instrumentation library. * @param version The version of the meter or instrumentation library. + * @param options The options of the meter or instrumentation library. * @returns Meter A Meter with the given name and version */ - getMeter(name: string, version?: string): Meter; + getMeter(name: string, version?: string, options?: MeterOptions): Meter; } diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/MeterProvider.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/MeterProvider.ts index c7edefd0d7..8e18e6a4b1 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/MeterProvider.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/MeterProvider.ts @@ -49,11 +49,16 @@ export class MeterProvider implements api.MeterProvider { * @returns Meter A Meter with the given name and version */ getMeter(name: string, version?: string, config?: MeterConfig): Meter { - const key = `${name}@${version || ''}`; + const key = `${name}@${version ?? ''}:${config?.schemaUrl ?? ''}`; if (!this._meters.has(key)) { this._meters.set( key, - new Meter({ name, version }, config || this._config) + new Meter({ + name, + version, + // @ts-expect-error ts(2345) TODO: upgrade @opentelemetry/core InstrumentationLibrary definition + schemaUrl: config?.schemaUrl + }, Object.assign({}, this._config, config)) ); } diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/types.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/types.ts index a9385a3268..338d5805ae 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/types.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/types.ts @@ -20,7 +20,7 @@ import { Processor } from './export/Processor'; import { MetricExporter } from './export/types'; /** MeterConfig provides an interface for configuring a Meter. */ -export interface MeterConfig { +export interface MeterConfig extends api.MeterOptions { /** Metric exporter. */ exporter?: MetricExporter; diff --git a/packages/opentelemetry-core/src/common/types.ts b/packages/opentelemetry-core/src/common/types.ts index 99ab0d08fd..6aabc592ee 100644 --- a/packages/opentelemetry-core/src/common/types.ts +++ b/packages/opentelemetry-core/src/common/types.ts @@ -47,6 +47,7 @@ export interface ShimWrapped extends Function { export interface InstrumentationLibrary { readonly name: string; readonly version?: string; + readonly schemaUrl?: string; } /** Defines an error handler function */