< Summary

Information
Class: Api.Dev.TrackedRequestDuration
Assembly: Api
File(s): /home/runner/work/Northwind-Api/Northwind-Api/src/Api/Dev/NorthwindMetrics.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 8
Coverable lines: 8
Total lines: 39
Line coverage: 0%
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
.ctor(...)100%210%
Dispose()100%210%

File(s)

/home/runner/work/Northwind-Api/Northwind-Api/src/Api/Dev/NorthwindMetrics.cs

#LineLine coverage
 1using System.Diagnostics.CodeAnalysis;
 2using System.Diagnostics.Metrics;
 3
 4
 5namespace Api.Dev;
 6[ExcludeFromCodeCoverage(Justification = "Development")]
 7public class NorthiwndMetrics {
 8  public const string MeterName = "Northwind-Api";
 9
 10  private readonly Counter<long> _counter;
 11  private readonly Histogram<double> _duration;
 12
 13  public NorthiwndMetrics(IMeterFactory meterFactory) {
 14    var meter = meterFactory.Create(MeterName);
 15    _counter = meter.CreateCounter<long>("northwind.api.request.count");
 16    _duration = meter.CreateHistogram<double>("northwind.api.request.duration", "ms");
 17  }
 18
 19  public void IncreaseRequestCount() {
 20    _counter.Add(1);
 21  }
 22
 23  public TrackedRequestDuration MeasureRequestDuration() {
 24    return new TrackedRequestDuration(_duration);
 25  }
 26}
 27
 28#pragma warning disable S3881 // "IDisposable" should be implemented correctly
 029public class TrackedRequestDuration(Histogram<double> histogram) : IDisposable {
 30#pragma warning restore S3881 // "IDisposable" should be implemented correctly
 031  private readonly long _startTime = TimeProvider.System.GetTimestamp();
 032  private readonly Histogram<double> _histogram = histogram;
 33
 034  public void Dispose() {
 035    var elapsedTime = TimeProvider.System.GetElapsedTime(_startTime);
 036    _histogram.Record(elapsedTime.TotalMilliseconds);
 037    GC.SuppressFinalize(this);
 038  }
 39}