mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
147 lines
2.9 KiB
Go
147 lines
2.9 KiB
Go
package fileSystem
|
|
|
|
import (
|
|
"encoding/json"
|
|
"sync"
|
|
)
|
|
|
|
const (
|
|
// Operations that will be running serializely
|
|
StatsSetsHit = 100
|
|
StatsSetsMiss = 101
|
|
StatsDeletesHit = 102
|
|
StatsDeletesMiss = 103
|
|
StatsUpdatesHit = 104
|
|
StatsUpdatesMiss = 105
|
|
StatsTestAndSetsHit = 106
|
|
StatsTestAndSetsMiss = 107
|
|
StatsRecoveryHit = 108
|
|
StatsRecoveryMiss = 109
|
|
|
|
// concurrent operations
|
|
StatsGetsHit = 200
|
|
StatsGetsMiss = 201
|
|
|
|
StatsWatchHit = 300
|
|
StatsWatchMiss = 301
|
|
StatsInWatchingNum = 302
|
|
|
|
StatsSaveHit = 400
|
|
StatsSaveMiss = 401
|
|
)
|
|
|
|
type EtcdStats struct {
|
|
|
|
// Lock for synchronization
|
|
rwlock sync.RWMutex
|
|
|
|
// Number of get requests
|
|
GetsHit uint64 `json:"gets_hits"`
|
|
GetsMiss uint64 `json:"gets_misses"`
|
|
|
|
// Number of sets requests
|
|
SetsHit uint64 `json:"sets_hits"`
|
|
SetsMiss uint64 `json:"sets_misses"`
|
|
|
|
// Number of delete requests
|
|
DeletesHit uint64 `json:"deletes_hits"`
|
|
DeletesMiss uint64 `json:"deletes_misses"`
|
|
|
|
// Number of update requests
|
|
UpdatesHit uint64 `json:"updates_hits"`
|
|
UpdatesMiss uint64 `json:"updates_misses"`
|
|
|
|
// Number of testAndSet requests
|
|
TestAndSetsHit uint64 `json:"testAndSets_hits"`
|
|
TestAndSetsMiss uint64 `json:"testAndSets_misses"`
|
|
|
|
// Number of Watch requests
|
|
WatchHit uint64 `json:"watch_hit"`
|
|
WatchMiss uint64 `json:"watch_miss"`
|
|
InWatchingNum uint64 `json:"in_watching_number"`
|
|
|
|
// Number of save requests
|
|
SaveHit uint64 `json:"save_hit"`
|
|
SaveMiss uint64 `json:"save_miss"`
|
|
|
|
// Number of recovery requests
|
|
RecoveryHit uint64 `json:"recovery_hit"`
|
|
RecoveryMiss uint64 `json:"recovery_miss"`
|
|
}
|
|
|
|
func newStats() *EtcdStats {
|
|
e := new(EtcdStats)
|
|
return e
|
|
}
|
|
|
|
// Status() return the statistics info of etcd storage its recent start
|
|
func (e *EtcdStats) GetStats() []byte {
|
|
b, _ := json.Marshal(e)
|
|
return b
|
|
}
|
|
|
|
func (e *EtcdStats) TotalReads() uint64 {
|
|
return e.GetsHit + e.GetsMiss
|
|
}
|
|
|
|
func (e *EtcdStats) TotalWrites() uint64 {
|
|
return e.SetsHit + e.SetsMiss +
|
|
e.DeletesHit + e.DeletesMiss +
|
|
e.UpdatesHit + e.UpdatesMiss +
|
|
e.TestAndSetsHit + e.TestAndSetsMiss
|
|
}
|
|
|
|
func (e *EtcdStats) IncStats(field int) {
|
|
if field >= 200 {
|
|
e.rwlock.Lock()
|
|
|
|
switch field {
|
|
case StatsGetsHit:
|
|
e.GetsHit++
|
|
case StatsGetsMiss:
|
|
e.GetsMiss++
|
|
case StatsWatchHit:
|
|
e.WatchHit++
|
|
case StatsWatchMiss:
|
|
e.WatchMiss++
|
|
case StatsInWatchingNum:
|
|
e.InWatchingNum++
|
|
case StatsSaveHit:
|
|
e.SaveHit++
|
|
case StatsSaveMiss:
|
|
e.SaveMiss++
|
|
}
|
|
|
|
e.rwlock.Unlock()
|
|
|
|
} else {
|
|
e.rwlock.RLock()
|
|
|
|
switch field {
|
|
case StatsSetsHit:
|
|
e.SetsHit++
|
|
case StatsSetsMiss:
|
|
e.SetsMiss++
|
|
case StatsDeletesHit:
|
|
e.DeletesHit++
|
|
case StatsDeletesMiss:
|
|
e.DeletesMiss++
|
|
case StatsUpdatesHit:
|
|
e.UpdatesHit++
|
|
case StatsUpdatesMiss:
|
|
e.UpdatesMiss++
|
|
case StatsTestAndSetsHit:
|
|
e.TestAndSetsHit++
|
|
case StatsTestAndSetsMiss:
|
|
e.TestAndSetsMiss++
|
|
case StatsRecoveryHit:
|
|
e.RecoveryHit++
|
|
case StatsRecoveryMiss:
|
|
e.RecoveryMiss++
|
|
}
|
|
|
|
e.rwlock.RUnlock()
|
|
}
|
|
|
|
}
|