|
@@ -12,6 +12,8 @@ type LeaderStats struct {
|
|
|
// TODO(jonboulle): clarify that these are IDs, not names
|
|
// TODO(jonboulle): clarify that these are IDs, not names
|
|
|
Leader string `json:"leader"`
|
|
Leader string `json:"leader"`
|
|
|
Followers map[string]*FollowerStats `json:"followers"`
|
|
Followers map[string]*FollowerStats `json:"followers"`
|
|
|
|
|
+
|
|
|
|
|
+ sync.Mutex
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// NewLeaderStats generates a new LeaderStats with the given id as leader
|
|
// NewLeaderStats generates a new LeaderStats with the given id as leader
|
|
@@ -22,6 +24,18 @@ func NewLeaderStats(id string) *LeaderStats {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func (ls *LeaderStats) Follower(name string) *FollowerStats {
|
|
|
|
|
+ ls.Lock()
|
|
|
|
|
+ defer ls.Unlock()
|
|
|
|
|
+ fs, ok := ls.Followers[name]
|
|
|
|
|
+ if !ok {
|
|
|
|
|
+ fs = &FollowerStats{}
|
|
|
|
|
+ fs.Latency.Minimum = 1 << 63
|
|
|
|
|
+ ls.Followers[name] = fs
|
|
|
|
|
+ }
|
|
|
|
|
+ return fs
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// FollowerStats encapsulates various statistics about a follower in an etcd cluster
|
|
// FollowerStats encapsulates various statistics about a follower in an etcd cluster
|
|
|
type FollowerStats struct {
|
|
type FollowerStats struct {
|
|
|
Latency struct {
|
|
Latency struct {
|