From 8af444408cba94f6cc119112c31b0b9da9057750 Mon Sep 17 00:00:00 2001 From: Karol Fuksiewicz Date: Thu, 25 Feb 2021 23:40:23 +0100 Subject: [PATCH] fix(exporter-collector): wrong data type for numbers (#1938) * fix(exporter-collector): proper data types for int and double * test(exporter-collector): add test for converting number to int and double * test(exporter-collector-grpc): fix tests after changes in transform in exporter-collector --- .../test/helper.ts | 4 ++-- .../src/transform.ts | 11 ++++++++++- .../test/common/transform.test.ts | 15 ++++++++++++--- .../test/helper.ts | 2 +- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/packages/opentelemetry-exporter-collector-grpc/test/helper.ts b/packages/opentelemetry-exporter-collector-grpc/test/helper.ts index 049697892a..607a8ad729 100644 --- a/packages/opentelemetry-exporter-collector-grpc/test/helper.ts +++ b/packages/opentelemetry-exporter-collector-grpc/test/helper.ts @@ -422,8 +422,8 @@ export function ensureResourceIsCorrect( { key: 'version', value: { - doubleValue: 1, - value: 'doubleValue', + intValue: '1', + value: 'intValue', }, }, { diff --git a/packages/opentelemetry-exporter-collector/src/transform.ts b/packages/opentelemetry-exporter-collector/src/transform.ts index bdaaaa2290..7080713ff7 100644 --- a/packages/opentelemetry-exporter-collector/src/transform.ts +++ b/packages/opentelemetry-exporter-collector/src/transform.ts @@ -32,6 +32,9 @@ import { CollectorExporterConfigBase, } from './types'; +const MAX_INTEGER_VALUE = 2147483647; +const MIN_INTEGER_VALUE = -2147483648; + /** * Converts attributes to KeyValue array * @param attributes @@ -95,8 +98,14 @@ export function toCollectorAnyValue( anyValue.stringValue = value; } else if (typeof value === 'boolean') { anyValue.boolValue = value; + } else if ( + typeof value === 'number' && + value <= MAX_INTEGER_VALUE && + value >= MIN_INTEGER_VALUE && + Number.isInteger(value) + ) { + anyValue.intValue = value; } else if (typeof value === 'number') { - // all numbers will be treated as double anyValue.doubleValue = value; } else if (Array.isArray(value)) { anyValue.arrayValue = toCollectorArrayValue(value); diff --git a/packages/opentelemetry-exporter-collector/test/common/transform.test.ts b/packages/opentelemetry-exporter-collector/test/common/transform.test.ts index 3bcb5e8ace..f212a7774a 100644 --- a/packages/opentelemetry-exporter-collector/test/common/transform.test.ts +++ b/packages/opentelemetry-exporter-collector/test/common/transform.test.ts @@ -37,12 +37,21 @@ describe('transform', () => { ]); }); - it('should convert attribute integer', () => { + it('should convert attribute integer to integer', () => { const attributes: SpanAttributes = { foo: 13, }; assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [ - { key: 'foo', value: { doubleValue: 13 } }, + { key: 'foo', value: { intValue: 13 } }, + ]); + }); + + it('should convert attribute integer to double', () => { + const attributes: SpanAttributes = { + foo: 2247483647, + }; + assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [ + { key: 'foo', value: { doubleValue: 2247483647 } }, ]); }); @@ -118,7 +127,7 @@ describe('transform', () => { }, { key: 'version', - value: { doubleValue: 1 }, + value: { intValue: 1 }, }, { key: 'success', value: { boolValue: true } }, ], diff --git a/packages/opentelemetry-exporter-collector/test/helper.ts b/packages/opentelemetry-exporter-collector/test/helper.ts index 710e1d99d5..b38785daab 100644 --- a/packages/opentelemetry-exporter-collector/test/helper.ts +++ b/packages/opentelemetry-exporter-collector/test/helper.ts @@ -540,7 +540,7 @@ export function ensureWebResourceIsCorrect( { key: 'version', value: { - doubleValue: 1, + intValue: 1, }, }, {