1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
package virtualnetwork
import (
"reflect"
"gvisor.dev/gvisor/pkg/tcpip"
)
func iterateFields(ret map[string]interface{}, valueOf reflect.Value) {
for i := 0; i < valueOf.NumField(); i++ {
field := valueOf.Field(i)
fieldName := valueOf.Type().Field(i).Name
if field.Kind() == reflect.Struct {
m := make(map[string]interface{})
ret[fieldName] = m
iterateFields(m, field)
continue
}
if counter, ok := field.Interface().(*tcpip.StatCounter); ok {
ret[fieldName] = counter.Value()
}
}
}
func statsAsJSON(sent, received uint64, stats tcpip.Stats) map[string]interface{} {
root := make(map[string]interface{})
iterateFields(root, reflect.ValueOf(stats))
root["BytesSent"] = sent
root["BytesReceived"] = received
return root
}
|