status-go/vendor/github.com/afex/hystrix-go/hystrix/pool_metrics.go

53 lines
855 B
Go

package hystrix
import (
"sync"
"github.com/afex/hystrix-go/hystrix/rolling"
)
type poolMetrics struct {
Mutex *sync.RWMutex
Updates chan poolMetricsUpdate
Name string
MaxActiveRequests *rolling.Number
Executed *rolling.Number
}
type poolMetricsUpdate struct {
activeCount int
}
func newPoolMetrics(name string) *poolMetrics {
m := &poolMetrics{}
m.Name = name
m.Updates = make(chan poolMetricsUpdate)
m.Mutex = &sync.RWMutex{}
m.Reset()
go m.Monitor()
return m
}
func (m *poolMetrics) Reset() {
m.Mutex.Lock()
defer m.Mutex.Unlock()
m.MaxActiveRequests = rolling.NewNumber()
m.Executed = rolling.NewNumber()
}
func (m *poolMetrics) Monitor() {
for u := range m.Updates {
m.Mutex.RLock()
m.Executed.Increment(1)
m.MaxActiveRequests.UpdateMax(float64(u.activeCount))
m.Mutex.RUnlock()
}
}