40 lines
861 B
Go
40 lines
861 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 := 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),
|
||
|
}
|
||
|
}
|