@ -10,12 +10,16 @@ import (
type streamStats struct {
messageIn int
messageOut int
maxUsers int
start time . Time
mutex sync . Mutex
streamStart time . Time
streamLive bool // True if live
}
func newStreamStats ( ) streamStats {
return streamStats { start : time . Now ( ) }
return streamStats { start : time . Now ( ) , streamLive : false }
}
func ( s * streamStats ) msgInInc ( ) {
@ -23,14 +27,59 @@ func (s *streamStats) msgInInc() {
s . messageIn ++
s . mutex . Unlock ( )
}
func ( s * streamStats ) msgOutInc ( ) {
s . mutex . Lock ( )
s . messageOut ++
s . mutex . Unlock ( )
}
func ( s * streamStats ) updateMaxUsers ( count int ) {
s . mutex . Lock ( )
if count > s . maxUsers {
s . maxUsers = count
}
s . mutex . Unlock ( )
}
func ( s * streamStats ) getMaxUsers ( ) int {
s . mutex . Lock ( )
defer s . mutex . Unlock ( )
return s . maxUsers
}
func ( s * streamStats ) Print ( ) {
s . mutex . Lock ( )
defer s . mutex . Unlock ( )
common . LogInfof ( "Messages In: %d\n" , s . messageIn )
common . LogInfof ( "Messages Out: %d\n" , s . messageOut )
common . LogInfof ( "Max users in chat: %d\n" , s . maxUsers )
common . LogInfof ( "Total Time: %s\n" , time . Since ( s . start ) )
}
func ( s * streamStats ) startStream ( ) {
s . mutex . Lock ( )
defer s . mutex . Unlock ( )
s . streamLive = true
s . streamStart = time . Now ( )
}
func ( s * streamStats ) endStream ( ) {
s . mutex . Lock ( )
defer s . mutex . Unlock ( )
s . streamLive = false
}
func ( s * streamStats ) getStreamLength ( ) time . Duration {
s . mutex . Lock ( )
defer s . mutex . Unlock ( )
if ! s . streamLive {
return 0
}
return time . Since ( s . streamStart )
}