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), } }