log traffic bytes only once every few seconds, along with OnMessage & datachannel.Send counts, to prevent flooded logs

This commit is contained in:
Serene Han 2016-02-18 14:15:22 -08:00
parent a1b7e01c54
commit c4215b5614
3 changed files with 83 additions and 5 deletions

67
client/util.go Normal file
View file

@ -0,0 +1,67 @@
package main
import (
"log"
"time"
)
type BytesInfo struct {
outboundChan chan int
inboundChan chan int
outbound int
inbound int
outEvents int
inEvents int
isLogging bool
}
func (b *BytesInfo) Log() {
b.isLogging = true
var amount int
output := func() {
log.Printf("Traffic Bytes (in|out): %d | %d -- (%d OnMessages, %d Sends)",
b.inbound, b.outbound, b.inEvents, b.outEvents)
b.outbound = 0
b.outEvents = 0
b.inbound = 0
b.inEvents = 0
}
last := time.Now()
for {
select {
case amount = <-b.outboundChan:
b.outbound += amount
b.outEvents++
last := time.Now()
if time.Since(last) > time.Second*5 {
last = time.Now()
output()
}
case amount = <-b.inboundChan:
b.inbound += amount
b.inEvents++
if time.Since(last) > time.Second*5 {
last = time.Now()
output()
}
case <-time.After(time.Second * 5):
if b.inEvents > 0 || b.outEvents > 0 {
output()
}
}
}
}
func (b *BytesInfo) AddOutbound(amount int) {
if !b.isLogging {
return
}
b.outboundChan <- amount
}
func (b *BytesInfo) AddInbound(amount int) {
if !b.isLogging {
return
}
b.inboundChan <- amount
}