From a1692f732078adad272256639f7a3ff14c9e643a Mon Sep 17 00:00:00 2001 From: sinanmohd Date: Sun, 7 Jul 2024 07:37:57 +0530 Subject: api/bandwidth: init --- api/bandwidth.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 api/bandwidth.go (limited to 'api/bandwidth.go') diff --git a/api/bandwidth.go b/api/bandwidth.go new file mode 100644 index 0000000..5f23221 --- /dev/null +++ b/api/bandwidth.go @@ -0,0 +1,41 @@ +package api + +import ( + "encoding/json" + "fmt" + "log" + "net" + + "github.com/cilium/cilium/pkg/mac" + "github.com/dustin/go-humanize" + "sinanmohd.com/redq/usage" +) + +type BandwidthStat struct { + Ingress string `json:"ingress"` + Egress string `json:"egress"` +} + +type BandwidthResp map[string]BandwidthStat + +func handleBandwidth(conn net.Conn, u *usage.Usage) { + resp := make(BandwidthResp) + + u.Mutex.RLock() + for key, value := range u.Data { + m := mac.Uint64MAC(key) + resp[m.String()] = BandwidthStat{ + Ingress: fmt.Sprintf("%s/s", humanize.Bytes(value.BandwidthIngress)), + Egress: fmt.Sprintf("%s/s", humanize.Bytes(value.BandwidthEgress)), + } + } + u.Mutex.RUnlock() + + buf, err := json.Marshal(resp) + if err != nil { + log.Printf("marshaling json: %s", err) + return + } + + conn.Write(buf) +} -- cgit v1.2.3