< Summary

Information
Class: IceRpc.Internal.Metrics
Assembly: IceRpc
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc/Internal/Metrics.cs
Tag: 1321_24790053727
Line coverage
100%
Covered lines: 50
Uncovered lines: 0
Coverable lines: 50
Total lines: 93
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage
100%
Covered methods: 8
Fully covered methods: 8
Total methods: 8
Method coverage: 100%
Full method coverage: 100%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
Dispose()100%11100%
.ctor(...)100%11100%
ConnectStart()100%11100%
ConnectStop()100%11100%
ConnectSuccess()100%11100%
ConnectionFailure()100%11100%
ConnectionDisconnected()100%11100%

File(s)

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

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using System.Diagnostics;
 4using System.Diagnostics.Metrics;
 5
 6namespace IceRpc.Internal;
 7
 8/// <summary>A helper class used to report client and server connection metrics.</summary>
 9internal sealed class Metrics : IDisposable
 10{
 311    internal static readonly Metrics ClientMetrics = new("IceRpc.Client");
 312    internal static readonly Metrics ServerMetrics = new("IceRpc.Server");
 13
 14    // The number of active connections.
 15    private long _activeConnections;
 16
 17    private readonly Meter _meter;
 18
 19    // The number of connections that are being connected.
 20    private long _pendingConnections;
 21
 22    // The number of connection that have been created.
 23    private long _totalConnections;
 24
 25    // The number of connections that start connecting and failed to connect, or connected successfully but
 26    // later terminate due to a failure.
 27    private long _totalFailedConnections;
 28
 29    /// <inheritdoc/>
 330    public void Dispose() => _meter.Dispose();
 31
 932    internal Metrics(string meterName)
 933    {
 934        _meter = new Meter(meterName);
 35
 936        _meter.CreateObservableUpDownCounter(
 937            "active-connections",
 338            () => Volatile.Read(ref _activeConnections),
 939            "Connections",
 940            "Active Connections");
 41
 942        _meter.CreateObservableUpDownCounter(
 943            "pending-connections",
 344            () => Volatile.Read(ref _pendingConnections),
 945            "Connections",
 946            "Pending Connections");
 47
 948        _meter.CreateObservableCounter(
 949            "total-connections",
 350            () => Volatile.Read(ref _totalConnections),
 951            "Connections",
 952            "Total Connections");
 53
 954        _meter.CreateObservableCounter(
 955            "total-failed-connections",
 356            () => Volatile.Read(ref _totalFailedConnections),
 957            "Connections",
 958            "Total Failed Connections");
 959    }
 60
 61    internal void ConnectStart()
 19162    {
 19163        Debug.Assert(_totalConnections >= 0);
 19164        Debug.Assert(_pendingConnections >= 0);
 19165        Interlocked.Increment(ref _totalConnections);
 19166        Interlocked.Increment(ref _pendingConnections);
 19167    }
 68
 69    internal void ConnectStop()
 19070    {
 19071        Debug.Assert(_pendingConnections > 0);
 19072        Interlocked.Decrement(ref _pendingConnections);
 19073    }
 74
 75    internal void ConnectSuccess()
 15376    {
 15377        Debug.Assert(_activeConnections >= 0);
 15378        Interlocked.Increment(ref _activeConnections);
 15379    }
 80
 81    internal void ConnectionFailure()
 12082    {
 12083        Debug.Assert(_totalFailedConnections >= 0);
 12084        Debug.Assert(_totalFailedConnections < _totalConnections);
 12085        Interlocked.Increment(ref _totalFailedConnections);
 12086    }
 87
 88    internal void ConnectionDisconnected()
 15189    {
 15190        Debug.Assert(_activeConnections > 0);
 15191        Interlocked.Decrement(ref _activeConnections);
 15192    }
 93}