< Summary

Information
Class: Elsa.Diagnostics.OpenTelemetry.Services.OpenTelemetrySourceRegistry
Assembly: Elsa.Diagnostics.OpenTelemetry
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Diagnostics.OpenTelemetry/Services/OpenTelemetrySourceRegistry.cs
Line coverage
88%
Covered lines: 22
Uncovered lines: 3
Coverable lines: 25
Total lines: 59
Line coverage: 88%
Branch coverage
83%
Covered branches: 5
Total branches: 6
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor()100%210%
get_DroppedCount()100%11100%
MarkSeen(...)100%44100%
List()100%11100%
RemoveOldestResource()50%2283.33%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Diagnostics.OpenTelemetry/Services/OpenTelemetrySourceRegistry.cs

#LineLine coverage
 1using Elsa.Diagnostics.OpenTelemetry.Contracts;
 2using Elsa.Diagnostics.OpenTelemetry.Models;
 3using Elsa.Diagnostics.OpenTelemetry.Options;
 4using Microsoft.Extensions.Options;
 5
 6namespace Elsa.Diagnostics.OpenTelemetry.Services;
 7
 8public class OpenTelemetrySourceRegistry : IOpenTelemetrySourceRegistry
 9{
 1610    private readonly object _lock = new();
 1611    private readonly Dictionary<string, TelemetryResource> _resources = new(StringComparer.OrdinalIgnoreCase);
 12    private readonly int _capacity;
 13    private long _droppedCount;
 14
 1615    public OpenTelemetrySourceRegistry(IOptions<OpenTelemetryDiagnosticsOptions> options)
 16    {
 1617        _capacity = Math.Max(1, options.Value.ResourceCapacity);
 1618    }
 19
 020    public OpenTelemetrySourceRegistry() : this(Microsoft.Extensions.Options.Options.Create(new OpenTelemetryDiagnostics
 21    {
 022    }
 23
 24    public long DroppedCount
 25    {
 26        get
 27        {
 228            lock (_lock)
 229                return _droppedCount;
 230        }
 31    }
 32
 33    public void MarkSeen(TelemetryResource resource)
 34    {
 1535        lock (_lock)
 36        {
 1537            if (!_resources.ContainsKey(resource.Id) && _resources.Count >= _capacity)
 138                RemoveOldestResource();
 39
 1540            _resources[resource.Id] = resource;
 1541        }
 1542    }
 43
 44    public IReadOnlyCollection<TelemetryResource> List()
 45    {
 746        lock (_lock)
 1947            return _resources.Values.OrderBy(x => x.ServiceName, StringComparer.OrdinalIgnoreCase).ThenBy(x => x.Id, Str
 748    }
 49
 50    private void RemoveOldestResource()
 51    {
 452        var oldest = _resources.Values.OrderBy(x => x.LastSeen).ThenBy(x => x.Id, StringComparer.OrdinalIgnoreCase).Firs
 153        if (oldest == null)
 054            return;
 55
 156        _resources.Remove(oldest.Id);
 157        _droppedCount++;
 158    }
 59}