< Summary

Information
Class: IceRpc.Internal.Metrics
Assembly: IceRpc
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc/Internal/Metrics.cs
Tag: 276_17717543480
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
Total methods: 8
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{
 411    internal static readonly Metrics ClientMetrics = new("IceRpc.Client");
 412    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/>
 630    public void Dispose() => _meter.Dispose();
 31
 1432    internal Metrics(string meterName)
 1433    {
 1434        _meter = new Meter(meterName);
 35
 1436        _meter.CreateObservableUpDownCounter(
 1437            "active-connections",
 638            () => Volatile.Read(ref _activeConnections),
 1439            "Connections",
 1440            "Active Connections");
 41
 1442        _meter.CreateObservableUpDownCounter(
 1443            "pending-connections",
 644            () => Volatile.Read(ref _pendingConnections),
 1445            "Connections",
 1446            "Pending Connections");
 47
 1448        _meter.CreateObservableCounter(
 1449            "total-connections",
 650            () => Volatile.Read(ref _totalConnections),
 1451            "Connections",
 1452            "Total Connections");
 53
 1454        _meter.CreateObservableCounter(
 1455            "total-failed-connections",
 656            () => Volatile.Read(ref _totalFailedConnections),
 1457            "Connections",
 1458            "Total Failed Connections");
 1459    }
 60
 61    internal void ConnectStart()
 30962    {
 30963        Debug.Assert(_totalConnections >= 0);
 30964        Debug.Assert(_pendingConnections >= 0);
 30965        Interlocked.Increment(ref _totalConnections);
 30966        Interlocked.Increment(ref _pendingConnections);
 30967    }
 68
 69    internal void ConnectStop()
 30770    {
 30771        Debug.Assert(_pendingConnections > 0);
 30772        Interlocked.Decrement(ref _pendingConnections);
 30773    }
 74
 75    internal void ConnectSuccess()
 23276    {
 23277        Debug.Assert(_activeConnections >= 0);
 23278        Interlocked.Increment(ref _activeConnections);
 23279    }
 80
 81    internal void ConnectionFailure()
 22382    {
 22383        Debug.Assert(_totalFailedConnections >= 0);
 22384        Debug.Assert(_totalFailedConnections < _totalConnections);
 22385        Interlocked.Increment(ref _totalFailedConnections);
 22386    }
 87
 88    internal void ConnectionDisconnected()
 22889    {
 22890        Debug.Assert(_activeConnections > 0);
 22891        Interlocked.Decrement(ref _activeConnections);
 22892    }
 93}