@@ -2,11 +2,14 @@ import { SQSBatchItemFailure, SQSEvent, SQSHandler } from "aws-lambda";
22import { PublishCommand } from "@aws-sdk/client-sns" ;
33import { LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-events" ;
44import { 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" ;
57import {
68 UpdateLetterCommand ,
79 UpdateLetterCommandSchema ,
810} from "../contracts/letters" ;
911import { Deps } from "../config/deps" ;
12+ import { MetricEntry , MetricStatus , buildEMFObject } from "../utils/metrics" ;
1013
1114export 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