46 lines
837 B
Go
46 lines
837 B
Go
package nic
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/shirou/gopsutil/v4/net"
|
|
)
|
|
|
|
type NICKeyType string
|
|
|
|
const NICKey NICKeyType = "nic"
|
|
|
|
var excludeNetInterfaces = map[string]bool{
|
|
"lo": true,
|
|
"tun": true,
|
|
"docker": true,
|
|
"veth": true,
|
|
"br-": true,
|
|
"vmbr": true,
|
|
"vnet": true,
|
|
"kube": true,
|
|
}
|
|
|
|
func GetState(ctx context.Context) ([]uint64, error) {
|
|
var netInTransfer, netOutTransfer uint64
|
|
nc, err := net.IOCountersWithContext(ctx, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
allowList, _ := ctx.Value(NICKey).(map[string]bool)
|
|
|
|
for _, v := range nc {
|
|
if excludeNetInterfaces[v.Name] && !allowList[v.Name] {
|
|
continue
|
|
}
|
|
if len(allowList) > 0 && !allowList[v.Name] {
|
|
continue
|
|
}
|
|
netInTransfer += v.BytesRecv
|
|
netOutTransfer += v.BytesSent
|
|
}
|
|
|
|
return []uint64{netInTransfer, netOutTransfer}, nil
|
|
}
|