diff options
author | Shelikhoo <xiaokangwang@outlook.com> | 2022-05-27 17:37:23 +0100 |
---|---|---|
committer | Shelikhoo <xiaokangwang@outlook.com> | 2022-06-16 15:00:10 +0100 |
commit | 2541b13166b9e502c5314536c3c2777fd84db45b (patch) | |
tree | 8cef33dd043d8f11d937486cd52b44657f5f865c /broker | |
parent | fa7d1e2bb77b92452785ce3d03c81a90efc9891e (diff) | |
download | snowflake-2541b13166b9e502c5314536c3c2777fd84db45b.tar.gz snowflake-2541b13166b9e502c5314536c3c2777fd84db45b.zip |
Add distinct IP counter to broker
Diffstat (limited to 'broker')
-rw-r--r-- | broker/broker.go | 17 | ||||
-rw-r--r-- | broker/ipc.go | 1 |
2 files changed, 18 insertions, 0 deletions
diff --git a/broker/broker.go b/broker/broker.go index 9162370..2bf4614 100644 --- a/broker/broker.go +++ b/broker/broker.go @@ -11,6 +11,8 @@ import ( "crypto/tls" "flag" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/bridgefingerprint" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/ipsetsink" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/ipsetsink/sinkcluster" "io" "log" "net/http" @@ -194,6 +196,8 @@ func main() { var certFilename, keyFilename string var disableGeoip bool var metricsFilename string + var ipCountFilename, ipCountMaskingKey string + var ipCountInterval time.Duration var unsafeLogging bool flag.StringVar(&acmeEmail, "acme-email", "", "optional contact email for Let's Encrypt notifications") @@ -210,6 +214,9 @@ func main() { flag.BoolVar(&disableTLS, "disable-tls", false, "don't use HTTPS") flag.BoolVar(&disableGeoip, "disable-geoip", false, "don't use geoip for stats collection") flag.StringVar(&metricsFilename, "metrics-log", "", "path to metrics logging output") + flag.StringVar(&ipCountFilename, "ip-count-log", "", "path to ip count logging output") + flag.StringVar(&ipCountMaskingKey, "ip-count-mask", "", "masking key for ip count logging") + flag.DurationVar(&ipCountInterval, "ip-count-interval", time.Hour, "time interval between each chunk") flag.BoolVar(&unsafeLogging, "unsafe-logging", false, "prevent logs from being scrubbed") flag.Parse() @@ -257,6 +264,16 @@ func main() { } } + if ipCountFilename != "" { + ipCountFile, err := os.OpenFile(ipCountFilename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + + if err != nil { + log.Fatal(err.Error()) + } + ipSetSink := ipsetsink.NewIPSetSink(ipCountMaskingKey) + ctx.metrics.distinctIPWriter = sinkcluster.NewClusterWriter(ipCountFile, ipCountInterval, ipSetSink) + } + go ctx.Broker() i := &IPC{ctx} diff --git a/broker/ipc.go b/broker/ipc.go index f5d4747..30de180 100644 --- a/broker/ipc.go +++ b/broker/ipc.go @@ -106,6 +106,7 @@ func (i *IPC) ProxyPolls(arg messages.Arg, response *[]byte) error { } else { i.ctx.metrics.lock.Lock() i.ctx.metrics.UpdateCountryStats(remoteIP, proxyType, natType) + i.ctx.metrics.RecordIPAddress(remoteIP) i.ctx.metrics.lock.Unlock() } |