< Summary

Information
Class: ArturRios.Util.WebApi.Handlers.TracePropagationHandler
Assembly: ArturRios.Util.WebApi
File(s): D:\Repositories\dotnet-webapi-util\src\Handlers\TracePropagationHandler.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 12
Coverable lines: 12
Total lines: 36
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage
0%
Covered methods: 0
Fully covered methods: 0
Total methods: 1
Method coverage: 0%
Full method coverage: 0%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
SendAsync(...)0%4260%

File(s)

D:\Repositories\dotnet-webapi-util\src\Handlers\TracePropagationHandler.cs

#LineLine coverage
 1using System.Diagnostics;
 2
 3namespace ArturRios.Util.WebApi.Handlers;
 4
 5/// <summary>
 6///     Propagates the W3C traceparent header on outgoing HttpClient requests.
 7///     Register this as an HttpMessageHandler for typed/named HttpClients.
 8/// </summary>
 9public class TracePropagationHandler : DelegatingHandler
 10{
 11    private const string TraceParentHeader = "traceparent";
 12
 13    /// <summary>Adds the current <see cref="Activity"/>'s W3C <c>traceparent</c> header to the outgoing
 14    /// request, if one isn't already present, before delegating to the inner handler.</summary>
 15    /// <param name="request">The outgoing HTTP request.</param>
 16    /// <param name="cancellationToken">A token to cancel the send operation.</param>
 17    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
 18        CancellationToken cancellationToken)
 019    {
 020        var activity = Activity.Current;
 21
 022        if (activity is null)
 023        {
 024            return base.SendAsync(request, cancellationToken);
 25        }
 26
 027        var traceParent = $"00-{activity.TraceId}-{activity.SpanId}-{(activity.Recorded ? "01" : "00")}";
 28
 029        if (!request.Headers.Contains(TraceParentHeader))
 030        {
 031            request.Headers.Add(TraceParentHeader, traceParent);
 032        }
 33
 034        return base.SendAsync(request, cancellationToken);
 035    }
 36}