@@ -144,6 +144,28 @@ function emitMetrics(
144144 }
145145}
146146
147+ function emitSupCampaignClientMetric (
148+ letterEvent : PreparedEvents ,
149+ supplier : string ,
150+ status : MetricStatus ,
151+ deps : Deps ,
152+ ) {
153+ const namespace = "supplier-allocator" ;
154+ const clientId = letterEvent ? letterEvent . data . clientId : "unknown" ;
155+ const campaignId = letterEvent ? letterEvent . data . campaignId : "unknown" ;
156+ const dimensions : Record < string , string > = {
157+ Supplier : supplier ,
158+ ClientId : clientId ,
159+ CampaignId : campaignId || "unknown" ,
160+ } ;
161+ const metric : MetricEntry = {
162+ key : status ,
163+ value : 1 ,
164+ unit : Unit . Count ,
165+ } ;
166+ deps . logger . info ( buildEMFObject ( namespace , dimensions , metric ) ) ;
167+ }
168+
147169export default function createSupplierAllocatorHandler ( deps : Deps ) : SQSHandler {
148170 return async ( event : SQSEvent ) => {
149171 const batchItemFailures : SQSBatchItemFailure [ ] = [ ] ;
@@ -153,8 +175,9 @@ export default function createSupplierAllocatorHandler(deps: Deps): SQSHandler {
153175 const tasks = event . Records . map ( async ( record ) => {
154176 let supplier = "unknown" ;
155177 let priority = "unknown" ;
178+ let letterEvent : PreparedEvents | undefined ;
156179 try {
157- const letterEvent : unknown = JSON . parse ( record . body ) ;
180+ letterEvent = JSON . parse ( record . body ) as PreparedEvents ;
158181
159182 deps . logger . info ( {
160183 description : "Extracted letter event" ,
@@ -163,8 +186,8 @@ export default function createSupplierAllocatorHandler(deps: Deps): SQSHandler {
163186
164187 validateType ( letterEvent ) ;
165188
166- const supplierSpec = getSupplier ( letterEvent as PreparedEvents , deps ) ;
167- await getSupplierFromConfig ( letterEvent as PreparedEvents , deps ) ;
189+ const supplierSpec = getSupplier ( letterEvent , deps ) ;
190+ await getSupplierFromConfig ( letterEvent , deps ) ;
168191
169192 supplier = supplierSpec . supplierId ;
170193 priority = String ( supplierSpec . priority ) ;
@@ -199,6 +222,15 @@ export default function createSupplierAllocatorHandler(deps: Deps): SQSHandler {
199222 ) ;
200223
201224 incrementMetric ( perAllocationSuccess , supplier , priority ) ;
225+ // increment clientid
226+ // increment campaignid
227+ // emit metric with current supplier, clientId and campaignId
228+ emitSupCampaignClientMetric (
229+ letterEvent ,
230+ supplier ,
231+ MetricStatus . Success ,
232+ deps ,
233+ ) ;
202234 } catch ( error ) {
203235 deps . logger . error ( {
204236 description : "Error processing allocation of record" ,
@@ -208,6 +240,12 @@ export default function createSupplierAllocatorHandler(deps: Deps): SQSHandler {
208240 } ) ;
209241 incrementMetric ( perAllocationFailure , supplier , priority ) ;
210242 batchItemFailures . push ( { itemIdentifier : record . messageId } ) ;
243+ emitSupCampaignClientMetric (
244+ letterEvent as PreparedEvents ,
245+ supplier ,
246+ MetricStatus . Failure ,
247+ deps ,
248+ ) ;
211249 }
212250 } ) ;
213251
0 commit comments