From 58210902d574c5ab9e5c751f92f35463d368951a Mon Sep 17 00:00:00 2001 From: Peter Davids Date: Wed, 28 Dec 2022 16:56:11 -0500 Subject: [PATCH 1/8] fix(sdk-metrics): use Date.now() for instrument recording timestamps --- packages/sdk-metrics/src/Instruments.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sdk-metrics/src/Instruments.ts b/packages/sdk-metrics/src/Instruments.ts index 09e849cc323..817a96a6dc0 100644 --- a/packages/sdk-metrics/src/Instruments.ts +++ b/packages/sdk-metrics/src/Instruments.ts @@ -29,7 +29,7 @@ import { ObservableGauge, ObservableUpDownCounter, } from '@opentelemetry/api'; -import { hrTime } from '@opentelemetry/core'; +import { numberToHrtime } from '@opentelemetry/core'; import { InstrumentDescriptor } from './InstrumentDescriptor'; import { ObservableRegistry } from './state/ObservableRegistry'; import { @@ -57,7 +57,7 @@ export class SyncInstrument { ); value = Math.trunc(value); } - this._writableMetricStorage.record(value, attributes, context, hrTime()); + this._writableMetricStorage.record(value, attributes, context, numberToHrtime(Date.now())); } } From d1693acd61ffe1fccb76915af6ddfeb71acba4a1 Mon Sep 17 00:00:00 2001 From: Peter Davids Date: Wed, 28 Dec 2022 17:11:06 -0500 Subject: [PATCH 2/8] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c390c68fbb6..73820f6055b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ * `telemetry.sdk.name` * `telemetry.sdk.language` * `telemetry.sdk.version` +* fix(sdk-metrics): use Date.now() for instrument recording timestamps [#3514](https://github.com/open-telemetry/opentelemetry-js/pull/3514) @MisterSquishy * fix(selenium-tests): updated webpack version for selenium test issue [#3456](https://github.com/open-telemetry/opentelemetry-js/issues/3456) @SaumyaBhushan ### :books: (Refine Doc) From bf88a070e17c6bbbf65f20a0b9d6fbb4c8099031 Mon Sep 17 00:00:00 2001 From: Peter Davids Date: Wed, 28 Dec 2022 17:33:42 -0500 Subject: [PATCH 3/8] whoops use timeInputToHrTime --- packages/sdk-metrics/src/Instruments.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sdk-metrics/src/Instruments.ts b/packages/sdk-metrics/src/Instruments.ts index 817a96a6dc0..be7f20c377c 100644 --- a/packages/sdk-metrics/src/Instruments.ts +++ b/packages/sdk-metrics/src/Instruments.ts @@ -29,7 +29,7 @@ import { ObservableGauge, ObservableUpDownCounter, } from '@opentelemetry/api'; -import { numberToHrtime } from '@opentelemetry/core'; +import { timeInputToHrTime } from '@opentelemetry/core'; import { InstrumentDescriptor } from './InstrumentDescriptor'; import { ObservableRegistry } from './state/ObservableRegistry'; import { @@ -57,7 +57,7 @@ export class SyncInstrument { ); value = Math.trunc(value); } - this._writableMetricStorage.record(value, attributes, context, numberToHrtime(Date.now())); + this._writableMetricStorage.record(value, attributes, context, timeInputToHrTime(Date.now())); } } From 93909f8b929e6ce40586b38bd1b84cf6501d2cc8 Mon Sep 17 00:00:00 2001 From: Peter Davids Date: Mon, 2 Jan 2023 12:43:02 -0500 Subject: [PATCH 4/8] lint --- packages/sdk-metrics/src/Instruments.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/sdk-metrics/src/Instruments.ts b/packages/sdk-metrics/src/Instruments.ts index be7f20c377c..1891c1910df 100644 --- a/packages/sdk-metrics/src/Instruments.ts +++ b/packages/sdk-metrics/src/Instruments.ts @@ -57,7 +57,12 @@ export class SyncInstrument { ); value = Math.trunc(value); } - this._writableMetricStorage.record(value, attributes, context, timeInputToHrTime(Date.now())); + this._writableMetricStorage.record( + value, + attributes, + context, + timeInputToHrTime(Date.now()) + ); } } From a3d81174d29b075bc7c8ba83b5d1d6f06b697891 Mon Sep 17 00:00:00 2001 From: Peter Davids Date: Tue, 3 Jan 2023 10:14:13 -0500 Subject: [PATCH 5/8] update lastvalue and metriccollector --- packages/sdk-metrics/src/aggregator/LastValue.ts | 4 ++-- packages/sdk-metrics/src/state/MetricCollector.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/sdk-metrics/src/aggregator/LastValue.ts b/packages/sdk-metrics/src/aggregator/LastValue.ts index e9e85b36bdb..b1e59373536 100644 --- a/packages/sdk-metrics/src/aggregator/LastValue.ts +++ b/packages/sdk-metrics/src/aggregator/LastValue.ts @@ -22,7 +22,7 @@ import { LastValue, } from './types'; import { HrTime } from '@opentelemetry/api'; -import { hrTime, hrTimeToMicroseconds } from '@opentelemetry/core'; +import { timeInputToHrTime, hrTimeToMicroseconds } from '@opentelemetry/core'; import { DataPointType, GaugeMetricData } from '../export/MetricData'; import { InstrumentDescriptor } from '../InstrumentDescriptor'; import { Maybe } from '../utils'; @@ -37,7 +37,7 @@ export class LastValueAccumulation implements Accumulation { record(value: number): void { this._current = value; - this.sampleTime = hrTime(); + this.sampleTime = timeInputToHrTime(Date.now()); } setStartTime(startTime: HrTime): void { diff --git a/packages/sdk-metrics/src/state/MetricCollector.ts b/packages/sdk-metrics/src/state/MetricCollector.ts index 95fe8d4e148..5ecfa739bf3 100644 --- a/packages/sdk-metrics/src/state/MetricCollector.ts +++ b/packages/sdk-metrics/src/state/MetricCollector.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { hrTime } from '@opentelemetry/core'; +import { timeInputToHrTime } from '@opentelemetry/core'; import { AggregationTemporalitySelector } from '../export/AggregationSelector'; import { CollectionResult } from '../export/MetricData'; import { MetricProducer, MetricCollectOptions } from '../export/MetricProducer'; @@ -36,7 +36,7 @@ export class MetricCollector implements MetricProducer { ) {} async collect(options?: MetricCollectOptions): Promise { - const collectionTime = hrTime(); + const collectionTime = timeInputToHrTime(Date.now()); const meterCollectionPromises = Array.from( this._sharedState.meterSharedStates.values() ).map(meterSharedState => From 61ff0efba5a94f21dc9ef3195f24bc260f30f4ad Mon Sep 17 00:00:00 2001 From: Peter Davids Date: Tue, 3 Jan 2023 12:42:34 -0500 Subject: [PATCH 6/8] use numberToHrtime --- packages/opentelemetry-core/package.json | 2 +- packages/opentelemetry-core/src/common/time.ts | 2 +- packages/sdk-metrics/package.json | 4 ++-- packages/sdk-metrics/src/Instruments.ts | 4 ++-- packages/sdk-metrics/src/aggregator/LastValue.ts | 4 ++-- packages/sdk-metrics/src/state/MetricCollector.ts | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index cbe387cb888..997b69f5409 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "1.8.0", + "version": "1.8.1", "description": "OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/packages/opentelemetry-core/src/common/time.ts b/packages/opentelemetry-core/src/common/time.ts index 64bc64d2d9a..768577208b9 100644 --- a/packages/opentelemetry-core/src/common/time.ts +++ b/packages/opentelemetry-core/src/common/time.ts @@ -33,7 +33,7 @@ const SECOND_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS); * This is represented in HrTime format as [1609504210, 150000000]. * @param epochMillis */ -function numberToHrtime(epochMillis: number): api.HrTime { +export function numberToHrtime(epochMillis: number): api.HrTime { const epochSeconds = epochMillis / 1000; // Decimals only. const seconds = Math.trunc(epochSeconds); diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index a8645c4162a..912914274f9 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-metrics", - "version": "1.8.0", + "version": "1.8.1", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -77,7 +77,7 @@ "@opentelemetry/api": ">=1.3.0 <1.4.0" }, "dependencies": { - "@opentelemetry/core": "1.8.0", + "@opentelemetry/core": "1.8.1", "@opentelemetry/resources": "1.8.0", "lodash.merge": "4.6.2" }, diff --git a/packages/sdk-metrics/src/Instruments.ts b/packages/sdk-metrics/src/Instruments.ts index 1891c1910df..4ec12be6a38 100644 --- a/packages/sdk-metrics/src/Instruments.ts +++ b/packages/sdk-metrics/src/Instruments.ts @@ -29,7 +29,7 @@ import { ObservableGauge, ObservableUpDownCounter, } from '@opentelemetry/api'; -import { timeInputToHrTime } from '@opentelemetry/core'; +import { numberToHrtime } from '@opentelemetry/core'; import { InstrumentDescriptor } from './InstrumentDescriptor'; import { ObservableRegistry } from './state/ObservableRegistry'; import { @@ -61,7 +61,7 @@ export class SyncInstrument { value, attributes, context, - timeInputToHrTime(Date.now()) + numberToHrtime(Date.now()) ); } } diff --git a/packages/sdk-metrics/src/aggregator/LastValue.ts b/packages/sdk-metrics/src/aggregator/LastValue.ts index b1e59373536..087517d3883 100644 --- a/packages/sdk-metrics/src/aggregator/LastValue.ts +++ b/packages/sdk-metrics/src/aggregator/LastValue.ts @@ -22,7 +22,7 @@ import { LastValue, } from './types'; import { HrTime } from '@opentelemetry/api'; -import { timeInputToHrTime, hrTimeToMicroseconds } from '@opentelemetry/core'; +import { numberToHrtime, hrTimeToMicroseconds } from '@opentelemetry/core'; import { DataPointType, GaugeMetricData } from '../export/MetricData'; import { InstrumentDescriptor } from '../InstrumentDescriptor'; import { Maybe } from '../utils'; @@ -37,7 +37,7 @@ export class LastValueAccumulation implements Accumulation { record(value: number): void { this._current = value; - this.sampleTime = timeInputToHrTime(Date.now()); + this.sampleTime = numberToHrtime(Date.now()); } setStartTime(startTime: HrTime): void { diff --git a/packages/sdk-metrics/src/state/MetricCollector.ts b/packages/sdk-metrics/src/state/MetricCollector.ts index 5ecfa739bf3..c6fae224ed8 100644 --- a/packages/sdk-metrics/src/state/MetricCollector.ts +++ b/packages/sdk-metrics/src/state/MetricCollector.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { timeInputToHrTime } from '@opentelemetry/core'; +import { numberToHrtime } from '@opentelemetry/core'; import { AggregationTemporalitySelector } from '../export/AggregationSelector'; import { CollectionResult } from '../export/MetricData'; import { MetricProducer, MetricCollectOptions } from '../export/MetricProducer'; @@ -36,7 +36,7 @@ export class MetricCollector implements MetricProducer { ) {} async collect(options?: MetricCollectOptions): Promise { - const collectionTime = timeInputToHrTime(Date.now()); + const collectionTime = numberToHrtime(Date.now()); const meterCollectionPromises = Array.from( this._sharedState.meterSharedStates.values() ).map(meterSharedState => From 3d7486282dd397b266e529636dd87369ddced080 Mon Sep 17 00:00:00 2001 From: Peter Davids Date: Tue, 3 Jan 2023 13:24:37 -0500 Subject: [PATCH 7/8] no need to manually version --- packages/opentelemetry-core/package.json | 2 +- packages/sdk-metrics/package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 997b69f5409..cbe387cb888 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "1.8.1", + "version": "1.8.0", "description": "OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 912914274f9..a8645c4162a 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-metrics", - "version": "1.8.1", + "version": "1.8.0", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -77,7 +77,7 @@ "@opentelemetry/api": ">=1.3.0 <1.4.0" }, "dependencies": { - "@opentelemetry/core": "1.8.1", + "@opentelemetry/core": "1.8.0", "@opentelemetry/resources": "1.8.0", "lodash.merge": "4.6.2" }, From c3bcb95962bdfd63620a637eab92ceb9d4fcf294 Mon Sep 17 00:00:00 2001 From: Pete Davids Date: Wed, 4 Jan 2023 08:50:07 -0500 Subject: [PATCH 8/8] attempt test fix --- .../packages/opentelemetry-exporter-prometheus/test/util.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/util.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/util.ts index be07dd3d8cc..2af8aa7f56c 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/util.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/util.ts @@ -15,17 +15,13 @@ */ import * as sinon from 'sinon'; -import * as perf_hooks from 'perf_hooks'; import { Resource } from '@opentelemetry/resources'; import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions'; export const mockedHrTimeMs = 1586347902211; export function mockHrTime() { - // We cannot stub core.now or core.timeOrigin since a property of - // ModuleNamespace can not be reconfigured.ß - sinon.stub(perf_hooks.performance, 'timeOrigin').value(0); - sinon.stub(perf_hooks.performance, 'now').returns(mockedHrTimeMs); + sinon.useFakeTimers(mockedHrTimeMs); } export const serviceName = Resource.default()