github.com/matm/etcd@v0.3.1-0.20140328024009-5b4a473f1453/server/raft_server_stats.go (about)

     1  package server
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
     7  )
     8  
     9  type raftServerStats struct {
    10  	Name      string    `json:"name"`
    11  	State     string    `json:"state"`
    12  	StartTime time.Time `json:"startTime"`
    13  
    14  	LeaderInfo struct {
    15  		Name      string `json:"leader"`
    16  		Uptime    string `json:"uptime"`
    17  		startTime time.Time
    18  	} `json:"leaderInfo"`
    19  
    20  	RecvAppendRequestCnt uint64  `json:"recvAppendRequestCnt,"`
    21  	RecvingPkgRate       float64 `json:"recvPkgRate,omitempty"`
    22  	RecvingBandwidthRate float64 `json:"recvBandwidthRate,omitempty"`
    23  
    24  	SendAppendRequestCnt uint64  `json:"sendAppendRequestCnt"`
    25  	SendingPkgRate       float64 `json:"sendPkgRate,omitempty"`
    26  	SendingBandwidthRate float64 `json:"sendBandwidthRate,omitempty"`
    27  
    28  	sendRateQueue *statsQueue
    29  	recvRateQueue *statsQueue
    30  }
    31  
    32  func NewRaftServerStats(name string) *raftServerStats {
    33  	return &raftServerStats{
    34  		Name:      name,
    35  		StartTime: time.Now(),
    36  		sendRateQueue: &statsQueue{
    37  			back: -1,
    38  		},
    39  		recvRateQueue: &statsQueue{
    40  			back: -1,
    41  		},
    42  	}
    43  }
    44  
    45  func (ss *raftServerStats) RecvAppendReq(leaderName string, pkgSize int) {
    46  	ss.State = raft.Follower
    47  	if leaderName != ss.LeaderInfo.Name {
    48  		ss.LeaderInfo.Name = leaderName
    49  		ss.LeaderInfo.startTime = time.Now()
    50  	}
    51  
    52  	ss.recvRateQueue.Insert(NewPackageStats(time.Now(), pkgSize))
    53  	ss.RecvAppendRequestCnt++
    54  }
    55  
    56  func (ss *raftServerStats) SendAppendReq(pkgSize int) {
    57  	now := time.Now()
    58  
    59  	if ss.State != raft.Leader {
    60  		ss.State = raft.Leader
    61  		ss.LeaderInfo.Name = ss.Name
    62  		ss.LeaderInfo.startTime = now
    63  	}
    64  
    65  	ss.sendRateQueue.Insert(NewPackageStats(now, pkgSize))
    66  
    67  	ss.SendAppendRequestCnt++
    68  }