public void ApiVersionIsNotSanitizedByDefault() { HttpMessageSanitizer sanitizer = ClientDiagnostics.CreateMessageSanitizer(ClientOptions.Default.Diagnostics); var uriBuilder = new RequestUriBuilder(); uriBuilder.Reset(new Uri("http://localhost/")); uriBuilder.AppendQuery("api-version", "2021-11-01"); Assert.AreEqual("http://localhost/?api-version=2021-11-01", sanitizer.SanitizeUrl(uriBuilder.ToString())); }
public void QueryIsSanitizedAppendQuery() { var sanitizer = new HttpMessageSanitizer(Array.Empty <string>(), Array.Empty <string>(), "*"); var uriBuilder = new RequestUriBuilder(); uriBuilder.Reset(new Uri("http://localhost/")); uriBuilder.AppendQuery("a", "b"); Assert.AreEqual("http://localhost/?a=*", sanitizer.SanitizeUrl(uriBuilder.ToString())); }
public void QueryIsSanitized(string input, string expected) { var sanitizer = new HttpMessageSanitizer(new[] { "A", "a1", "a-2" }, Array.Empty <string>(), "*"); Assert.AreEqual("http://localhost/" + expected, sanitizer.SanitizeUrl("http://localhost/" + input)); }
public void CanRemoveApiVersionFromLoggedQueryParams() { var options = new DefaultClientOptions(); options.Diagnostics.LoggedQueryParameters.Remove("api-version"); HttpMessageSanitizer sanitizer = ClientDiagnostics.CreateMessageSanitizer(options.Diagnostics); var uriBuilder = new RequestUriBuilder(); uriBuilder.Reset(new Uri("http://localhost/")); uriBuilder.AppendQuery("api-version", "2021-11-01"); Assert.AreEqual("http://localhost/?api-version=REDACTED", sanitizer.SanitizeUrl(uriBuilder.ToString())); }
private async ValueTask ProcessAsync(HttpMessage message, ReadOnlyMemory <HttpPipelinePolicy> pipeline, bool async) { using var scope = new DiagnosticScope("Azure.Core.Http.Request", s_diagnosticSource, message, s_activitySource, DiagnosticScope.ActivityKind.Client); scope.AddAttribute("http.method", message.Request.Method.Method); scope.AddAttribute("http.url", _sanitizer.SanitizeUrl(message.Request.Uri.ToString())); scope.AddAttribute("requestId", message.Request.ClientRequestId); if (_resourceProviderNamespace != null) { scope.AddAttribute("az.namespace", _resourceProviderNamespace); } if (message.Request.Headers.TryGetValue("User-Agent", out string?userAgent)) { scope.AddAttribute("http.user_agent", userAgent); } scope.Start(); if (async) { await ProcessNextAsync(message, pipeline, true).ConfigureAwait(false); } else { ProcessNextAsync(message, pipeline, false).EnsureCompleted(); } scope.AddAttribute("http.status_code", message.Response.Status, static i => i.ToString(CultureInfo.InvariantCulture)); if (message.Response.Headers.RequestId is string serviceRequestId) { scope.AddAttribute("serviceRequestId", serviceRequestId); } // Set the status to UNSET so the AppInsights doesn't try to infer it from the status code scope.AddAttribute("otel.status_code", message.Response.IsError ? "ERROR" : "UNSET"); }
private string FormatUri(RequestUriBuilder requestUri) { return(_sanitizer.SanitizeUrl(requestUri.ToString())); }