commit 1116bc81c86580316e13b07ecd8d7f0a3ac5ffd5
Author: Shelikhoo <xiaokangw...@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 mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to