Skip to content

Commit

Permalink
fix(metrics): deduplicate dimensions when serialising (#1780)
Browse files Browse the repository at this point in the history
* fix: deduplicate dimensions when serializing

* fix tests

* remove tsbuildinfo

* remove whitespace

* fix gitignore again

* play some sonar games

* fix test
  • Loading branch information
am29d authored Nov 2, 2023
1 parent fab6110 commit 8181b48
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 6 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,5 @@ site
tmp

# TS build files
tsconfig.tsbuildinfo
tsconfig.tsbuildinfo
.tsbuildinfo
6 changes: 4 additions & 2 deletions packages/metrics/src/Metrics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -440,8 +440,10 @@ class Metrics extends Utility implements MetricsInterface {
);

const dimensionNames = [
...Object.keys(this.defaultDimensions),
...Object.keys(this.dimensions),
...new Set([
...Object.keys(this.defaultDimensions),
...Object.keys(this.dimensions),
]),
];

return {
Expand Down
51 changes: 48 additions & 3 deletions packages/metrics/tests/unit/Metrics.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -466,9 +466,7 @@ describe('Class: Metrics', () => {
}

// Act & Assess
expect(() =>
metrics.addDimensions(dimensionsToBeAdded)
).not.toThrowError();
metrics.addDimensions(dimensionsToBeAdded);
expect(Object.keys(metrics['dimensions']).length).toBe(
MAX_DIMENSION_COUNT
);
Expand Down Expand Up @@ -1505,6 +1503,53 @@ describe('Class: Metrics', () => {
});
});

test('it should log dimensions once when default dimensions are set and addDimension is called', () => {
// Prepare
const additionalDimensions = {
foo: 'bar',
env: 'dev',
};
const testMetric = 'test-metric';
const metrics: Metrics = new Metrics({
defaultDimensions: additionalDimensions,
namespace: TEST_NAMESPACE,
});

// Act
metrics.addMetric(testMetric, MetricUnits.Count, 10);
metrics.addDimension('foo', 'baz');
const loggedData = metrics.serializeMetrics();

// Assess
expect(loggedData._aws.CloudWatchMetrics[0].Dimensions[0].length).toEqual(
3
);
expect(loggedData.service).toEqual(defaultServiceName);
expect(loggedData.foo).toEqual('baz');
expect(loggedData.env).toEqual(additionalDimensions.env);
expect(loggedData).toEqual({
_aws: {
CloudWatchMetrics: [
{
Dimensions: [['service', 'foo', 'env']],
Metrics: [
{
Name: testMetric,
Unit: MetricUnits.Count,
},
],
Namespace: TEST_NAMESPACE,
},
],
Timestamp: mockDate.getTime(),
},
service: 'service_undefined',
[testMetric]: 10,
env: 'dev',
foo: 'baz',
});
});

test('it should log additional dimensions correctly', () => {
// Prepare
const testMetric = 'test-metric';
Expand Down

0 comments on commit 8181b48

Please sign in to comment.