prometheus-net
66 строк · 1.8 Кб
1namespace Prometheus;2
3public static class TimerExtensions4{
5private sealed class Timer : ITimer6{7private readonly ValueStopwatch _stopwatch = ValueStopwatch.StartNew();8private readonly Action<double> _observeDurationAction;9
10public Timer(IObserver observer)11{12_observeDurationAction = observer.Observe;13}14
15public Timer(IGauge gauge)16{17_observeDurationAction = gauge.Set;18}19
20public Timer(ICounter counter)21{22_observeDurationAction = counter.Inc;23}24
25public TimeSpan ObserveDuration()26{27var duration = _stopwatch.GetElapsedTime();28_observeDurationAction(duration.TotalSeconds);29
30return duration;31}32
33public void Dispose()34{35ObserveDuration();36}37}38
39/// <summary>40/// Enables you to easily report elapsed seconds in the value of an observer.41/// Dispose of the returned instance to report the elapsed duration.42/// </summary>43public static ITimer NewTimer(this IObserver observer)44{45return new Timer(observer);46}47
48/// <summary>49/// Enables you to easily report elapsed seconds in the value of a gauge.50/// Dispose of the returned instance to report the elapsed duration.51/// </summary>52public static ITimer NewTimer(this IGauge gauge)53{54return new Timer(gauge);55}56
57/// <summary>58/// Enables you to easily report elapsed seconds in the value of a counter.59/// The duration (in seconds) will be added to the value of the counter.60/// Dispose of the returned instance to report the elapsed duration.61/// </summary>62public static ITimer NewTimer(this ICounter counter)63{64return new Timer(counter);65}66}
67