You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							113 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							113 lines
						
					
					
						
							2.7 KiB
						
					
					
				| 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) | |
| 		} | |
| 	} | |
| }
 |