File: stats.go

package info (click to toggle)
golang-github-containers-gvisor-tap-vsocks 0.8.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 800 kB
  • sloc: sh: 95; makefile: 59
file content (31 lines) | stat: -rw-r--r-- 759 bytes parent folder | download
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
}