Skip to content

Commit 9b9fc92

Browse files
am29ddreamorosi
authored andcommitted
fix(metrics): deduplicate dimensions when serialising (#1780)
* fix: deduplicate dimensions when serializing * fix tests * remove tsbuildinfo * remove whitespace * fix gitignore again * play some sonar games * fix test
1 parent ce223fc commit 9b9fc92

File tree

3 files changed

+54
-6
lines changed

3 files changed

+54
-6
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,5 @@ site
4949
tmp
5050

5151
# TS build files
52-
*.tsbuildinfo
52+
tsconfig.tsbuildinfo
53+
.tsbuildinfo

packages/metrics/src/Metrics.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -439,8 +439,10 @@ class Metrics extends Utility implements MetricsInterface {
439439
);
440440

441441
const dimensionNames = [
442-
...Object.keys(this.defaultDimensions),
443-
...Object.keys(this.dimensions),
442+
...new Set([
443+
...Object.keys(this.defaultDimensions),
444+
...Object.keys(this.dimensions),
445+
]),
444446
];
445447

446448
return {

packages/metrics/tests/unit/Metrics.test.ts

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -467,9 +467,7 @@ describe('Class: Metrics', () => {
467467
}
468468

469469
// Act & Assess
470-
expect(() =>
471-
metrics.addDimensions(dimensionsToBeAdded)
472-
).not.toThrowError();
470+
metrics.addDimensions(dimensionsToBeAdded);
473471
expect(Object.keys(metrics['dimensions']).length).toBe(
474472
MAX_DIMENSION_COUNT
475473
);
@@ -1501,6 +1499,53 @@ describe('Class: Metrics', () => {
15011499
});
15021500
});
15031501

1502+
test('it should log dimensions once when default dimensions are set and addDimension is called', () => {
1503+
// Prepare
1504+
const additionalDimensions = {
1505+
foo: 'bar',
1506+
env: 'dev',
1507+
};
1508+
const testMetric = 'test-metric';
1509+
const metrics: Metrics = new Metrics({
1510+
defaultDimensions: additionalDimensions,
1511+
namespace: TEST_NAMESPACE,
1512+
});
1513+
1514+
// Act
1515+
metrics.addMetric(testMetric, MetricUnits.Count, 10);
1516+
metrics.addDimension('foo', 'baz');
1517+
const loggedData = metrics.serializeMetrics();
1518+
1519+
// Assess
1520+
expect(loggedData._aws.CloudWatchMetrics[0].Dimensions[0].length).toEqual(
1521+
3
1522+
);
1523+
expect(loggedData.service).toEqual(defaultServiceName);
1524+
expect(loggedData.foo).toEqual('baz');
1525+
expect(loggedData.env).toEqual(additionalDimensions.env);
1526+
expect(loggedData).toEqual({
1527+
_aws: {
1528+
CloudWatchMetrics: [
1529+
{
1530+
Dimensions: [['service', 'foo', 'env']],
1531+
Metrics: [
1532+
{
1533+
Name: testMetric,
1534+
Unit: MetricUnits.Count,
1535+
},
1536+
],
1537+
Namespace: TEST_NAMESPACE,
1538+
},
1539+
],
1540+
Timestamp: mockDate.getTime(),
1541+
},
1542+
service: 'service_undefined',
1543+
[testMetric]: 10,
1544+
env: 'dev',
1545+
foo: 'baz',
1546+
});
1547+
});
1548+
15041549
test('it should log additional dimensions correctly', () => {
15051550
// Prepare
15061551
const testMetric = 'test-metric';

0 commit comments

Comments
 (0)