From 8d4223d2db1fd72fd80446c58dc2569cee08f091 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 12 Nov 2021 08:35:49 -0500 Subject: [PATCH 1/2] chore: guard multi-shutdown on meter provider --- .../opentelemetry-sdk-metrics-base/src/MeterProvider.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/MeterProvider.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/MeterProvider.ts index 7ceb752ff9..b71989ae77 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/MeterProvider.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/MeterProvider.ts @@ -74,6 +74,11 @@ export class MeterProvider { async shutdown(): Promise { // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#shutdown + if (this._shutdown) { + api.diag.warn('shutdown may only be called once per MeterProvider'); + return; + } + // TODO add a timeout - spec leaves it up the the SDK if this is configurable this._shutdown = true; From 892c92ba98a3d14af1d6a99359f30b1caeb7507a Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Mon, 15 Nov 2021 08:42:08 -0500 Subject: [PATCH 2/2] chore: add links to spec Co-authored-by: Georg Pirklbauer --- .../packages/opentelemetry-sdk-metrics-base/src/Instruments.ts | 2 ++ .../packages/opentelemetry-sdk-metrics-base/src/Measurement.ts | 2 ++ .../packages/opentelemetry-sdk-metrics-base/src/Meter.ts | 2 ++ .../opentelemetry-sdk-metrics-base/src/MetricExporter.ts | 2 ++ .../packages/opentelemetry-sdk-metrics-base/src/MetricReader.ts | 2 ++ 5 files changed, 10 insertions(+) diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/Instruments.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/Instruments.ts index 8015af9cb8..8c5d1212d3 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/Instruments.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/Instruments.ts @@ -18,6 +18,8 @@ import * as api from '@opentelemetry/api'; import * as metrics from '@opentelemetry/api-metrics'; import { Meter } from './Meter'; +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#instrument + export enum InstrumentType { COUNTER = 'COUNTER', HISTOGRAM = 'HISTOGRAM', diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/Measurement.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/Measurement.ts index 1d93945ca0..215426f9d7 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/Measurement.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/Measurement.ts @@ -17,6 +17,8 @@ import * as api from '@opentelemetry/api' import { Attributes } from '@opentelemetry/api-metrics' +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#measurement + export type Measurement = { value: number; // TODO use common attributes diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts index 2c4fd1283a..c7e16406ba 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/Meter.ts @@ -20,6 +20,8 @@ import { Counter, Histogram, UpDownCounter } from './Instruments'; import { Measurement } from './Measurement'; import { MeterProvider } from './MeterProvider'; +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#meter + export class Meter implements metrics.Meter { // instrumentation library required by spec to be on meter // spec requires provider config changes to apply to previously created meters, achieved by holding a reference to the provider diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/MetricExporter.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/MetricExporter.ts index 0b197fdd6f..4046f04136 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/MetricExporter.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/MetricExporter.ts @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#metricexporter // TODO should this just be an interface and exporters can implement their own shutdown? export abstract class MetricExporter { diff --git a/experimental/packages/opentelemetry-sdk-metrics-base/src/MetricReader.ts b/experimental/packages/opentelemetry-sdk-metrics-base/src/MetricReader.ts index 7b4e0e2a5c..9f20299a4f 100644 --- a/experimental/packages/opentelemetry-sdk-metrics-base/src/MetricReader.ts +++ b/experimental/packages/opentelemetry-sdk-metrics-base/src/MetricReader.ts @@ -16,6 +16,8 @@ import { MetricExporter } from '.'; +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#metricreader + export class MetricReader { private _shutdown = false;