Skip to content

feat(metrics): logMetrics middleware #338

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 32 commits into from
Dec 27, 2021
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
8fbe2dd
feat(metric): add logic, unit tests for the middy middleware
saragerion Dec 17, 2021
79e5aae
chore(metrics): lint changes
saragerion Dec 17, 2021
9c1644d
docs(metrics): logMetric middleware and examples
saragerion Dec 21, 2021
f430195
test(metrics): add array input for middleware
saragerion Dec 21, 2021
69100ce
Update packages/metrics/package.json
saragerion Dec 22, 2021
d3d13ea
Update docs/core/metrics.md
saragerion Dec 22, 2021
ef6a58e
Update docs/core/metrics.md
saragerion Dec 22, 2021
f52e198
Update docs/core/metrics.md
saragerion Dec 22, 2021
d503075
Update docs/core/metrics.md
saragerion Dec 22, 2021
419c8d2
improv(metrics): improve docs, examples, naming
saragerion Dec 27, 2021
f29fc49
chore(metrics): merge conflict
saragerion Dec 27, 2021
ac08ffe
Update packages/metrics/examples/decorator/default-dimensions.ts
saragerion Dec 27, 2021
a42b050
Update packages/metrics/examples/decorator/empty-metrics.ts
saragerion Dec 27, 2021
af2ec16
Update docs/core/metrics.md
saragerion Dec 27, 2021
3a9cd0d
Update docs/core/metrics.md
saragerion Dec 27, 2021
7ea58a8
Update docs/core/metrics.md
saragerion Dec 27, 2021
625b79d
Update docs/core/metrics.md
saragerion Dec 27, 2021
0d5c161
Update docs/core/metrics.md
saragerion Dec 27, 2021
d75c40f
Update packages/metrics/examples/decorator/manual-flushing.ts
saragerion Dec 27, 2021
3d423e5
improv(metrics): logMetricsAfterOrError middleware, examples update
saragerion Dec 27, 2021
2b23c86
improv(metrics): logMetricsAfterOrError middleware, examples update
saragerion Dec 27, 2021
9b295ed
improv(metrics): logMetricsAfterOrError middleware, examples update
saragerion Dec 27, 2021
8269677
Merge branch 'feat/metrics-middleware' of github.com:awslabs/aws-lamb…
saragerion Dec 27, 2021
29d1c05
tests(metrics): fix handlers type
saragerion Dec 27, 2021
d23bbc5
fix(metrics): examples file path
saragerion Dec 27, 2021
7941119
revert(metrics): jest groups
saragerion Dec 27, 2021
3b6b053
chore(metrics): rename examples script, prepending 'decorator'
saragerion Dec 27, 2021
fe6bad1
chore(all): merge
saragerion Dec 27, 2021
0ab77da
fix(metrics): removed empty lint file
saragerion Dec 27, 2021
c909154
ci(all): exclude examples CDK for linting
saragerion Dec 27, 2021
a95f08c
chore(all): lint fix for CDK examples
saragerion Dec 27, 2021
28b9df1
test(metrics): added metrics middleware jest group
saragerion Dec 27, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
329 changes: 238 additions & 91 deletions docs/core/metrics.md

Large diffs are not rendered by default.

231 changes: 0 additions & 231 deletions packages/metrics/.eslintrc.json

This file was deleted.

2 changes: 1 addition & 1 deletion packages/metrics/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Metrics has two global settings that will be used across all metrics emitted:

|Setting|Description|Environment Variable|Constructor Parameter|
|---|---|---|---|
|Metric namespace|Logical container where all metrics will be placed e.g. ServerlessAirline|POWERTOOLS_METRICS_NAMESPACE|namespace|
|Metric namespace|Logical container where all metrics will be placed e.g. serverlessAirline|POWERTOOLS_METRICS_NAMESPACE|namespace|
|Service|Optionally, sets service metric dimension across all metrics e.g. payment|POWERTOOLS_SERVICE_NAME|service|

