mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-12-23 08:47:55 +08:00
112 lines
2.7 KiB
Go
112 lines
2.7 KiB
Go
|
package stats
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type ServerStats struct {
|
||
|
Requests *DurationCounter
|
||
|
Connections *DurationCounter
|
||
|
AssignRequests *DurationCounter
|
||
|
ReadRequests *DurationCounter
|
||
|
WriteRequests *DurationCounter
|
||
|
DeleteRequests *DurationCounter
|
||
|
BytesIn *DurationCounter
|
||
|
BytesOut *DurationCounter
|
||
|
}
|
||
|
|
||
|
type Channels struct {
|
||
|
Connections chan *TimedValue
|
||
|
Requests chan *TimedValue
|
||
|
AssignRequests chan *TimedValue
|
||
|
ReadRequests chan *TimedValue
|
||
|
WriteRequests chan *TimedValue
|
||
|
DeleteRequests chan *TimedValue
|
||
|
BytesIn chan *TimedValue
|
||
|
BytesOut chan *TimedValue
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
Chan *Channels
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
Chan = &Channels{
|
||
|
Connections: make(chan *TimedValue, 100),
|
||
|
Requests: make(chan *TimedValue, 100),
|
||
|
AssignRequests: make(chan *TimedValue, 100),
|
||
|
ReadRequests: make(chan *TimedValue, 100),
|
||
|
WriteRequests: make(chan *TimedValue, 100),
|
||
|
DeleteRequests: make(chan *TimedValue, 100),
|
||
|
BytesIn: make(chan *TimedValue, 100),
|
||
|
BytesOut: make(chan *TimedValue, 100),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewServerStats() *ServerStats {
|
||
|
return &ServerStats{
|
||
|
Requests: NewDurationCounter(),
|
||
|
Connections: NewDurationCounter(),
|
||
|
AssignRequests: NewDurationCounter(),
|
||
|
ReadRequests: NewDurationCounter(),
|
||
|
WriteRequests: NewDurationCounter(),
|
||
|
DeleteRequests: NewDurationCounter(),
|
||
|
BytesIn: NewDurationCounter(),
|
||
|
BytesOut: NewDurationCounter(),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func ConnectionOpen() {
|
||
|
Chan.Connections <- NewTimedValue(time.Now(), 1)
|
||
|
}
|
||
|
func ConnectionClose() {
|
||
|
Chan.Connections <- NewTimedValue(time.Now(), -1)
|
||
|
}
|
||
|
func RequestOpen() {
|
||
|
Chan.Requests <- NewTimedValue(time.Now(), 1)
|
||
|
}
|
||
|
func RequestClose() {
|
||
|
Chan.Requests <- NewTimedValue(time.Now(), -1)
|
||
|
}
|
||
|
func AssignRequest() {
|
||
|
Chan.AssignRequests <- NewTimedValue(time.Now(), 1)
|
||
|
}
|
||
|
func ReadRequest() {
|
||
|
Chan.ReadRequests <- NewTimedValue(time.Now(), 1)
|
||
|
}
|
||
|
func WriteRequest() {
|
||
|
Chan.WriteRequests <- NewTimedValue(time.Now(), 1)
|
||
|
}
|
||
|
func DeleteRequest() {
|
||
|
Chan.DeleteRequests <- NewTimedValue(time.Now(), 1)
|
||
|
}
|
||
|
func BytesIn(val int64) {
|
||
|
Chan.BytesIn <- NewTimedValue(time.Now(), val)
|
||
|
}
|
||
|
func BytesOut(val int64) {
|
||
|
Chan.BytesOut <- NewTimedValue(time.Now(), val)
|
||
|
}
|
||
|
|
||
|
func (ss *ServerStats) Start() {
|
||
|
for {
|
||
|
select {
|
||
|
case tv := <-Chan.Connections:
|
||
|
ss.Connections.Add(tv)
|
||
|
case tv := <-Chan.Requests:
|
||
|
ss.Requests.Add(tv)
|
||
|
case tv := <-Chan.AssignRequests:
|
||
|
ss.AssignRequests.Add(tv)
|
||
|
case tv := <-Chan.ReadRequests:
|
||
|
ss.ReadRequests.Add(tv)
|
||
|
case tv := <-Chan.WriteRequests:
|
||
|
ss.WriteRequests.Add(tv)
|
||
|
case tv := <-Chan.DeleteRequests:
|
||
|
ss.DeleteRequests.Add(tv)
|
||
|
case tv := <-Chan.BytesIn:
|
||
|
ss.BytesIn.Add(tv)
|
||
|
case tv := <-Chan.BytesOut:
|
||
|
ss.BytesOut.Add(tv)
|
||
|
}
|
||
|
}
|
||
|
}
|