< Summary

Information
Class: IceRpc.Internal.Metrics
Assembly: IceRpc
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc/Internal/Metrics.cs
Tag: 275_13775359185
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()
 31362    {
 31363        Debug.Assert(_totalConnections >= 0);
 31364        Debug.Assert(_pendingConnections >= 0);
 31365        Interlocked.Increment(ref _totalConnections);
 31366        Interlocked.Increment(ref _pendingConnections);
 31367    }
 68
 69    internal void ConnectStop()
 31170    {
 31171        Debug.Assert(_pendingConnections > 0);
 31172        Interlocked.Decrement(ref _pendingConnections);
 31173    }
 74
 75    internal void ConnectSuccess()
 23576    {
 23577        Debug.Assert(_activeConnections >= 0);
 23578        Interlocked.Increment(ref _activeConnections);
 23579    }
 80
 81    internal void ConnectionFailure()
 22782    {
 22783        Debug.Assert(_totalFailedConnections >= 0);
 22784        Debug.Assert(_totalFailedConnections < _totalConnections);
 22785        Interlocked.Increment(ref _totalFailedConnections);
 22786    }
 87
 88    internal void ConnectionDisconnected()
 23189    {
 23190        Debug.Assert(_activeConnections > 0);
 23191        Interlocked.Decrement(ref _activeConnections);
 23192    }
 93}