```typescript
Expand Down
22 changes: 11 additions & 11 deletions packages/metrics/examples/cold-start.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import * as dummyEvent from '../../../tests/resources/events/custom/hello-world.json';
import { context as dummyContext } from '../../../tests/resources/contexts/hello-world';
import { LambdaInterface } from './utils/lambda/LambdaInterface';
import { populateEnvironmentVariables } from '../tests/helpers';
import { Callback, Context } from 'aws-lambda/handler';
import { Metrics, MetricUnits } from '../src';
import middy from '@middy/core';
import { logMetrics } from '../src/middleware/middy';

// Populate runtime
populateEnvironmentVariables();
Expand All @@ -12,15 +12,15 @@ process.env.POWERTOOLS_METRICS_NAMESPACE = 'hello-world';

const metrics = new Metrics();

class Lambda implements LambdaInterface {
const lambdaHandler = async (): Promise<void> => {

@metrics.logMetrics({ captureColdStartMetric: true })
public handler<TEvent, TResult>(_event: TEvent, _context: Context, _callback: Callback<TResult>): void | Promise<TResult> {
metrics.addDimension('OuterDimension', 'true');
metrics.addMetric('test-metric', MetricUnits.Count, 10);
}
metrics.addDimension('custom-dimension', 'true');
metrics.addMetric('test-metric', MetricUnits.Count, 10);

}
};

new Lambda().handler(dummyEvent, dummyContext, () => console.log('Lambda invoked!'));
new Lambda().handler(dummyEvent, dummyContext, () => console.log('Lambda invoked again!'));
const handlerWithMiddleware = middy(lambdaHandler)
.use(logMetrics(metrics, { captureColdStartMetric: true }));

handlerWithMiddleware(dummyEvent, dummyContext, () => console.log('Lambda invoked!'));
handlerWithMiddleware(dummyEvent, dummyContext, () => console.log('Lambda invoked again!'));
24 changes: 14 additions & 10 deletions packages/metrics/examples/constructor-options.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
import * as dummyEvent from '../../../tests/resources/events/custom/hello-world.json';
import { context as dummyContext } from '../../../tests/resources/contexts/hello-world';
import { populateEnvironmentVariables } from '../tests/helpers';
import { Metrics, MetricUnits } from '../src';
import { LambdaInterface } from "./utils/lambda";
import { Callback, Context } from "aws-lambda/handler";
import middy from '@middy/core';
import { logMetrics } from '../src/middleware/middy';

// Populate runtime
populateEnvironmentVariables();
// Additional runtime variables
process.env.POWERTOOLS_METRICS_NAMESPACE = 'hello-world';

const metrics = new Metrics({
namespace: 'hello-world-constructor',
service: 'hello-world-service-constructor'
});

class Lambda implements LambdaInterface {

@metrics.logMetrics()
public handler<TEvent, TResult>(_event: TEvent, _context: Context, _callback: Callback<TResult>): void | Promise<TResult> {
metrics.addMetric('test-metric', MetricUnits.Count, 10);
const lambdaHandler = async (): Promise<void> => {
metrics.addMetric('test-metric', MetricUnits.Count, 10);
};

}
const handlerWithMiddleware = middy(lambdaHandler)
.use(logMetrics(metrics));

}
new Lambda().handler(dummyEvent, dummyContext, () => console.log('Lambda invoked!'));
handlerWithMiddleware(dummyEvent, dummyContext, () => console.log('Lambda invoked!'));
26 changes: 26 additions & 0 deletions packages/metrics/examples/decorator/cold-start.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import * as dummyEvent from '../../../tests/resources/events/custom/hello-world.json';
import { context as dummyContext } from '../../../tests/resources/contexts/hello-world';
import { LambdaInterface } from './utils/lambda/LambdaInterface';
import { populateEnvironmentVariables } from '../tests/helpers';
import { Callback, Context } from 'aws-lambda/handler';
import { Metrics, MetricUnits } from '../src';

// Populate runtime
populateEnvironmentVariables();
// Additional runtime variables
process.env.POWERTOOLS_METRICS_NAMESPACE = 'hello-world';

const metrics = new Metrics();

class Lambda implements LambdaInterface {

@metrics.logMetrics({ captureColdStartMetric: true })
public handler<TEvent, TResult>(_event: TEvent, _context: Context, _callback: Callback<TResult>): void | Promise<TResult> {
metrics.addDimension('OuterDimension', 'true');
metrics.addMetric('test-metric', MetricUnits.Count, 10);
}

}

new Lambda().handler(dummyEvent, dummyContext, () => console.log('Lambda invoked!'));
new Lambda().handler(dummyEvent, dummyContext, () => console.log('Lambda invoked again!'));
21 changes: 21 additions & 0 deletions packages/metrics/examples/decorator/constructor-options.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import * as dummyEvent from '../../../tests/resources/events/custom/hello-world.json';
import { context as dummyContext } from '../../../tests/resources/contexts/hello-world';
import { Metrics, MetricUnits } from '../src';
import { LambdaInterface } from "./utils/lambda";
import { Callback, Context } from "aws-lambda/handler";

const metrics = new Metrics({
namespace: 'hello-world-constructor',
service: 'hello-world-service-constructor'
});

class Lambda implements LambdaInterface {

@metrics.logMetrics()
public handler<TEvent, TResult>(_event: TEvent, _context: Context, _callback: Callback<TResult>): void | Promise<TResult> {
metrics.addMetric('test-metric', MetricUnits.Count, 10);

}

}
new Lambda().handler(dummyEvent, dummyContext, () => console.log('Lambda invoked!'));
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { populateEnvironmentVariables } from '../tests/helpers';

// Populate runtime
populateEnvironmentVariables();
// Additional runtime variables
process.env.POWERTOOLS_METRICS_NAMESPACE = 'hello-world-constructor';
process.env.POWERTOOLS_SERVICE_NAME = 'hello-world-service-constructor';

import * as dummyEvent from '../../../tests/resources/events/custom/hello-world.json';
import { context as dummyContext } from '../../../tests/resources/contexts/hello-world';
import { LambdaInterface } from './utils/lambda/LambdaInterface';
import { Callback, Context } from 'aws-lambda/handler';
import { Metrics, MetricUnits } from '../src';

const metrics = new Metrics({ defaultDimensions:{ 'application': 'hello-world' } });

class Lambda implements LambdaInterface {

@metrics.logMetrics()
public handler<TEvent, TResult>(_event: TEvent, _context: Context, _callback: Callback<TResult>): void | Promise<TResult> {
metrics.addMetric('test-metric', MetricUnits.Count, 10);

}

}

new Lambda().handler(dummyEvent, dummyContext, () => console.log('Lambda invoked!'));
Loading