Skip to content

Commit 578960d

Browse files
author
Alan Churley
committed
Exposing purge stored metrics function
1 parent 79126f0 commit 578960d

File tree

4 files changed

+33
-11
lines changed

4 files changed

+33
-11
lines changed

packages/metrics/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,5 @@
5454
"url": "https://github.com/awslabs/aws-lambda-powertools-typescript/issues"
5555
},
5656
"dependencies": {
57-
"lodash": "^4.17.21"
5857
}
5958
}

packages/metrics/src/Metrics.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ class Metrics implements MetricsInterface {
9595
};
9696
}
9797

98+
public purgeStoredMetrics(): void {
99+
const target = this.serializeMetrics();
100+
console.log(JSON.stringify(target));
101+
this.storedMetrics = {};
102+
}
103+
98104
public serializeMetrics(): EmfOutput {
99105
const metricDefinitions = Object.values(this.storedMetrics).map((metricDefinition) => ({
100106
Name: metricDefinition.name,
@@ -177,12 +183,6 @@ class Metrics implements MetricsInterface {
177183
return <EnvironmentVariablesService> this.envVarsService;
178184
}
179185

180-
private purgeStoredMetrics(): void {
181-
const target = this.serializeMetrics();
182-
console.log(JSON.stringify(target));
183-
this.storedMetrics = {};
184-
}
185-
186186
private setCustomConfigService(customConfigService?: ConfigServiceInterface): void {
187187
this.customConfigService = customConfigService? customConfigService : undefined;
188188
}

packages/metrics/src/MetricsInterface.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ import { Metrics } from './Metrics';
22
import { MetricUnit, EmfOutput, HandlerMethodDecorator, Dimensions, DecoratorOptions } from '../types';
33

44
interface MetricsInterface {
5-
addMetric(name: string, unit:MetricUnit, value:number): void
6-
clearMetrics(): void
7-
logMetrics(options?: DecoratorOptions): HandlerMethodDecorator
85
addDimension(name: string, value: string): void
96
addDimensions(dimensions: {[key: string]: string}): void
107
addMetadata(key: string, value: string): void
11-
clearMetadata(): void
8+
addMetric(name: string, unit:MetricUnit, value:number): void
129
clearDimensions(): void
10+
clearMetadata(): void
11+
clearMetrics(): void
1312
clearDefaultDimensions(): void
13+
logMetrics(options?: DecoratorOptions): HandlerMethodDecorator
14+
purgeStoredMetrics(): void
1415
serializeMetrics(): EmfOutput
1516
setDefaultDimensions(dimensions: Dimensions): void
1617
singleMetric(): Metrics

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,28 @@ describe('Class: Metrics', () => {
377377

378378
new LambdaFunction().handler(dummyEvent, dummyContext, () => console.log('Lambda invoked!'));
379379
});
380+
381+
test('Purge Stored Metrics should log and clear', () => {
382+
const metrics = new Metrics({ namespace: 'test' });
383+
const extraCount = 10;
384+
class LambdaFunction implements LambdaInterface {
385+
@metrics.logMetrics()
386+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
387+
// @ts-ignore
388+
public handler<TEvent, TResult>(_event: TEvent, _context: Context, _callback: Callback<TResult>): void | Promise<TResult> {
389+
metrics.addMetric(`test_name_1`, MetricUnits.Count, 1);
390+
metrics.purgeStoredMetrics();
391+
}
392+
}
393+
394+
new LambdaFunction().handler(dummyEvent, dummyContext, () => console.log('Lambda invoked!'));
395+
const loggedData = [ JSON.parse(consoleSpy.mock.calls[0][0]), JSON.parse(consoleSpy.mock.calls[1][0]) ];
396+
397+
expect(console.log).toBeCalledTimes(2);
398+
expect(loggedData[0]._aws.CloudWatchMetrics[0].Metrics.length).toBe(1);
399+
expect(loggedData[1]._aws.CloudWatchMetrics[0].Metrics.length).toBe(0);
400+
});
401+
380402
});
381403

382404
describe('Feature: Custom Config Service', () => {

0 commit comments

Comments
 (0)