40 lines
821 B
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),
|
|
)
|
|
}
|