Plot city-level traffic activity from local GeoIP coordinates

This commit is contained in:
Maxim
2026-10-15 20:48:04 +03:00
parent 03b6c1f289
commit 46bd6e8be6
6 changed files with 192 additions and 26 deletions

View File

@@ -7,6 +7,7 @@ import (
"os"
"path/filepath"
"testing"
"time"
)
func TestCityInstallRejectsBadDownload(t *testing.T) {
@@ -46,6 +47,33 @@ func TestCityDatabaseDownloaded(t *testing.T) {
if err := installTrafficCityFrom(server.URL, cityDatabaseSHA1); err != nil {
t.Fatal(err)
}
g := lookupTrafficCityLocation("20.194.96.114")
if !g.Located || g.Latitude < 30 || g.Latitude > 40 || g.Longitude < 120 || g.Longitude > 130 {
t.Fatalf("invalid Seoul coordinates: %+v", g)
}
s, a := trafficFixture(t)
s.SaveTrafficSettings(TrafficSettings{Enabled: true, AgentID: a.ID})
now := time.Now().Unix()
if err := s.SaveTraffic(a.ID, TrafficBatch{Events: []TrafficEvent{
{ID: "1", Time: now, Kind: "request", IP: "20.194.96.114", Domain: "a.test"},
{ID: "2", Time: now, Kind: "request", IP: "20.194.96.114", Domain: "a.test"},
{ID: "3", Time: now, Kind: "alert", IP: "20.194.96.114", Domain: "b.test"},
{ID: "4", Time: now, Kind: "request", IP: "192.168.0.10"},
}}); err != nil {
t.Fatal(err)
}
view, err := s.TrafficView("", "", false)
if err != nil || len(view.Cities) != 1 {
t.Fatalf("cities %+v err %v", view.Cities, err)
}
c := view.Cities[0]
if c.Requests != 2 || c.UniqueIPs != 1 || c.Alerts != 1 || c.City != g.City {
t.Fatalf("bad aggregation %+v", c)
}
filtered, err := s.TrafficView("b.test", "alert", false)
if err != nil || len(filtered.Cities) != 1 || filtered.Cities[0].Requests != 0 || filtered.Cities[0].Alerts != 1 {
t.Fatalf("city filter %+v %v", filtered.Cities, err)
}
city, region := lookupTrafficCity("20.194.96.114")
t.Logf("city=%q region=%q", city, region)
if city == "" {