omada-bandwidth/client_traffic.go

40 lines
821 B
Go

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