mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-14 05:11:19 -04:00
Sort snowflake-ips stats by country count.
We currently don't sort the snowflake-ips metrics: snowflake-ips CA=1,DE=1,AR=1,NL=1,FR=1,GB=2,US=4,CH=1 To facilitate eyeballing our metrics, this patch sorts snowflake-ips by value. If the value is identical, we sort by string, i.e.: snowflake-ips US=4,GB=2,AR=1,CA=1,CH=1,DE=1,FR=1,NL=1 This patch fixes tpo/anti-censorship/pluggable-transports/snowflake#40011
This commit is contained in:
parent
665d76c5b0
commit
5efcde5187
2 changed files with 39 additions and 1 deletions
|
@ -10,6 +10,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
"net"
|
"net"
|
||||||
|
"sort"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -51,10 +52,32 @@ type Metrics struct {
|
||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type record struct {
|
||||||
|
cc string
|
||||||
|
count int
|
||||||
|
}
|
||||||
|
type records []record
|
||||||
|
|
||||||
|
func (r records) Len() int { return len(r) }
|
||||||
|
func (r records) Swap(i, j int) { r[i], r[j] = r[j], r[i] }
|
||||||
|
func (r records) Less(i, j int) bool {
|
||||||
|
if r[i].count == r[j].count {
|
||||||
|
return r[i].cc > r[j].cc
|
||||||
|
}
|
||||||
|
return r[i].count < r[j].count
|
||||||
|
}
|
||||||
|
|
||||||
func (s CountryStats) Display() string {
|
func (s CountryStats) Display() string {
|
||||||
output := ""
|
output := ""
|
||||||
|
|
||||||
|
// Use the records struct to sort our counts map by value.
|
||||||
|
rs := records{}
|
||||||
for cc, count := range s.counts {
|
for cc, count := range s.counts {
|
||||||
output += fmt.Sprintf("%s=%d,", cc, count)
|
rs = append(rs, record{cc: cc, count: count})
|
||||||
|
}
|
||||||
|
sort.Sort(sort.Reverse(rs))
|
||||||
|
for _, r := range rs {
|
||||||
|
output += fmt.Sprintf("%s=%d,", r.cc, r.count)
|
||||||
}
|
}
|
||||||
|
|
||||||
// cut off trailing ","
|
// cut off trailing ","
|
||||||
|
|
|
@ -679,5 +679,20 @@ func TestMetrics(t *testing.T) {
|
||||||
ctx.metrics.printMetrics()
|
ctx.metrics.printMetrics()
|
||||||
So(buf.String(), ShouldContainSubstring, "client-denied-count 8\nclient-restricted-denied-count 8\nclient-unrestricted-denied-count 0\nclient-snowflake-match-count 0")
|
So(buf.String(), ShouldContainSubstring, "client-denied-count 8\nclient-restricted-denied-count 8\nclient-unrestricted-denied-count 0\nclient-snowflake-match-count 0")
|
||||||
})
|
})
|
||||||
|
Convey("for country stats order", func() {
|
||||||
|
|
||||||
|
stats := map[string]int{
|
||||||
|
"IT": 50,
|
||||||
|
"FR": 200,
|
||||||
|
"TZ": 100,
|
||||||
|
"CN": 250,
|
||||||
|
"RU": 150,
|
||||||
|
"CA": 1,
|
||||||
|
"BE": 1,
|
||||||
|
"PH": 1,
|
||||||
|
}
|
||||||
|
ctx.metrics.countryStats.counts = stats
|
||||||
|
So(ctx.metrics.countryStats.Display(), ShouldEqual, "CN=250,FR=200,RU=150,TZ=100,IT=50,BE=1,CA=1,PH=1")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue