kubernetes/vendor/github.com/xiang90/probing/status.go
Tim Hockin 3c0c5ed4e0 Move deps from _workspace/ to vendor/
godep restore
pushd $GOPATH/src/github.com/appc/spec
git co master
popd
go get go4.org/errorutil
rm -rf Godeps
godep save ./...
git add vendor
git add -f $(git ls-files --other vendor/)
git co -- Godeps/LICENSES Godeps/.license_file_state Godeps/OWNERS
2016-05-08 20:30:21 -07:00

97 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package probing
import (
"sync"
"time"
)
var (
// weight factor
α = 0.125
)
type Status interface {
Total() int64
Loss() int64
Health() bool
// Estimated smoothed round trip time
SRTT() time.Duration
// Estimated clock difference
ClockDiff() time.Duration
StopNotify() <-chan struct{}
}
type status struct {
mu sync.Mutex
srtt time.Duration
total int64
loss int64
health bool
clockdiff time.Duration
stopC chan struct{}
}
// SRTT = (1-α) * SRTT + α * RTT
func (s *status) SRTT() time.Duration {
s.mu.Lock()
defer s.mu.Unlock()
return s.srtt
}
func (s *status) Total() int64 {
s.mu.Lock()
defer s.mu.Unlock()
return s.total
}
func (s *status) Loss() int64 {
s.mu.Lock()
defer s.mu.Unlock()
return s.loss
}
func (s *status) Health() bool {
s.mu.Lock()
defer s.mu.Unlock()
return s.health
}
func (s *status) ClockDiff() time.Duration {
s.mu.Lock()
defer s.mu.Unlock()
return s.clockdiff
}
func (s *status) StopNotify() <-chan struct{} {
return s.stopC
}
func (s *status) record(rtt time.Duration, when time.Time) {
s.mu.Lock()
defer s.mu.Unlock()
s.total += 1
s.health = true
s.srtt = time.Duration((1-α)*float64(s.srtt) + α*float64(rtt))
s.clockdiff = time.Now().Sub(when) - s.srtt/2
}
func (s *status) recordFailure() {
s.mu.Lock()
defer s.mu.Unlock()
s.total++
s.health = false
s.loss += 1
}
func (s *status) reset() {
s.mu.Lock()
defer s.mu.Unlock()
s.srtt = 0
s.total = 0
s.health = false
s.clockdiff = 0
}