omada-bandwidth/client_traffic.go

40 lines
861 B
Go
Raw Permalink 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,
}
trafficTotal := TrafficRate{
Received: uint64(client.TrafficDownBytes),
Transferred: uint64(client.TrafficUpBytes),
}
defer func() {
TrafficByClient[uniqueID] = trafficTotal
}()
lastTotal, ok := TrafficByClient[uniqueID]
if !ok {
return TrafficRate{}
}
trafficInDur := trafficTotal.Sub(lastTotal)
seconds := duration.Seconds()
return TrafficRate{
Received: uint64(float64(trafficInDur.Received) / seconds),
Transferred: uint64(float64(trafficInDur.Transferred) / seconds),
}
}