@@ -75,30 +75,47 @@ public async Task<string> CreateLogEntryWithSubscriptionDetails(CloudEvent cloud
7575 }
7676 }
7777
78- /// <inheritdoc/>
78+ /// <summary>
79+ /// Log response from webhook post to subscriber.
80+ /// Should be called by the storage controller when a webhook POST response is received. The controller action should handle exceptions
81+ /// for better handling of correct status codes
82+ /// </summary>
83+ /// <param name="logEntryDto">A data transfer object passed to the controller endpoint <see cref="LogEntryDto"/></param>
84+ /// <returns>A string representation of the cloud event id</returns>
7985 public async Task < string > CreateWebhookResponseEntry ( LogEntryDto logEntryDto )
8086 {
81- try
87+ var parseResult = Guid . TryParse ( logEntryDto . CloudEventId , out Guid parsedGuid ) ;
88+
89+ if ( ! parseResult )
8290 {
83- var traceLogEntry = new TraceLog
84- {
85- CloudEventId = Guid . Parse ( logEntryDto . CloudEventId ) ,
86- Resource = logEntryDto . CloudEventResource ,
87- EventType = logEntryDto . CloudEventType ,
88- Consumer = logEntryDto . Consumer ,
89- SubscriberEndpoint = logEntryDto . Endpoint . ToString ( ) ,
90- SubscriptionId = logEntryDto . SubscriptionId ,
91- ResponseCode = ( int ? ) logEntryDto . StatusCode ,
92- Activity = TraceLogActivity . WebhookPostResponse
93- } ;
94- await _traceLogRepository . CreateTraceLogEntry ( traceLogEntry ) ;
95- return logEntryDto . CloudEventId ;
91+ _logger . LogError ( "Error creating trace log entry for webhook POST response: Invalid GUID" ) ;
92+ return string . Empty ;
9693 }
97- catch ( Exception exception )
94+
95+ if ( string . IsNullOrEmpty ( logEntryDto . CloudEventId ) || logEntryDto . Endpoint == null || logEntryDto . StatusCode == null )
9896 {
99- _logger . LogError ( exception , "Error creating trace log entry for webhook POST response: {Message}" , exception . Message ) ;
100- throw ;
97+ _logger . LogError (
98+ "Error creating trace log entry for webhook POST response: Missing required input parameters {Id} {Endpoint} {StatusCode}" ,
99+ logEntryDto . CloudEventId ,
100+ logEntryDto . Endpoint ,
101+ logEntryDto . StatusCode ) ;
102+
103+ return string . Empty ;
101104 }
105+
106+ var traceLogEntry = new TraceLog
107+ {
108+ CloudEventId = parsedGuid ,
109+ Resource = logEntryDto . CloudEventResource ,
110+ EventType = logEntryDto . CloudEventType ,
111+ Consumer = logEntryDto . Consumer ,
112+ SubscriberEndpoint = logEntryDto . Endpoint . ToString ( ) ,
113+ SubscriptionId = logEntryDto . SubscriptionId ,
114+ ResponseCode = ( int ? ) logEntryDto . StatusCode ,
115+ Activity = TraceLogActivity . WebhookPostResponse
116+ } ;
117+ await _traceLogRepository . CreateTraceLogEntry ( traceLogEntry ) ;
118+ return logEntryDto . CloudEventId ;
102119 }
103120 }
104121}
0 commit comments