commit 1116bc81c86580316e13b07ecd8d7f0a3ac5ffd5 Author: Shelikhoo xiaokangwang@outlook.com Date: Mon Dec 20 15:42:16 2021 +0000
Add Proxy Event Logger --- proxy/lib/pt_event_logger.go | 49 ++++++++++++++++++++++++++++++++++++++++++++ proxy/main.go | 10 +++++++++ 2 files changed, 59 insertions(+)
diff --git a/proxy/lib/pt_event_logger.go b/proxy/lib/pt_event_logger.go new file mode 100644 index 0000000..5804614 --- /dev/null +++ b/proxy/lib/pt_event_logger.go @@ -0,0 +1,49 @@ +package snowflake_proxy + +import ( + "fmt" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/task" + "time" + + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" +) + +func NewProxyEventLogger(logPeriod time.Duration) event.SnowflakeEventReceiver { + el := &logEventLogger{} + el.task = &task.Periodic{Interval: logPeriod, Execute: el.logTick} + el.task.Start() + return el +} + +type logEventLogger struct { + inboundSum int + outboundSum int + connectionCount int + logPeriod time.Duration + task *task.Periodic +} + +func (p *logEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { + switch e.(type) { + case event.EventOnProxyConnectionOver: + e := e.(event.EventOnProxyConnectionOver) + p.inboundSum += e.InboundTraffic + p.outboundSum += e.OutboundTraffic + p.connectionCount += 1 + } +} + +func (p *logEventLogger) logTick() error { + inbound, inboundUnit := formatTraffic(p.inboundSum) + outbound, outboundUnit := formatTraffic(p.inboundSum) + fmt.Printf("In the last %v, there are %v connections. Traffic Relaied ↑ %v %v, ↓ %v %v.", + p.logPeriod.String(), p.connectionCount, inbound, inboundUnit, outbound, outboundUnit) + p.outboundSum = 0 + p.inboundSum = 0 + p.connectionCount = 0 + return nil +} + +func (p *logEventLogger) Close() error { + return p.task.Close() +} diff --git a/proxy/main.go b/proxy/main.go index b85dde0..de31913 100644 --- a/proxy/main.go +++ b/proxy/main.go @@ -2,6 +2,7 @@ package main
import ( "flag" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "io" "log" "os" @@ -21,9 +22,17 @@ func main() { relayURL := flag.String("relay", sf.DefaultRelayURL, "websocket relay URL") NATTypeMeasurementInterval := flag.Duration("nat-retest-interval", time.Hour*24, "the time interval in second before NAT type is retested, 0s disables retest. Valid time units are "s", "m", "h". ") + SummaryInterval := flag.Duration("summary-interval", time.Hour, + "the time interval to output summary, 0s disables retest. Valid time units are "s", "m", "h". ")
flag.Parse()
+ periodicEventLogger := sf.NewProxyEventLogger(*SummaryInterval) + + eventLogger := event.NewSnowflakeEventDispatcher() + + eventLogger.AddSnowflakeEventListener(periodicEventLogger) + proxy := sf.SnowflakeProxy{ Capacity: uint(*capacity), STUNURL: *stunURL, @@ -32,6 +41,7 @@ func main() { RelayURL: *relayURL,
NATTypeMeasurementInterval: *NATTypeMeasurementInterval, + EventDispatcher: eventLogger, }
var logOutput io.Writer = os.Stderr
tor-commits@lists.torproject.org