cubefs
52 строки · 855.0 Байт
1package hystrix
2
3import (
4"sync"
5
6"github.com/afex/hystrix-go/hystrix/rolling"
7)
8
9type poolMetrics struct {
10Mutex *sync.RWMutex
11Updates chan poolMetricsUpdate
12
13Name string
14MaxActiveRequests *rolling.Number
15Executed *rolling.Number
16}
17
18type poolMetricsUpdate struct {
19activeCount int
20}
21
22func newPoolMetrics(name string) *poolMetrics {
23m := &poolMetrics{}
24m.Name = name
25m.Updates = make(chan poolMetricsUpdate)
26m.Mutex = &sync.RWMutex{}
27
28m.Reset()
29
30go m.Monitor()
31
32return m
33}
34
35func (m *poolMetrics) Reset() {
36m.Mutex.Lock()
37defer m.Mutex.Unlock()
38
39m.MaxActiveRequests = rolling.NewNumber()
40m.Executed = rolling.NewNumber()
41}
42
43func (m *poolMetrics) Monitor() {
44for u := range m.Updates {
45m.Mutex.RLock()
46
47m.Executed.Increment(1)
48m.MaxActiveRequests.UpdateMax(float64(u.activeCount))
49
50m.Mutex.RUnlock()
51}
52}
53