33 using System ;
44 using System . Collections . Generic ;
55 using System . Diagnostics ;
6+ using System . Diagnostics . Metrics ;
67 using System . Text . Json ;
78 using System . Threading . Tasks ;
89 using Infrastructure ;
1516 using ServiceControl . Audit . Persistence . Monitoring ;
1617 using ServiceControl . EndpointPlugin . Messages . SagaState ;
1718 using ServiceControl . Infrastructure ;
18- using ServiceControl . Infrastructure . Metrics ;
1919 using ServiceControl . SagaAudit ;
2020
21- class AuditPersister
21+ class AuditPersister ( IAuditIngestionUnitOfWorkFactory unitOfWorkFactory ,
22+ IEnrichImportedAuditMessages [ ] enrichers ,
23+ IMessageSession messageSession ,
24+ Lazy < IMessageDispatcher > messageDispatcher )
2225 {
23- public AuditPersister ( IAuditIngestionUnitOfWorkFactory unitOfWorkFactory ,
24- IEnrichImportedAuditMessages [ ] enrichers ,
25- Counter ingestedAuditMeter , Counter ingestedSagaAuditMeter , Meter auditBulkInsertDurationMeter ,
26- Meter sagaAuditBulkInsertDurationMeter , Meter bulkInsertCommitDurationMeter , IMessageSession messageSession ,
27- Lazy < IMessageDispatcher > messageDispatcher )
28- {
29- this . unitOfWorkFactory = unitOfWorkFactory ;
30- this . enrichers = enrichers ;
31-
32- this . ingestedAuditMeter = ingestedAuditMeter ;
33- this . ingestedSagaAuditMeter = ingestedSagaAuditMeter ;
34- this . auditBulkInsertDurationMeter = auditBulkInsertDurationMeter ;
35- this . sagaAuditBulkInsertDurationMeter = sagaAuditBulkInsertDurationMeter ;
36- this . bulkInsertCommitDurationMeter = bulkInsertCommitDurationMeter ;
37- this . messageSession = messageSession ;
38- this . messageDispatcher = messageDispatcher ;
39- }
40-
4126 public async Task < IReadOnlyList < MessageContext > > Persist ( IReadOnlyList < MessageContext > contexts )
4227 {
4328 var stopwatch = Stopwatch . StartNew ( ) ;
@@ -51,7 +36,6 @@ public async Task<IReadOnlyList<MessageContext>> Persist(IReadOnlyList<MessageCo
5136 IAuditIngestionUnitOfWork unitOfWork = null ;
5237 try
5338 {
54-
5539 // deliberately not using the using statement because we dispose async explicitly
5640 unitOfWork = await unitOfWorkFactory . StartNew ( contexts . Count ) ;
5741 var inserts = new List < Task > ( contexts . Count ) ;
@@ -89,12 +73,13 @@ public async Task<IReadOnlyList<MessageContext>> Persist(IReadOnlyList<MessageCo
8973 Logger . Debug ( "Adding audit message for bulk storage" ) ;
9074 }
9175
92- using ( auditBulkInsertDurationMeter . Measure ( ) )
93- {
94- await unitOfWork . RecordProcessedMessage ( processedMessage , context . Body ) ;
95- }
76+ var auditSw = Stopwatch . StartNew ( ) ;
77+ await unitOfWork . RecordProcessedMessage ( processedMessage , context . Body ) ;
78+ auditSw . Stop ( ) ;
79+
80+ auditBulkInsertDurationMeter . Record ( auditSw . ElapsedMilliseconds ) ;
9681
97- ingestedAuditMeter . Mark ( ) ;
82+ ingestedAuditMeter . Add ( 1 ) ;
9883 }
9984 else if ( context . Extensions . TryGet ( out SagaSnapshot sagaSnapshot ) )
10085 {
@@ -103,12 +88,13 @@ public async Task<IReadOnlyList<MessageContext>> Persist(IReadOnlyList<MessageCo
10388 Logger . Debug ( "Adding SagaSnapshot message for bulk storage" ) ;
10489 }
10590
106- using ( sagaAuditBulkInsertDurationMeter . Measure ( ) )
107- {
108- await unitOfWork . RecordSagaSnapshot ( sagaSnapshot ) ;
109- }
91+ var sagaSw = Stopwatch . StartNew ( ) ;
92+ await unitOfWork . RecordSagaSnapshot ( sagaSnapshot ) ;
93+ sagaSw . Stop ( ) ;
94+
95+ sagaAuditBulkInsertDurationMeter . Record ( sagaSw . ElapsedMilliseconds ) ;
11096
111- ingestedSagaAuditMeter . Mark ( ) ;
97+ ingestedSagaAuditMeter . Add ( 1 ) ;
11298 }
11399
114100 storedContexts . Add ( context ) ;
@@ -146,10 +132,10 @@ public async Task<IReadOnlyList<MessageContext>> Persist(IReadOnlyList<MessageCo
146132 try
147133 {
148134 // this can throw even though dispose is never supposed to throw
149- using ( bulkInsertCommitDurationMeter . Measure ( ) )
150- {
151- await unitOfWork . DisposeAsync ( ) ;
152- }
135+ var commitSw = Stopwatch . StartNew ( ) ;
136+ await unitOfWork . DisposeAsync ( ) ;
137+ commitSw . Stop ( ) ;
138+ bulkInsertCommitDurationMeter . Record ( commitSw . ElapsedMilliseconds ) ;
153139 }
154140 catch ( Exception e )
155141 {
@@ -263,6 +249,7 @@ async Task ProcessAuditMessage(MessageContext context)
263249 {
264250 Logger . Debug ( $ "Emitting { commandsToEmit . Count } commands and { messagesToEmit . Count } control messages.") ;
265251 }
252+
266253 foreach ( var commandToEmit in commandsToEmit )
267254 {
268255 await messageSession . Send ( commandToEmit ) ;
@@ -301,16 +288,12 @@ await messageDispatcher.Value.Dispatch(new TransportOperations(messagesToEmit.To
301288 }
302289 }
303290
304- readonly Counter ingestedAuditMeter ;
305- readonly Counter ingestedSagaAuditMeter ;
306- readonly Meter auditBulkInsertDurationMeter ;
307- readonly Meter sagaAuditBulkInsertDurationMeter ;
308- readonly Meter bulkInsertCommitDurationMeter ;
309- readonly IMessageSession messageSession ;
310- readonly Lazy < IMessageDispatcher > messageDispatcher ;
291+ readonly Counter < long > ingestedAuditMeter = AuditMetrics . Meter . CreateCounter < long > ( $ "{ AuditMetrics . Prefix } .ingested_audit_messages") ; // metrics.GetCounter("Audit ingestion - ingested audit");
292+ readonly Counter < long > ingestedSagaAuditMeter = AuditMetrics . Meter . CreateCounter < long > ( $ "{ AuditMetrics . Prefix } .ingested_saga_audits") ; // metrics.GetCounter("Audit ingestion - ingested audit");
293+ readonly Histogram < double > auditBulkInsertDurationMeter = AuditMetrics . Meter . CreateHistogram < double > ( $ "{ AuditMetrics . Prefix } .audit_bulk_insert_duration_ms") ; // metrics.GetCounter("Audit ingestion - ingested audit");
294+ readonly Histogram < double > sagaAuditBulkInsertDurationMeter = AuditMetrics . Meter . CreateHistogram < double > ( $ "{ AuditMetrics . Prefix } .saga_bulk_insert_duration_ms") ; // metrics.GetCounter("Audit ingestion - ingested audit");
295+ readonly Histogram < double > bulkInsertCommitDurationMeter = AuditMetrics . Meter . CreateHistogram < double > ( $ "{ AuditMetrics . Prefix } .audit_commit_duration_ms") ; // metrics.GetCounter("Audit ingestion - ingested audit");
311296
312- readonly IEnrichImportedAuditMessages [ ] enrichers ;
313- readonly IAuditIngestionUnitOfWorkFactory unitOfWorkFactory ;
314297 static readonly ILog Logger = LogManager . GetLogger < AuditPersister > ( ) ;
315298 }
316299}
0 commit comments