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