mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 11:11:30 -04:00
44 lines
872 B
Go
44 lines
872 B
Go
package main
|
|
|
|
// This code handles periodic statistics logging.
|
|
//
|
|
// The only thing it keeps track of is how many connections had the client_ip
|
|
// parameter. Write true to statsChannel to record a connection with client_ip;
|
|
// write false for without.
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
statsInterval = 24 * time.Hour
|
|
)
|
|
|
|
var (
|
|
statsChannel = make(chan bool)
|
|
)
|
|
|
|
func statsThread() {
|
|
var numClientIP, numConnections uint64
|
|
prevTime := time.Now()
|
|
deadline := time.After(statsInterval)
|
|
for {
|
|
select {
|
|
case v := <-statsChannel:
|
|
if v {
|
|
numClientIP++
|
|
}
|
|
numConnections++
|
|
case <-deadline:
|
|
now := time.Now()
|
|
log.Printf("in the past %.f s, %d/%d connections had client_ip",
|
|
(now.Sub(prevTime)).Seconds(),
|
|
numClientIP, numConnections)
|
|
numClientIP = 0
|
|
numConnections = 0
|
|
prevTime = now
|
|
deadline = time.After(statsInterval)
|
|
}
|
|
}
|
|
}
|