< Summary

Information
Class: Orchestrator.Infrastructure.Langfuse.LangfuseRetryLoggingHandler
Assembly: Orchestrator
File(s): /home/runner/work/KicktippAi/KicktippAi/src/Orchestrator/Infrastructure/Langfuse/LangfuseRetryLoggingHandler.cs
Line coverage
100%
Covered lines: 20
Uncovered lines: 0
Coverable lines: 20
Total lines: 42
Line coverage: 100%
Branch coverage
80%
Covered branches: 8
Total branches: 10
Branch coverage: 80%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
SendAsync()66.67%66100%
ShouldLogPotentialRetry(...)100%44100%

File(s)

/home/runner/work/KicktippAi/KicktippAi/src/Orchestrator/Infrastructure/Langfuse/LangfuseRetryLoggingHandler.cs

#LineLine coverage
 1using System.Net;
 2using Microsoft.Extensions.Logging;
 3
 4namespace Orchestrator.Infrastructure.Langfuse;
 5
 6internal sealed class LangfuseRetryLoggingHandler : DelegatingHandler
 7{
 8    private readonly ILogger<LangfuseRetryLoggingHandler> _logger;
 9
 110    public LangfuseRetryLoggingHandler(ILogger<LangfuseRetryLoggingHandler> logger)
 11    {
 112        _logger = logger;
 113    }
 14
 15    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellat
 16    {
 117        var response = await base.SendAsync(request, cancellationToken);
 18
 119        if (ShouldLogPotentialRetry(response.StatusCode))
 20        {
 121            var retryMetadata = LangfuseRetryAfterUtility.GetRetryAfterMetadata(response.Headers);
 122            _logger.LogWarning(
 123                "Langfuse request {Method} {Path} returned {StatusCode} ({ReasonPhrase}). Retry-After: {RetryAfterHeader
 124                request.Method.Method,
 125                request.RequestUri?.PathAndQuery ?? string.Empty,
 126                (int)response.StatusCode,
 127                response.ReasonPhrase,
 128                retryMetadata.RetryAfterHeaderValue,
 129                retryMetadata.RetryAfterDelay,
 130                retryMetadata.RetryAfterAtUtc);
 31        }
 32
 133        return response;
 134    }
 35
 36    private static bool ShouldLogPotentialRetry(HttpStatusCode statusCode)
 37    {
 138        return statusCode == HttpStatusCode.RequestTimeout
 139            || statusCode == HttpStatusCode.TooManyRequests
 140            || (int)statusCode >= 500;
 41    }
 42}