omada-bandwidth/client_traffic.go

40 lines
821 B
Go
Raw Normal View History

2025-02-01 19:38:24 +01:00
package main
import (
"time"
omadamodel "git.tordarus.net/tordarus/omada-api/model"
)
var TrafficByClient = map[ClientUniqueID]TrafficRate{}
func CalculateClientTraffic(site *omadamodel.Site, client *omadamodel.Client, duration time.Duration) TrafficRate {
uniqueID := ClientUniqueID{
SiteID: site.ID,
ClientMac: client.MacAddress,
}
2025-02-01 21:15:53 +01:00
trafficTotal := MakeTrafficRate(
uint64(client.TrafficDownBytes),
uint64(client.TrafficUpBytes),
)
2025-02-01 19:38:24 +01:00
defer func() {
TrafficByClient[uniqueID] = trafficTotal
}()
lastTotal, ok := TrafficByClient[uniqueID]
if !ok {
2025-02-01 21:15:53 +01:00
return MakeTrafficRate(0, 0)
2025-02-01 19:38:24 +01:00
}
trafficInDur := trafficTotal.Sub(lastTotal)
seconds := duration.Seconds()
2025-02-01 21:15:53 +01:00
return MakeTrafficRate(
uint64(float64(trafficInDur.Received)/seconds),
uint64(float64(trafficInDur.Transferred)/seconds),
)
2025-02-01 19:38:24 +01:00
}