[tor-commits] [snowflake/master] Log geoip stats of proxies by unique IP

cohosh at torproject.org cohosh at torproject.org
Fri Jun 28 21:32:20 UTC 2019


commit 25f059f4c4adf98a6ae9bdeae731e3f8ff3d609e
Author: Cecylia Bocovich <cohosh at torproject.org>
Date:   Tue Jun 11 15:43:59 2019 -0400

    Log geoip stats of proxies by unique IP
    
    Change it so that we log the geoip country code of proxies if they poll
    within the current metrics epoch. We make sure we log by unique IP
    address
---
 broker/broker.go  | 18 +++++++++---------
 broker/metrics.go | 10 ++++++++--
 2 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/broker/broker.go b/broker/broker.go
index 3795f2b..26fc450 100644
--- a/broker/broker.go
+++ b/broker/broker.go
@@ -149,6 +149,15 @@ func proxyPolls(ctx *BrokerContext, w http.ResponseWriter, r *http.Request) {
 		return
 	}
 	log.Println("Received snowflake: ", id)
+
+	// Log geoip stats
+	remoteIP, _, err := net.SplitHostPort(r.RemoteAddr)
+	if err != nil {
+		log.Println("Error processing proxy IP: ", err.Error())
+	} else {
+		ctx.metrics.UpdateCountryStats(remoteIP)
+	}
+
 	// Wait for a client to avail an offer to the snowflake, or timeout if nil.
 	offer := ctx.RequestOffer(id)
 	if nil == offer {
@@ -224,15 +233,6 @@ func proxyAnswers(ctx *BrokerContext, w http.ResponseWriter, r *http.Request) {
 		return
 	}
 
-	// Get proxy country stats
-	remoteIP, _, err := net.SplitHostPort(r.RemoteAddr)
-	if err != nil {
-		log.Println("Error processing proxy IP: ", err.Error())
-	} else {
-
-		ctx.metrics.UpdateCountryStats(remoteIP)
-	}
-
 	log.Println("Received answer.")
 	snowflake.answerChannel <- body
 }
diff --git a/broker/metrics.go b/broker/metrics.go
index a7f077a..b03c6db 100644
--- a/broker/metrics.go
+++ b/broker/metrics.go
@@ -17,6 +17,7 @@ var (
 const metricsResolution = 86400 * time.Second
 
 type CountryStats struct {
+	ips    map[string]bool
 	counts map[string]int
 }
 
@@ -65,8 +66,11 @@ func (m *Metrics) UpdateCountryStats(addr string) {
 		log.Println("Unknown geoip")
 	}
 
-	//update map of countries and counts
-	m.countryStats.counts[country]++
+	//update map of unique ips and counts
+	if !m.countryStats.ips[addr] {
+		m.countryStats.counts[country]++
+		m.countryStats.ips[addr] = true
+	}
 
 	return
 }
@@ -101,6 +105,7 @@ func NewMetrics(metricsLogger *log.Logger) (*Metrics, error) {
 
 	m.countryStats = CountryStats{
 		counts: make(map[string]int),
+		ips:    make(map[string]bool),
 	}
 
 	m.logger = metricsLogger
@@ -126,6 +131,7 @@ func (m *Metrics) logMetrics() {
 		m.clientDeniedCount = 0
 		m.clientProxyMatchCount = 0
 		m.countryStats.counts = make(map[string]int)
+		m.countryStats.ips = make(map[string]bool)
 	}
 }
 





More information about the tor-commits mailing list