From ac2848e0cb80f843905ab2fcea0a7918ed0534de Mon Sep 17 00:00:00 2001 From: Viktor Taranenko Date: Thu, 16 Sep 2021 10:43:48 +0200 Subject: [PATCH 1/2] We can't use nulls and booleans as dimension values, so now stringifying them before sending --- signalfx-transform-helper.js | 7 ++++++- spec/signalfx-transform-helper-spec.js | 20 +++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/signalfx-transform-helper.js b/signalfx-transform-helper.js index 286512b..2cd4db9 100644 --- a/signalfx-transform-helper.js +++ b/signalfx-transform-helper.js @@ -19,7 +19,12 @@ function sanitize(name) { function extractDetailsForSfx(cwEvent) { let detailsMap = {}; for (let [key, value] of Object.entries(cwEvent.detail)) { - detailsMap[sanitize(DETAIL_PREFIX + key)] = isPrimitive(value) ? value : JSON.stringify(value); + let sanitizedKey = sanitize(DETAIL_PREFIX + key); + if (value == null || typeof value == "boolean" || !isPrimitive(value)) { + detailsMap[sanitizedKey] = JSON.stringify(value); + } else { + detailsMap[sanitizedKey] = value; + } } return detailsMap; } diff --git a/spec/signalfx-transform-helper-spec.js b/spec/signalfx-transform-helper-spec.js index 07da4ad..adbc85b 100644 --- a/spec/signalfx-transform-helper-spec.js +++ b/spec/signalfx-transform-helper-spec.js @@ -32,22 +32,32 @@ describe('signalfx-transform-helper', () => { expect(sanitizedAndPrefixed).to.deep.equal(expected); }); - it('should stringify arrays and objects', () => { + it('should stringify arrays, objects, nulls and booleans', () => { const obj = { id: "7bf73129-1428-4cd3-a780-95db273d1602", 'detail-type': "EC2 Instance State-change Notification", detail: { key1: 'value', key2: 5, - key3: {inner1: 42, inner2: 43}, - key4: [2, "one"] + "key2.1": 5.1, + key3: {' inner1 ': 42, inner2: null}, + key4: [2, "one"], + key5: [], + ' key6 ': ' value space-surrounded ', + key7: null, + key8: true, } }; const expected = { detail_key1: 'value', detail_key2: 5, - detail_key3: '{"inner1":42,"inner2":43}', - detail_key4: '[2,"one"]' + detail_key2_1: 5.1, + detail_key3: '{" inner1 ":42,"inner2":null}', + detail_key4: '[2,"one"]', + detail_key5: '[]', + detail__key6_: ' value space-surrounded ', + detail_key7: 'null', + detail_key8: 'true', }; const sanitizedAndPrefixed = signalfxHelper.extractDetailsForSfx(obj); expect(sanitizedAndPrefixed).to.deep.equal(expected); From d4f81cfe05cf7da23fd6dfd9f2eabfc0c9dda90e Mon Sep 17 00:00:00 2001 From: Viktor Taranenko Date: Thu, 16 Sep 2021 11:47:14 +0200 Subject: [PATCH 2/2] added Boolean object assertion --- spec/signalfx-transform-helper-spec.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/signalfx-transform-helper-spec.js b/spec/signalfx-transform-helper-spec.js index adbc85b..f4fb3f6 100644 --- a/spec/signalfx-transform-helper-spec.js +++ b/spec/signalfx-transform-helper-spec.js @@ -46,6 +46,7 @@ describe('signalfx-transform-helper', () => { ' key6 ': ' value space-surrounded ', key7: null, key8: true, + key9: new Boolean(false), } }; const expected = { @@ -58,6 +59,7 @@ describe('signalfx-transform-helper', () => { detail__key6_: ' value space-surrounded ', detail_key7: 'null', detail_key8: 'true', + detail_key9: 'false', }; const sanitizedAndPrefixed = signalfxHelper.extractDetailsForSfx(obj); expect(sanitizedAndPrefixed).to.deep.equal(expected);