snowflake/proxy/lib/util.go
Cecylia Bocovich 939062c7dd
Remove ThroughputSummary from bytesLogger
This was leftover from when we used to log the total throughput of
connections when they close. It should be removed for privacy reasons as
mentioned in
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40079
2023-10-30 12:42:45 -04:00

71 lines
1.9 KiB
Go

package snowflake_proxy
import (
"time"
)
// bytesLogger is an interface which is used to allow logging the throughput
// of the Snowflake. A default bytesLogger(bytesNullLogger) does nothing.
type bytesLogger interface {
AddOutbound(int64)
AddInbound(int64)
GetStat() (in int64, out int64)
}
// bytesNullLogger Default bytesLogger does nothing.
type bytesNullLogger struct{}
// AddOutbound in bytesNullLogger does nothing
func (b bytesNullLogger) AddOutbound(amount int64) {}
// AddInbound in bytesNullLogger does nothing
func (b bytesNullLogger) AddInbound(amount int64) {}
func (b bytesNullLogger) GetStat() (in int64, out int64) { return -1, -1 }
// bytesSyncLogger uses channels to safely log from multiple sources with output
// occuring at reasonable intervals.
type bytesSyncLogger struct {
outboundChan, inboundChan chan int64
outbound, inbound int64
outEvents, inEvents int
start time.Time
}
// 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()
b.start = time.Now()
return b
}
func (b *bytesSyncLogger) log() {
for {
select {
case amount := <-b.outboundChan:
b.outbound += amount
b.outEvents++
case amount := <-b.inboundChan:
b.inbound += amount
b.inEvents++
}
}
}
// AddOutbound add a number of bytes to the outbound total reported by the logger
func (b *bytesSyncLogger) AddOutbound(amount int64) {
b.outboundChan <- amount
}
// AddInbound add a number of bytes to the inbound total reported by the logger
func (b *bytesSyncLogger) AddInbound(amount int64) {
b.inboundChan <- amount
}
func (b *bytesSyncLogger) GetStat() (in int64, out int64) { return b.inbound, b.outbound }
func formatTraffic(amount int64) (value int64, unit string) { return amount / 1000, "KB" }