< Summary

Information
Class: NGql.Core.Observability.PoolingObservability
Assembly: NGql.Core
File(s): /home/runner/work/NGql/NGql/src/Core/Observability/PoolingObservability.cs
Line coverage
100%
Covered lines: 12
Uncovered lines: 0
Coverable lines: 12
Total lines: 57
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
RecordThreadLocalHit(...)100%11100%
RecordGlobalPoolHit(...)100%11100%
RecordAllocation(...)100%11100%

File(s)

/home/runner/work/NGql/NGql/src/Core/Observability/PoolingObservability.cs

#LineLine coverage
 1using System.Runtime.CompilerServices;
 2
 3namespace NGql.Core.Observability;
 4
 5/// <summary>
 6/// Specialized observability for pooling operations with detailed cache performance tracking
 7/// </summary>
 8internal static class PoolingObservability
 9{
 10    // Cache levels for standardized naming
 11    private const string ThreadLocalCache = "thread_local";
 12    private const string GlobalPool = "global_pool";
 13    private const string Allocation = "allocation";
 14
 15    /// <summary>
 16    /// Records a thread-local cache hit with observability
 17    /// </summary>
 18    [MethodImpl(MethodImplOptions.AggressiveInlining)]
 19    internal static void RecordThreadLocalHit(string poolType)
 20    {
 21        // Metrics
 762922        NGqlTelemetry.RecordPoolOperation(poolType, "get", ThreadLocalCache, -1);
 23
 24        // Tracing (only if active listener exists)
 762925        using var activity = NGqlActivity.StartPooling(poolType, "get")
 762926            .WithPoolingTags(poolType, ThreadLocalCache, -1);
 1525827    }
 28
 29    /// <summary>
 30    /// Records a global pool hit with observability
 31    /// </summary>
 32    [MethodImpl(MethodImplOptions.AggressiveInlining)]
 33    internal static void RecordGlobalPoolHit(string poolType, int currentPoolSize)
 34    {
 35        // Metrics
 181836        NGqlTelemetry.RecordPoolOperation(poolType, "get", GlobalPool, currentPoolSize);
 37
 38        // Tracing (only if active listener exists)
 181839        using var activity = NGqlActivity.StartPooling(poolType, "get")
 181840            .WithPoolingTags(poolType, GlobalPool, currentPoolSize);
 363641    }
 42
 43    /// <summary>
 44    /// Records a new allocation (cache miss) with observability
 45    /// </summary>
 46    [MethodImpl(MethodImplOptions.AggressiveInlining)]
 47    internal static void RecordAllocation(string poolType)
 48    {
 49        // Metrics
 129050        NGqlTelemetry.RecordPoolOperation(poolType, "allocate", Allocation, 0);
 51
 52        // Tracing (only if active listener exists)
 129053        using var activity = NGqlActivity.StartPooling(poolType, "allocate")
 129054            .WithPoolingTags(poolType, Allocation, 0);
 258055    }
 56
 57}