Compare commits
5 Commits
37072c247f
...
main
Author | SHA1 | Date | |
---|---|---|---|
304d22ffba | |||
ed1a1d67fc | |||
8687a608f6 | |||
b8d946cd31 | |||
51842a0656 |
8
go.mod
8
go.mod
@ -3,11 +3,11 @@ module git.tordarus.net/tordarus/omada-bandwidth
|
|||||||
go 1.23.5
|
go 1.23.5
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.tordarus.net/tordarus/channel v0.1.18
|
git.tordarus.net/tordarus/channel v0.1.19
|
||||||
git.tordarus.net/tordarus/envvars v0.0.0-20250114175450-d73e12b838a5
|
git.tordarus.net/tordarus/envvars v0.0.0-20250114175450-d73e12b838a5
|
||||||
git.tordarus.net/tordarus/gmath v0.0.7
|
git.tordarus.net/tordarus/gmath v0.0.7
|
||||||
git.tordarus.net/tordarus/omada-api v0.0.5
|
git.tordarus.net/tordarus/omada-api v0.0.10
|
||||||
git.tordarus.net/tordarus/slices v0.0.13
|
git.tordarus.net/tordarus/slices v0.0.14
|
||||||
)
|
)
|
||||||
|
|
||||||
require git.tordarus.net/tordarus/ezhttp v0.0.4 // indirect
|
require git.tordarus.net/tordarus/ezhttp v0.0.9 // indirect
|
||||||
|
16
go.sum
16
go.sum
@ -1,12 +1,12 @@
|
|||||||
git.tordarus.net/tordarus/channel v0.1.18 h1:/9BDbkyXbVpFB+dQbToniX6g/ApBnzjslYt4NiycMQo=
|
git.tordarus.net/tordarus/channel v0.1.19 h1:d9xnSwFyvBh4B1/82mt0A7Gpm2nIZJTc+9ceJMIOu5Q=
|
||||||
git.tordarus.net/tordarus/channel v0.1.18/go.mod h1:8/dWFTdGO7g4AeSZ7cF6GerkGbe9c4dBVMVDBxOd9m4=
|
git.tordarus.net/tordarus/channel v0.1.19/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 h1:rKNDX/YGunqg8TEU6q1rgS2BcDKVmUW2cg61JOE/wws=
|
||||||
git.tordarus.net/tordarus/envvars v0.0.0-20250114175450-d73e12b838a5/go.mod h1:/qVGwrEmqtIrZyuuoIQl4vquSkPWUNJmlGNedDrdYfg=
|
git.tordarus.net/tordarus/envvars v0.0.0-20250114175450-d73e12b838a5/go.mod h1:/qVGwrEmqtIrZyuuoIQl4vquSkPWUNJmlGNedDrdYfg=
|
||||||
git.tordarus.net/tordarus/ezhttp v0.0.4 h1:wm7rhol9MHZTZXOzH5I6Q4idjCiFfA4XwAMISZhTcCs=
|
git.tordarus.net/tordarus/ezhttp v0.0.9 h1:YwdQ4YcJwvpMw5CX5NcCEM23XQL+WCz5nWuc2dzX/84=
|
||||||
git.tordarus.net/tordarus/ezhttp v0.0.4/go.mod h1:Zq9o0Hibny61GqSCwJHa0PfGjVoUFv/zt2PjiQHXvmY=
|
git.tordarus.net/tordarus/ezhttp v0.0.9/go.mod h1:Zq9o0Hibny61GqSCwJHa0PfGjVoUFv/zt2PjiQHXvmY=
|
||||||
git.tordarus.net/tordarus/gmath v0.0.7 h1:tR48idt9AUL0r556ww3ZxByTKJEr6NWCTlhl2ihzYxQ=
|
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/gmath v0.0.7/go.mod h1:mO7aPlvNrGVE9UFXEuuACjZgMDsM63l3OcQy6xSQnoE=
|
||||||
git.tordarus.net/tordarus/omada-api v0.0.5 h1:mh9M/mepjKtak48qu/U5isgUCepiD21OLEECi/y7IhI=
|
git.tordarus.net/tordarus/omada-api v0.0.10 h1:SUxpG6HTE2meEyaEXorympNPqOQxRviBCKoOQ9fKlgY=
|
||||||
git.tordarus.net/tordarus/omada-api v0.0.5/go.mod h1:lz0T5Wtn0R16IbQFgglUhqMdBtSz6Ujn+fsDyV/hTOI=
|
git.tordarus.net/tordarus/omada-api v0.0.10/go.mod h1:+VjFQyRiDp8fKbRB6E3zfkEPm00ffnidQ1+mfVC2KUI=
|
||||||
git.tordarus.net/tordarus/slices v0.0.13 h1:S/6PtIxAtERwlyQvZAZZaq6RVo2kLrAsrA+19ThRRvY=
|
git.tordarus.net/tordarus/slices v0.0.14 h1:Jy1VRMs777WewJ7mxTgjyQIMm/Zr+co18/XoQ01YZ3A=
|
||||||
git.tordarus.net/tordarus/slices v0.0.13/go.mod h1:RgE7A1aSAezIvPUgcbUuMHu0q4xGKoRevT+DC0eJmwI=
|
git.tordarus.net/tordarus/slices v0.0.14/go.mod h1:RgE7A1aSAezIvPUgcbUuMHu0q4xGKoRevT+DC0eJmwI=
|
||||||
|
25
main.go
25
main.go
@ -1,7 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -51,10 +50,13 @@ func main() {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
go api.MustAutoRefresh(context.Background(), FlagRefreshBeforeExpiration)
|
|
||||||
go StartHttpServer()
|
go StartHttpServer()
|
||||||
|
|
||||||
sites := slices.Filter(channel.ToSlice(api.GetSites()), FilterSitesByName(FlagSiteNames...))
|
sites := slices.Ref(slices.Filter(
|
||||||
|
channel.ToSlice(channel.Map(api.GetSites(), channel.Result[omadamodel.Site].GetUnsafe)),
|
||||||
|
FilterSitesByName(FlagSiteNames...),
|
||||||
|
))
|
||||||
|
|
||||||
ticker := time.NewTicker(FlagRefreshInterval)
|
ticker := time.NewTicker(FlagRefreshInterval)
|
||||||
|
|
||||||
lastTick := time.Now()
|
lastTick := time.Now()
|
||||||
@ -71,9 +73,14 @@ func CalculateSiteTraffic(api *omada.Api, sites []*omadamodel.Site, duration tim
|
|||||||
for _, site := range sites {
|
for _, site := range sites {
|
||||||
trafficByClient := map[string]TrafficRate{}
|
trafficByClient := map[string]TrafficRate{}
|
||||||
|
|
||||||
clients := channel.ToSlice(api.GetClients(site.ID))
|
clientRequests := channel.ToSlice(api.GetClients(site.ID))
|
||||||
for _, client := range clients {
|
for _, clientReq := range clientRequests {
|
||||||
traffic := CalculateClientTraffic(site, client, duration)
|
client, err := clientReq.Get()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
traffic := CalculateClientTraffic(site, &client, duration)
|
||||||
trafficByClient[client.Name] = traffic
|
trafficByClient[client.Name] = traffic
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,14 +90,14 @@ func CalculateSiteTraffic(api *omada.Api, sites []*omadamodel.Site, duration tim
|
|||||||
return NewTrafficStats(siteTraffics)
|
return NewTrafficStats(siteTraffics)
|
||||||
}
|
}
|
||||||
|
|
||||||
func FilterSitesByName(allowedSiteNames ...string) func(site *omadamodel.Site) bool {
|
func FilterSitesByName(allowedSiteNames ...string) func(site omadamodel.Site) bool {
|
||||||
if len(allowedSiteNames) == 0 {
|
if len(allowedSiteNames) == 0 {
|
||||||
return func(site *omadamodel.Site) bool { return true }
|
return func(site omadamodel.Site) bool { return true }
|
||||||
}
|
}
|
||||||
|
|
||||||
siteNames := slices.ToStructMap(allowedSiteNames)
|
siteNames := slices.ToStructMap(allowedSiteNames)
|
||||||
|
|
||||||
return func(site *omadamodel.Site) bool {
|
return func(site omadamodel.Site) bool {
|
||||||
_, ok := siteNames[site.Name]
|
_, ok := siteNames[site.Name]
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user