123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 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.ReadRequests:
- ss.ReadRequests.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)
- }
- }
- }
|