diff --git a/go.mod b/go.mod index 60e2df9..e158da5 100644 --- a/go.mod +++ b/go.mod @@ -4,12 +4,10 @@ go 1.23.5 require ( git.tordarus.net/tordarus/channel v0.1.18 + git.tordarus.net/tordarus/envvars v0.0.0-20250114175450-d73e12b838a5 + git.tordarus.net/tordarus/gmath v0.0.7 git.tordarus.net/tordarus/omada-api v0.0.1 - git.tordarus.net/tordarus/slices v0.0.12 + git.tordarus.net/tordarus/slices v0.0.13 ) -require ( - git.milar.in/milarin/gmath v0.0.6 // indirect - git.tordarus.net/tordarus/envvars v0.0.0-20250114175450-d73e12b838a5 // indirect - git.tordarus.net/tordarus/ezhttp v0.0.3 // indirect -) +require git.tordarus.net/tordarus/ezhttp v0.0.3 // indirect diff --git a/go.sum b/go.sum index 5347a55..01ca176 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,12 @@ -git.milar.in/milarin/gmath v0.0.6 h1:NNtlh4PLsQT/hqq3F87Xm3u0PLapgBU/L2mN9mb8SPs= -git.milar.in/milarin/gmath v0.0.6/go.mod h1:HDLftG5RLpiNGKiIWh+O2G1PYkNzyLDADO8Cd/1abiE= git.tordarus.net/tordarus/channel v0.1.18 h1:/9BDbkyXbVpFB+dQbToniX6g/ApBnzjslYt4NiycMQo= git.tordarus.net/tordarus/channel v0.1.18/go.mod h1:8/dWFTdGO7g4AeSZ7cF6GerkGbe9c4dBVMVDBxOd9m4= git.tordarus.net/tordarus/envvars v0.0.0-20250114175450-d73e12b838a5 h1:rKNDX/YGunqg8TEU6q1rgS2BcDKVmUW2cg61JOE/wws= git.tordarus.net/tordarus/envvars v0.0.0-20250114175450-d73e12b838a5/go.mod h1:/qVGwrEmqtIrZyuuoIQl4vquSkPWUNJmlGNedDrdYfg= git.tordarus.net/tordarus/ezhttp v0.0.3 h1:K6IlLmqkAFUF68HJsOTKcP3ejco7qfm+MuEagohoouo= git.tordarus.net/tordarus/ezhttp v0.0.3/go.mod h1:Zq9o0Hibny61GqSCwJHa0PfGjVoUFv/zt2PjiQHXvmY= +git.tordarus.net/tordarus/gmath v0.0.7 h1:tR48idt9AUL0r556ww3ZxByTKJEr6NWCTlhl2ihzYxQ= +git.tordarus.net/tordarus/gmath v0.0.7/go.mod h1:mO7aPlvNrGVE9UFXEuuACjZgMDsM63l3OcQy6xSQnoE= git.tordarus.net/tordarus/omada-api v0.0.1 h1:w4WozETL00JygidOXGkGs9UxUQhUNlNnlfqWiYYriHo= git.tordarus.net/tordarus/omada-api v0.0.1/go.mod h1:Ufp8hdXMyrXK7JFHq4WL1WSIlr9L6rhOBfQnqWNpXyM= -git.tordarus.net/tordarus/slices v0.0.12 h1:/0GDo1oGTIZB4+Nr/0dxUf7Z3mE8H8Ew+orFedGbxb8= -git.tordarus.net/tordarus/slices v0.0.12/go.mod h1:bu97dfPWRJ8iqwijWcpzRnFkry4sfY6mc+/bxLai4fU= +git.tordarus.net/tordarus/slices v0.0.13 h1:S/6PtIxAtERwlyQvZAZZaq6RVo2kLrAsrA+19ThRRvY= +git.tordarus.net/tordarus/slices v0.0.13/go.mod h1:RgE7A1aSAezIvPUgcbUuMHu0q4xGKoRevT+DC0eJmwI= diff --git a/main.go b/main.go index 8559ea3..c06bf50 100644 --- a/main.go +++ b/main.go @@ -1,19 +1,22 @@ package main import ( + "encoding/json" "fmt" + "net/http" "time" - "git.milar.in/milarin/gmath" "git.tordarus.net/tordarus/channel" "git.tordarus.net/tordarus/envvars" + "git.tordarus.net/tordarus/gmath" omadaapi "git.tordarus.net/tordarus/omada-api" omadamodel "git.tordarus.net/tordarus/omada-api/model" "git.tordarus.net/tordarus/slices" ) var ( // flags - FlagSiteNames = envvars.StringSlice("SITES", ",", []string{}) + FlagSiteNames = envvars.StringSlice("SITES", ",", []string{}) + FlagOmadaURL = envvars.String("OMADA_URL", "http://localhost:8088") FlagOmadaID = envvars.String("OMADA_ID", "") FlagOmadaClientID = envvars.String("OMADA_CLIENT_ID", "") @@ -21,10 +24,15 @@ var ( // flags FlagOmadaUsername = envvars.String("OMADA_USERNAME", "") FlagOmadaPassword = envvars.String("OMADA_PASSWORD", "") FlagRefreshInterval = envvars.Duration("REFRESH_INTERVAL", 30*time.Second) + + FlagHttpInterface = envvars.String("HTTP_INTERFACE", "") + FlagHttpPort = envvars.Uint16("HTTP_PORT", 8080) ) var MinRefreshInterval = 30 * time.Second +var CurrentTraffic = &TrafficStats{} + func main() { FlagRefreshInterval = gmath.Max(FlagRefreshInterval, MinRefreshInterval) @@ -41,6 +49,16 @@ func main() { panic(err) } + go func() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + if err := json.NewEncoder(w).Encode(CurrentTraffic); err != nil { + w.WriteHeader(http.StatusInternalServerError) + } + }) + + http.ListenAndServe(fmt.Sprintf("%s:%d", FlagHttpInterface, FlagHttpPort), nil) + }() + sites := slices.Filter(channel.ToSlice(api.GetSites()), FilterSitesByName(FlagSiteNames...)) ticker := time.NewTicker(FlagRefreshInterval) @@ -49,8 +67,7 @@ func main() { lastTick := time.Now() for now := range ticker.C { - trafficStats := CalculateSiteTraffic(api, sites, now.Sub(lastTick)) - fmt.Println(trafficStats) + CurrentTraffic = CalculateSiteTraffic(api, sites, now.Sub(lastTick)) lastTick = now } } diff --git a/types.go b/types.go index 08a0c2a..a7b2685 100644 --- a/types.go +++ b/types.go @@ -4,7 +4,7 @@ import ( "encoding/json" "fmt" - "git.milar.in/milarin/gmath" + "git.tordarus.net/tordarus/gmath" omadamodel "git.tordarus.net/tordarus/omada-api/model" )