mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
74 lines
2.4 KiB
Go
74 lines
2.4 KiB
Go
package linux
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type NetworkStat struct {
|
|
Iface string `json:"iface"`
|
|
RxBytes uint64 `json:"rxbytes"`
|
|
RxPackets uint64 `json:"rxpackets"`
|
|
RxErrs uint64 `json:"rxerrs"`
|
|
RxDrop uint64 `json:"rxdrop"`
|
|
RxFifo uint64 `json:"rxfifo"`
|
|
RxFrame uint64 `json:"rxframe"`
|
|
RxCompressed uint64 `json:"rxcompressed"`
|
|
RxMulticast uint64 `json:"rxmulticast"`
|
|
TxBytes uint64 `json:"txbytes"`
|
|
TxPackets uint64 `json:"txpackets"`
|
|
TxErrs uint64 `json:"txerrs"`
|
|
TxDrop uint64 `json:"txdrop"`
|
|
TxFifo uint64 `json:"txfifo"`
|
|
TxColls uint64 `json:"txcolls"`
|
|
TxCarrier uint64 `json:"txcarrier"`
|
|
TxCompressed uint64 `json:"txcompressed"`
|
|
}
|
|
|
|
func ReadNetworkStat(path string) ([]NetworkStat, error) {
|
|
data, err := ioutil.ReadFile(path)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
lines := strings.Split(string(data), "\n")
|
|
|
|
// lines[2:] remove /proc/net/dev header
|
|
results := make([]NetworkStat, len(lines[2:])-1)
|
|
|
|
for i, line := range lines[2:] {
|
|
// patterns
|
|
// <iface>: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
|
// or
|
|
// <iface>:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (without space after colon)
|
|
colon := strings.Index(line, ":")
|
|
|
|
if colon > 0 {
|
|
metrics := line[colon+1:]
|
|
fields := strings.Fields(metrics)
|
|
|
|
results[i].Iface = strings.Replace(line[0:colon], " ", "", -1)
|
|
results[i].RxBytes, _ = strconv.ParseUint(fields[0], 10, 64)
|
|
results[i].RxPackets, _ = strconv.ParseUint(fields[1], 10, 64)
|
|
results[i].RxErrs, _ = strconv.ParseUint(fields[2], 10, 64)
|
|
results[i].RxDrop, _ = strconv.ParseUint(fields[3], 10, 64)
|
|
results[i].RxFifo, _ = strconv.ParseUint(fields[4], 10, 64)
|
|
results[i].RxFrame, _ = strconv.ParseUint(fields[5], 10, 64)
|
|
results[i].RxCompressed, _ = strconv.ParseUint(fields[6], 10, 64)
|
|
results[i].RxMulticast, _ = strconv.ParseUint(fields[7], 10, 64)
|
|
results[i].TxBytes, _ = strconv.ParseUint(fields[8], 10, 64)
|
|
results[i].TxPackets, _ = strconv.ParseUint(fields[9], 10, 64)
|
|
results[i].TxErrs, _ = strconv.ParseUint(fields[10], 10, 64)
|
|
results[i].TxDrop, _ = strconv.ParseUint(fields[11], 10, 64)
|
|
results[i].TxFifo, _ = strconv.ParseUint(fields[12], 10, 64)
|
|
results[i].TxColls, _ = strconv.ParseUint(fields[13], 10, 64)
|
|
results[i].TxCarrier, _ = strconv.ParseUint(fields[14], 10, 64)
|
|
results[i].TxCompressed, _ = strconv.ParseUint(fields[15], 10, 64)
|
|
}
|
|
}
|
|
|
|
return results, nil
|
|
}
|