cubefs

Форк
0
52 строки · 855.0 Байт
1
package hystrix
2

3
import (
4
	"sync"
5

6
	"github.com/afex/hystrix-go/hystrix/rolling"
7
)
8

9
type poolMetrics struct {
10
	Mutex   *sync.RWMutex
11
	Updates chan poolMetricsUpdate
12

13
	Name              string
14
	MaxActiveRequests *rolling.Number
15
	Executed          *rolling.Number
16
}
17

18
type poolMetricsUpdate struct {
19
	activeCount int
20
}
21

22
func newPoolMetrics(name string) *poolMetrics {
23
	m := &poolMetrics{}
24
	m.Name = name
25
	m.Updates = make(chan poolMetricsUpdate)
26
	m.Mutex = &sync.RWMutex{}
27

28
	m.Reset()
29

30
	go m.Monitor()
31

32
	return m
33
}
34

35
func (m *poolMetrics) Reset() {
36
	m.Mutex.Lock()
37
	defer m.Mutex.Unlock()
38

39
	m.MaxActiveRequests = rolling.NewNumber()
40
	m.Executed = rolling.NewNumber()
41
}
42

43
func (m *poolMetrics) Monitor() {
44
	for u := range m.Updates {
45
		m.Mutex.RLock()
46

47
		m.Executed.Increment(1)
48
		m.MaxActiveRequests.UpdateMax(float64(u.activeCount))
49

50
		m.Mutex.RUnlock()
51
	}
52
}
53

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

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

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

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