123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package snowflake_client
- import (
- "log"
- "time"
- )
- const (
- LogTimeInterval = 5 * time.Second
- )
- type bytesLogger interface {
- addOutbound(int64)
- addInbound(int64)
- }
- // Default bytesLogger does nothing.
- type bytesNullLogger struct{}
- func (b bytesNullLogger) addOutbound(amount int64) {}
- func (b bytesNullLogger) addInbound(amount int64) {}
- // bytesSyncLogger uses channels to safely log from multiple sources with output
- // occuring at reasonable intervals.
- type bytesSyncLogger struct {
- outboundChan chan int64
- inboundChan chan int64
- }
- // newBytesSyncLogger returns a new bytesSyncLogger and starts it loggin.
- func newBytesSyncLogger() *bytesSyncLogger {
- b := &bytesSyncLogger{
- outboundChan: make(chan int64, 5),
- inboundChan: make(chan int64, 5),
- }
- go b.log()
- return b
- }
- func (b *bytesSyncLogger) log() {
- var outbound, inbound int64
- var outEvents, inEvents int
- ticker := time.NewTicker(LogTimeInterval)
- for {
- select {
- case <-ticker.C:
- if outEvents > 0 || inEvents > 0 {
- log.Printf("Traffic Bytes (in|out): %d | %d -- (%d OnMessages, %d Sends)",
- inbound, outbound, inEvents, outEvents)
- }
- outbound = 0
- outEvents = 0
- inbound = 0
- inEvents = 0
- case amount := <-b.outboundChan:
- outbound += amount
- outEvents++
- case amount := <-b.inboundChan:
- inbound += amount
- inEvents++
- }
- }
- }
- func (b *bytesSyncLogger) addOutbound(amount int64) {
- b.outboundChan <- amount
- }
- func (b *bytesSyncLogger) addInbound(amount int64) {
- b.inboundChan <- amount
- }
|