Skip to content

Commit a50cc00

Browse files
add metrics to amendment-event-transformer
1 parent 58305e5 commit a50cc00

1 file changed

Lines changed: 49 additions & 1 deletion

File tree

lambdas/api-handler/src/handlers/amendment-event-transformer.ts

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ import { SQSBatchItemFailure, SQSEvent, SQSHandler } from "aws-lambda";
22
import { PublishCommand } from "@aws-sdk/client-sns";
33
import { LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-events";
44
import { mapLetterToCloudEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-mapper";
5+
import { Unit } from "aws-embedded-metrics";
6+
import pino from "pino";
57
import {
68
UpdateLetterCommand,
79
UpdateLetterCommandSchema,
810
} from "../contracts/letters";
911
import { Deps } from "../config/deps";
12+
import { MetricEntry, MetricStatus, buildEMFObject } from "../utils/metrics";
1013

1114
export default function createTransformAmendmentEventHandler(
1215
deps: Deps,
@@ -39,6 +42,11 @@ export default function createTransformAmendmentEventHandler(
3942
messageId: message.messageId,
4043
correlationId: message.messageAttributes.CorrelationId.stringValue,
4144
});
45+
emitSuccessMetrics(
46+
updateLetterCommand.supplierId,
47+
updateLetterCommand.status,
48+
deps.logger,
49+
);
4250
} catch (error) {
4351
deps.logger.error({
4452
description: "Error processing letter status update",
@@ -52,7 +60,7 @@ export default function createTransformAmendmentEventHandler(
5260
});
5361

5462
await Promise.all(tasks);
55-
63+
emitFailedItems(batchItemFailures, deps.logger);
5664
return { batchItemFailures };
5765
};
5866
}
@@ -66,3 +74,43 @@ function buildSnsCommand(
6674
Message: JSON.stringify(letterEvent),
6775
});
6876
}
77+
78+
function emitSuccessMetrics(
79+
supplierId: string,
80+
status: string,
81+
logger: pino.Logger,
82+
) {
83+
const dimensions: Record<string, string> = {
84+
supplier: supplierId,
85+
status,
86+
};
87+
const metric: MetricEntry = {
88+
key: MetricStatus.Success,
89+
value: 1,
90+
unit: Unit.Count,
91+
};
92+
const emf = buildEMFObject("amendment-event-transformer", dimensions, metric);
93+
logger.info(emf);
94+
}
95+
96+
function emitFailedItems(
97+
batchFailures: SQSBatchItemFailure[],
98+
logger: pino.Logger,
99+
) {
100+
for (const item of batchFailures) {
101+
const dimensions: Record<string, string> = {
102+
identifier: item.itemIdentifier,
103+
};
104+
const metric: MetricEntry = {
105+
key: MetricStatus.Failure,
106+
value: 1,
107+
unit: Unit.Count,
108+
};
109+
const emf = buildEMFObject(
110+
"amendment-event-transformer",
111+
dimensions,
112+
metric,
113+
);
114+
logger.info(emf);
115+
}
116+
}

0 commit comments

Comments
 (0)