@@ -6,6 +6,7 @@ namespace ServiceControl.Audit.Persistence.PostgreSQL.UnitOfWork;
66using System . Threading . Tasks ;
77using Npgsql ;
88using ServiceControl . Audit . Auditing ;
9+ using ServiceControl . Audit . Monitoring ;
910using ServiceControl . Audit . Persistence . Monitoring ;
1011using ServiceControl . Audit . Persistence . UnitOfWork ;
1112using ServiceControl . SagaAudit ;
@@ -23,18 +24,14 @@ public PostgreSQLAuditIngestionUnitOfWork(NpgsqlConnection connection, NpgsqlTra
2324
2425 public async ValueTask DisposeAsync ( )
2526 {
27+ await transaction . CommitAsync ( ) ;
2628 await transaction . DisposeAsync ( ) ;
2729 await connection . DisposeAsync ( ) ;
2830 }
2931
30- public async Task CompleteAsync ( CancellationToken cancellationToken )
32+ public async Task RecordProcessedMessage ( ProcessedMessage processedMessage , ReadOnlyMemory < byte > body , CancellationToken cancellationToken )
3133 {
32- await transaction . CommitAsync ( cancellationToken ) ;
33- }
34-
35- public async Task RecordProcessedMessage ( ProcessedMessage processedMessage , ReadOnlyMemory < byte > body , CancellationToken cancellationToken = default )
36- {
37- object GetMetadata ( string key ) => processedMessage . MessageMetadata . TryGetValue ( key , out var value ) ? value ?? DBNull . Value : DBNull . Value ;
34+ T GetMetadata < T > ( string key ) => processedMessage . MessageMetadata . TryGetValue ( key , out var value ) ? ( T ) value ?? default : default ;
3835
3936 // Insert ProcessedMessage into processed_messages table
4037 var cmd = new NpgsqlCommand ( @"
@@ -59,18 +56,19 @@ INSERT INTO processed_messages (
5956 cmd . Parameters . AddWithValue ( "body" , DBNull . Value ) ;
6057 }
6158 cmd . Parameters . AddWithValue ( "unique_message_id" , processedMessage . UniqueMessageId ?? ( object ) DBNull . Value ) ;
62- cmd . Parameters . AddWithValue ( "message_metadata" , JsonSerializer . Serialize ( processedMessage . MessageMetadata ) ) ;
63- cmd . Parameters . AddWithValue ( "headers" , JsonSerializer . Serialize ( processedMessage . Headers ) ) ;
59+ cmd . Parameters . AddWithValue ( "message_metadata" , JsonSerializer . SerializeToDocument ( processedMessage . MessageMetadata ) ) ;
60+ cmd . Parameters . AddWithValue ( "headers" , JsonSerializer . SerializeToDocument ( processedMessage . Headers ) ) ;
6461 cmd . Parameters . AddWithValue ( "processed_at" , processedMessage . ProcessedAt ) ;
65- cmd . Parameters . AddWithValue ( "message_id" , GetMetadata ( "MessageId" ) ) ;
66- cmd . Parameters . AddWithValue ( "message_type" , GetMetadata ( "MessageType" ) ) ;
67- cmd . Parameters . AddWithValue ( "is_system_message" , GetMetadata ( "IsSystemMessage" ) ) ;
68- cmd . Parameters . AddWithValue ( "time_sent" , GetMetadata ( "TimeSent" ) ) ;
69- cmd . Parameters . AddWithValue ( "receiving_endpoint_name" , GetMetadata ( "ReceivingEndpoint" ) ) ;
70- cmd . Parameters . AddWithValue ( "critical_time" , GetMetadata ( "CriticalTime" ) ) ;
71- cmd . Parameters . AddWithValue ( "processing_time" , GetMetadata ( "ProcessingTime" ) ) ;
72- cmd . Parameters . AddWithValue ( "delivery_time" , GetMetadata ( "DeliveryTime" ) ) ;
73- cmd . Parameters . AddWithValue ( "conversation_id" , GetMetadata ( "ConversationId" ) ) ;
62+ cmd . Parameters . AddWithValue ( "message_id" , GetMetadata < string > ( "MessageId" ) ) ;
63+ cmd . Parameters . AddWithValue ( "message_type" , GetMetadata < string > ( "MessageType" ) ) ;
64+ cmd . Parameters . AddWithValue ( "is_system_message" , GetMetadata < bool > ( "IsSystemMessage" ) ) ;
65+ cmd . Parameters . AddWithValue ( "time_sent" , GetMetadata < DateTime > ( "TimeSent" ) ) ;
66+ cmd . Parameters . AddWithValue ( "receiving_endpoint_name" , GetMetadata < EndpointDetails > ( "ReceivingEndpoint" ) . Name ) ;
67+ cmd . Parameters . AddWithValue ( "critical_time" , GetMetadata < TimeSpan > ( "CriticalTime" ) ) ;
68+ cmd . Parameters . AddWithValue ( "processing_time" , GetMetadata < TimeSpan > ( "ProcessingTime" ) ) ;
69+ cmd . Parameters . AddWithValue ( "delivery_time" , GetMetadata < TimeSpan > ( "DeliveryTime" ) ) ;
70+ cmd . Parameters . AddWithValue ( "conversation_id" , GetMetadata < string > ( "ConversationId" ) ) ;
71+ cmd . Parameters . AddWithValue ( "status" , ( int ) ( GetMetadata < bool > ( "IsRetried" ) ? MessageStatus . ResolvedSuccessfully : MessageStatus . Successful ) ) ;
7472
7573 await cmd . ExecuteNonQueryAsync ( cancellationToken ) ;
7674 }
0 commit comments