diff --git a/src/libraries/System.Net.Http/src/System/Net/Http/HttpClient.cs b/src/libraries/System.Net.Http/src/System/Net/Http/HttpClient.cs index 853c14d76942db..3ed6d7a89d7362 100644 --- a/src/libraries/System.Net.Http/src/System/Net/Http/HttpClient.cs +++ b/src/libraries/System.Net.Http/src/System/Net/Http/HttpClient.cs @@ -227,7 +227,7 @@ private async Task GetStringAsyncCore(HttpRequestMessage request, Cancel } finally { - FinishSend(cts, disposeCts, telemetryStarted, responseContentTelemetryStarted); + FinishSend(cts, disposeCts, response, telemetryStarted, responseContentTelemetryStarted); } } @@ -306,7 +306,7 @@ private async Task GetByteArrayAsyncCore(HttpRequestMessage request, Can } finally { - FinishSend(cts, disposeCts, telemetryStarted, responseContentTelemetryStarted); + FinishSend(cts, disposeCts, response, telemetryStarted, responseContentTelemetryStarted); } } @@ -352,7 +352,7 @@ private async Task GetStreamAsyncCore(HttpRequestMessage request, Cancel } finally { - FinishSend(cts, disposeCts, telemetryStarted, responseContentTelemetryStarted: false); + FinishSend(cts, disposeCts, response, telemetryStarted, responseContentTelemetryStarted: false); } } @@ -496,7 +496,7 @@ public HttpResponseMessage Send(HttpRequestMessage request, HttpCompletionOption } finally { - FinishSend(cts, disposeCts, telemetryStarted, responseContentTelemetryStarted); + FinishSend(cts, disposeCts, response, telemetryStarted, responseContentTelemetryStarted); } } @@ -551,7 +551,7 @@ async Task Core( } finally { - FinishSend(cts, disposeCts, telemetryStarted, responseContentTelemetryStarted); + FinishSend(cts, disposeCts, response, telemetryStarted, responseContentTelemetryStarted); } } } @@ -642,7 +642,7 @@ private static bool StartSend(HttpRequestMessage request) return false; } - private static void FinishSend(CancellationTokenSource cts, bool disposeCts, bool telemetryStarted, bool responseContentTelemetryStarted) + private static void FinishSend(CancellationTokenSource cts, bool disposeCts, HttpResponseMessage? response, bool telemetryStarted, bool responseContentTelemetryStarted) { // Log completion. if (HttpTelemetry.Log.IsEnabled() && telemetryStarted) @@ -652,7 +652,8 @@ private static void FinishSend(CancellationTokenSource cts, bool disposeCts, boo HttpTelemetry.Log.ResponseContentStop(); } - HttpTelemetry.Log.RequestStop(); + int statusCode = response != null ? (int)response.StatusCode : -1; + HttpTelemetry.Log.RequestStop(statusCode); } // Dispose of the CancellationTokenSource if it was created specially for this request diff --git a/src/libraries/System.Net.Http/src/System/Net/Http/HttpMessageInvoker.cs b/src/libraries/System.Net.Http/src/System/Net/Http/HttpMessageInvoker.cs index a06da5b9ed5a27..f300ceaa57f601 100644 --- a/src/libraries/System.Net.Http/src/System/Net/Http/HttpMessageInvoker.cs +++ b/src/libraries/System.Net.Http/src/System/Net/Http/HttpMessageInvoker.cs @@ -40,10 +40,11 @@ public virtual HttpResponseMessage Send(HttpRequestMessage request, Cancellation if (ShouldSendWithTelemetry(request)) { HttpTelemetry.Log.RequestStart(request); - + HttpResponseMessage? response = null; try { - return _handler.Send(request, cancellationToken); + response = _handler.Send(request, cancellationToken); + return response; } catch when (LogRequestFailed(telemetryStarted: true)) { @@ -52,7 +53,8 @@ public virtual HttpResponseMessage Send(HttpRequestMessage request, Cancellation } finally { - HttpTelemetry.Log.RequestStop(); + int statusCode = response != null ? (int)response.StatusCode : -1; + HttpTelemetry.Log.RequestStop(statusCode); } } else @@ -77,10 +79,11 @@ public virtual Task SendAsync(HttpRequestMessage request, C static async Task SendAsyncWithTelemetry(HttpMessageHandler handler, HttpRequestMessage request, CancellationToken cancellationToken) { HttpTelemetry.Log.RequestStart(request); - + HttpResponseMessage? response = null; try { - return await handler.SendAsync(request, cancellationToken).ConfigureAwait(false); + response = await handler.SendAsync(request, cancellationToken).ConfigureAwait(false); + return response; } catch when (LogRequestFailed(telemetryStarted: true)) { @@ -89,7 +92,8 @@ static async Task SendAsyncWithTelemetry(HttpMessageHandler } finally { - HttpTelemetry.Log.RequestStop(); + int statusCode = response != null ? (int)response.StatusCode : -1; + HttpTelemetry.Log.RequestStop(statusCode); } } } diff --git a/src/libraries/System.Net.Http/src/System/Net/Http/HttpTelemetry.cs b/src/libraries/System.Net.Http/src/System/Net/Http/HttpTelemetry.cs index 131748bddf5a8c..5d02b49acea631 100644 --- a/src/libraries/System.Net.Http/src/System/Net/Http/HttpTelemetry.cs +++ b/src/libraries/System.Net.Http/src/System/Net/Http/HttpTelemetry.cs @@ -50,11 +50,11 @@ public void RequestStart(HttpRequestMessage request) request.VersionPolicy); } - [Event(2, Level = EventLevel.Informational)] - public void RequestStop() + [Event(2, Level = EventLevel.Informational, Version = 1)] + public void RequestStop(int statusCode) { Interlocked.Increment(ref _stoppedRequests); - WriteEvent(eventId: 2); + WriteEvent(eventId: 2, statusCode); } [Event(3, Level = EventLevel.Error)]