Skip to content

Commit 8181b48

Browse files
authored
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 fab6110 commit 8181b48

File tree

3 files changed

+54
-6
lines changed

3 files changed

+54
-6
lines changed

Diff for: .gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,5 @@ site
4949
tmp
5050

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

Diff for: packages/metrics/src/Metrics.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -440,8 +440,10 @@ class Metrics extends Utility implements MetricsInterface {
440440
);
441441

442442
const dimensionNames = [
443-
...Object.keys(this.defaultDimensions),
444-
...Object.keys(this.dimensions),
443+
...new Set([
444+
...Object.keys(this.defaultDimensions),
445+
...Object.keys(this.dimensions),
446+
]),
445447
];
446448

447449
return {

Diff for: packages/metrics/tests/unit/Metrics.test.ts

+48-3
Original file line numberDiff line numberDiff line change
@@ -466,9 +466,7 @@ describe('Class: Metrics', () => {
466466
}
467467

468468
// Act & Assess
469-
expect(() =>
470-
metrics.addDimensions(dimensionsToBeAdded)
471-
).not.toThrowError();
469+
metrics.addDimensions(dimensionsToBeAdded);
472470
expect(Object.keys(metrics['dimensions']).length).toBe(
473471
MAX_DIMENSION_COUNT
474472
);
@@ -1505,6 +1503,53 @@ describe('Class: Metrics', () => {
15051503
});
15061504
});
15071505

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

0 commit comments

Comments
 (0)