From 230d3eb6eb378c0e88990306cc83d658805359bf Mon Sep 17 00:00:00 2001 From: Godfrey Chan Date: Wed, 11 Dec 2024 11:42:33 -0800 Subject: [PATCH] refactor(sdk-metrics) Swap workaround types for @otel/api types The internal `Gauge` and the unnamed `MetricAdvice` types were introduced in the 1.0 series when the metrics package depended on an older version of the api package that didn't come with those types, so the interfaces were essentially vendored into the package for internal use. Now with the 2.0 release on the horrizon, we can bump the required version of @otel/api and is now safe to unvendor these types in favor of the official ones. This is not expected to have any impact on consumers as the types are intended to be compatible for the positions they were used in. Fixes #5223 Fixes #5224 --- CHANGELOG_NEXT.md | 1 + package-lock.json | 2 +- packages/sdk-metrics/package.json | 2 +- .../sdk-metrics/src/InstrumentDescriptor.ts | 20 +++++++++---------- packages/sdk-metrics/src/Instruments.ts | 2 +- packages/sdk-metrics/src/Meter.ts | 2 +- packages/sdk-metrics/src/types.ts | 12 ----------- 7 files changed, 14 insertions(+), 27 deletions(-) diff --git a/CHANGELOG_NEXT.md b/CHANGELOG_NEXT.md index 06717c2ebe..c562308600 100644 --- a/CHANGELOG_NEXT.md +++ b/CHANGELOG_NEXT.md @@ -23,6 +23,7 @@ ### :house: (Internal) +* refactor(sdk-metrics): remove `Gauge` and `MetricAdvice` workaround types in favor of the upstream `@opentelemetry/api` types [#5254](https://github.com/open-telemetry/opentelemetry-js/pull/5254) @chancancode * chore: remove checks for unsupported node versions [#4341](https://github.com/open-telemetry/opentelemetry-js/pull/4341) @dyladan * refactor(sdk-trace-base): remove `BasicTracerProvider._registeredSpanProcessors` private property. [#5134](https://github.com/open-telemetry/opentelemetry-js/pull/5134) @david-luna * refactor(sdk-trace-base): rename `BasicTracerProvider.activeSpanProcessor` private property. [#5211](https://github.com/open-telemetry/opentelemetry-js/pull/5211) @david-luna diff --git a/package-lock.json b/package-lock.json index cc662cb348..6fd4196ad0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28665,7 +28665,7 @@ "node": ">=18" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "packages/template": { diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index d6550a1992..5934858f80 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -79,7 +79,7 @@ "webpack-merge": "5.10.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": ">=1.9.0 <1.10.0" }, "dependencies": { "@opentelemetry/core": "1.29.0", diff --git a/packages/sdk-metrics/src/InstrumentDescriptor.ts b/packages/sdk-metrics/src/InstrumentDescriptor.ts index ef09dda8bb..39c9cffd92 100644 --- a/packages/sdk-metrics/src/InstrumentDescriptor.ts +++ b/packages/sdk-metrics/src/InstrumentDescriptor.ts @@ -14,7 +14,12 @@ * limitations under the License. */ -import { MetricOptions, ValueType, diag } from '@opentelemetry/api'; +import { + MetricAdvice, + MetricOptions, + ValueType, + diag, +} from '@opentelemetry/api'; import { View } from './view/View'; import { equalsCaseInsensitive } from './utils'; @@ -44,18 +49,11 @@ export interface InstrumentDescriptor { readonly type: InstrumentType; readonly valueType: ValueType; /** - * @experimental + * See {@link MetricAdvice} * - * This is intentionally not using the API's type as it's only available from @opentelemetry/api 1.7.0 and up. - * In SDK 2.0 we'll be able to bump the minimum API version and remove this workaround. + * @experimental */ - readonly advice: { - /** - * Hint the explicit bucket boundaries for SDK if the metric has been - * aggregated with a HistogramAggregator. - */ - explicitBucketBoundaries?: number[]; - }; + readonly advice: MetricAdvice; } export function createInstrumentDescriptor( diff --git a/packages/sdk-metrics/src/Instruments.ts b/packages/sdk-metrics/src/Instruments.ts index 7e27a56454..6d60792eff 100644 --- a/packages/sdk-metrics/src/Instruments.ts +++ b/packages/sdk-metrics/src/Instruments.ts @@ -22,6 +22,7 @@ import { ValueType, UpDownCounter, Counter, + Gauge, Histogram, Observable, ObservableCallback, @@ -36,7 +37,6 @@ import { AsyncWritableMetricStorage, WritableMetricStorage, } from './state/WritableMetricStorage'; -import { Gauge } from './types'; export class SyncInstrument { constructor( diff --git a/packages/sdk-metrics/src/Meter.ts b/packages/sdk-metrics/src/Meter.ts index cf0e25e56c..b4edee6868 100644 --- a/packages/sdk-metrics/src/Meter.ts +++ b/packages/sdk-metrics/src/Meter.ts @@ -17,6 +17,7 @@ import { Meter as IMeter, MetricOptions, + Gauge, Histogram, Counter, UpDownCounter, @@ -40,7 +41,6 @@ import { UpDownCounterInstrument, } from './Instruments'; import { MeterSharedState } from './state/MeterSharedState'; -import { Gauge } from './types'; /** * This class implements the {@link IMeter} interface. diff --git a/packages/sdk-metrics/src/types.ts b/packages/sdk-metrics/src/types.ts index 2ad1cefcfd..89af1eea33 100644 --- a/packages/sdk-metrics/src/types.ts +++ b/packages/sdk-metrics/src/types.ts @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Context, Attributes } from '@opentelemetry/api'; export type CommonReaderOptions = { timeoutMillis?: number; @@ -24,14 +23,3 @@ export type CollectionOptions = CommonReaderOptions; export type ShutdownOptions = CommonReaderOptions; export type ForceFlushOptions = CommonReaderOptions; - -/** - * This is intentionally not using the API's type as it's only available from @opentelemetry/api 1.9.0 and up. - * In SDK 2.0 we'll be able to bump the minimum API version and remove this workaround. - */ -export interface Gauge { - /** - * Records a measurement. Value of the measurement must not be negative. - */ - record(value: number, attributes?: AttributesTypes, context?: Context): void; -}