prometheus-net

Форк
0
/
TimerExtensions.cs 
66 строк · 1.8 Кб
1
namespace Prometheus;
2

3
public static class TimerExtensions
4
{
5
    private sealed class Timer : ITimer
6
    {
7
        private readonly ValueStopwatch _stopwatch = ValueStopwatch.StartNew();
8
        private readonly Action<double> _observeDurationAction;
9

10
        public Timer(IObserver observer)
11
        {
12
            _observeDurationAction = observer.Observe;
13
        }
14

15
        public Timer(IGauge gauge)
16
        {
17
            _observeDurationAction = gauge.Set;
18
        }
19

20
        public Timer(ICounter counter)
21
        {
22
            _observeDurationAction = counter.Inc;
23
        }
24

25
        public TimeSpan ObserveDuration()
26
        {
27
            var duration = _stopwatch.GetElapsedTime();
28
            _observeDurationAction(duration.TotalSeconds);
29

30
            return duration;
31
        }
32

33
        public void Dispose()
34
        {
35
            ObserveDuration();
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>
43
    public static ITimer NewTimer(this IObserver observer)
44
    {
45
        return 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>
52
    public static ITimer NewTimer(this IGauge gauge)
53
    {
54
        return 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>
62
    public static ITimer NewTimer(this ICounter counter)
63
    {
64
        return new Timer(counter);
65
    }
66
}
67

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.