diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index e69d5617b87..978ca31b371 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -13,6 +13,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2 ### :bug: Bug Fixes * fix(instrumentation-http): respect requireParent flag when INVALID_SPAN_CONTEXT is used [#4788](https://github.com/open-telemetry/opentelemetry-js/pull/4788) @reberhardt7 +* fix(otlp-transformer): trunc hrTime to int for nanos converting [#5924](https://github.com/open-telemetry/opentelemetry-js/pull/5924) @blumamir ### :books: Documentation diff --git a/experimental/packages/otlp-transformer/src/common/utils.ts b/experimental/packages/otlp-transformer/src/common/utils.ts index 756e80f4a4d..f4f8cb65e41 100644 --- a/experimental/packages/otlp-transformer/src/common/utils.ts +++ b/experimental/packages/otlp-transformer/src/common/utils.ts @@ -21,7 +21,9 @@ import { hexToBinary } from './hex-to-binary'; export function hrTimeToNanos(hrTime: HrTime): bigint { const NANOSECONDS = BigInt(1_000_000_000); - return BigInt(hrTime[0]) * NANOSECONDS + BigInt(hrTime[1]); + return ( + BigInt(Math.trunc(hrTime[0])) * NANOSECONDS + BigInt(Math.trunc(hrTime[1])) + ); } export function toLongBits(value: bigint): LongBits { diff --git a/experimental/packages/otlp-transformer/test/trace.test.ts b/experimental/packages/otlp-transformer/test/trace.test.ts index f76ea753f24..9fad977170f 100644 --- a/experimental/packages/otlp-transformer/test/trace.test.ts +++ b/experimental/packages/otlp-transformer/test/trace.test.ts @@ -544,6 +544,12 @@ describe('Trace', () => { assert.deepStrictEqual(JSON.parse(decoder.decode(serialized)), expected); }); + it('hrtime contains float value', () => { + const span = createSpanWithResource(resource); + (span as any).startTime = [1640715557.5, 342725388.5]; + JsonTraceSerializer.serializeRequest([span]); + }); + it('deserializes a response', () => { const expectedResponse = { partialSuccess: {