< Summary

Information
Class: IceRpc.Metrics.MetricsInterceptor
Assembly: IceRpc.Metrics
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Metrics/MetricsInterceptor.cs
Tag: 275_13775359185
Line coverage
87%
Covered lines: 21
Uncovered lines: 3
Coverable lines: 24
Total lines: 55
Line coverage: 87.5%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage
66%
Covered methods: 2
Total methods: 3
Method coverage: 66.6%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
InvokeAsync()100%11100%
.ctor(...)100%11100%

File(s)

/home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Metrics/MetricsInterceptor.cs

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using IceRpc.Extensions.DependencyInjection;
 4using IceRpc.Metrics.Internal;
 5using System.Diagnostics.Metrics;
 6
 7namespace IceRpc.Metrics;
 8
 9/// <summary>An interceptor that publishes invocation metrics using a singleton meter named "IceRpc.Invocation".
 10/// </summary>
 11/// <seealso cref="Meter"/>
 12/// <seealso cref="MetricsPipelineExtensions"/>
 13/// <seealso cref="MetricsInvokerBuilderExtensions"/>
 14public class MetricsInterceptor : IInvoker
 15{
 16    private readonly IInvoker _next;
 17    private readonly InvocationMetrics _invocationMetrics;
 18
 19    /// <summary>Constructs a metrics interceptor.</summary>
 20    /// <param name="next">The next invoker in the invocation pipeline.</param>
 21    public MetricsInterceptor(IInvoker next)
 022        : this(next, InvocationMetrics.Instance)
 023    {
 024    }
 25
 26    /// <inheritdoc/>
 27    public async Task<IncomingResponse> InvokeAsync(OutgoingRequest request, CancellationToken cancellationToken)
 328    {
 329        _invocationMetrics.RequestStart();
 30        try
 331        {
 332            return await _next.InvokeAsync(request, cancellationToken).ConfigureAwait(false);
 33        }
 134        catch (OperationCanceledException)
 135        {
 136            _invocationMetrics.RequestCancel();
 137            throw;
 38        }
 139        catch
 140        {
 141            _invocationMetrics.RequestFailure();
 142            throw;
 43        }
 44        finally
 345        {
 346            _invocationMetrics.RequestStop();
 347        }
 148    }
 49
 350    internal MetricsInterceptor(IInvoker next, InvocationMetrics invocationMetrics)
 351    {
 352        _next = next;
 353        _invocationMetrics = invocationMetrics;
 354    }
 55}