1 | import awsEmbeddedMetrics from 'aws-embedded-metrics'
|
2 |
|
3 | const defaults = {}
|
4 |
|
5 | const cloudwatchMetricsMiddleware = (opts = {}) => {
|
6 | const { namespace, dimensions } = { ...defaults, ...opts }
|
7 | const cloudwatchMetricsBefore = (request) => {
|
8 | const metrics = awsEmbeddedMetrics.createMetricsLogger()
|
9 |
|
10 |
|
11 | if (namespace) {
|
12 | metrics.setNamespace(namespace)
|
13 | }
|
14 |
|
15 |
|
16 | if (dimensions) {
|
17 | metrics.setDimensions(dimensions)
|
18 | }
|
19 | Object.assign(request.context, { metrics })
|
20 | }
|
21 |
|
22 | const cloudwatchMetricsAfter = async (request) => {
|
23 | await request.context.metrics.flush()
|
24 | }
|
25 | const cloudwatchMetricsOnError = async (request) => {
|
26 | try {
|
27 | await cloudwatchMetricsAfter(request)
|
28 | } catch (e) {}
|
29 | }
|
30 |
|
31 | return {
|
32 | before: cloudwatchMetricsBefore,
|
33 | after: cloudwatchMetricsAfter,
|
34 | onError: cloudwatchMetricsOnError
|
35 | }
|
36 | }
|
37 |
|
38 | export default cloudwatchMetricsMiddleware
|