Skip to content

Commit

Permalink
Merge pull request #472 from Dentrax/netstat-refactor
Browse files Browse the repository at this point in the history
Separate NetStat parsing logic
  • Loading branch information
SuperQ committed Dec 17, 2022
2 parents cab2d84 + a05e0cf commit 421a743
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 21 deletions.
53 changes: 35 additions & 18 deletions netstat.go
Expand Up @@ -15,6 +15,7 @@ package procfs

import (
"bufio"
"io"
"os"
"path/filepath"
"strconv"
Expand Down Expand Up @@ -42,27 +43,43 @@ func (fs FS) NetStat() ([]NetStat, error) {
return nil, err
}

netStatFile := NetStat{
Filename: filepath.Base(filePath),
Stats: make(map[string][]uint64),
procNetstat, err := parseNetstat(file)
if err != nil {
return nil, err
}
procNetstat.Filename = filepath.Base(filePath)

netStatsTotal = append(netStatsTotal, procNetstat)
}
return netStatsTotal, nil
}

// parseNetstat parses the metrics from `/proc/net/stat/` file
// and returns a NetStat structure.
func parseNetstat(r io.Reader) (NetStat, error) {
var (
scanner = bufio.NewScanner(r)
netStat = NetStat{
Stats: make(map[string][]uint64),
}
scanner := bufio.NewScanner(file)
scanner.Scan()
// First string is always a header for stats
var headers []string
headers = append(headers, strings.Fields(scanner.Text())...)
)

scanner.Scan()

// Other strings represent per-CPU counters
for scanner.Scan() {
for num, counter := range strings.Fields(scanner.Text()) {
value, err := strconv.ParseUint(counter, 16, 64)
if err != nil {
return nil, err
}
netStatFile.Stats[headers[num]] = append(netStatFile.Stats[headers[num]], value)
// First string is always a header for stats
var headers []string
headers = append(headers, strings.Fields(scanner.Text())...)

// Other strings represent per-CPU counters
for scanner.Scan() {
for num, counter := range strings.Fields(scanner.Text()) {
value, err := strconv.ParseUint(counter, 16, 64)
if err != nil {
return NetStat{}, err
}
netStat.Stats[headers[num]] = append(netStat.Stats[headers[num]], value)
}
netStatsTotal = append(netStatsTotal, netStatFile)
}
return netStatsTotal, nil

return netStat, nil
}
6 changes: 3 additions & 3 deletions proc_netstat.go
Expand Up @@ -174,14 +174,14 @@ func (p Proc) Netstat() (ProcNetstat, error) {
if err != nil {
return ProcNetstat{PID: p.PID}, err
}
procNetstat, err := parseNetstat(bytes.NewReader(data), filename)
procNetstat, err := parseProcNetstat(bytes.NewReader(data), filename)
procNetstat.PID = p.PID
return procNetstat, err
}

// parseNetstat parses the metrics from proc/<pid>/net/netstat file
// parseProcNetstat parses the metrics from proc/<pid>/net/netstat file
// and returns a ProcNetstat structure.
func parseNetstat(r io.Reader, fileName string) (ProcNetstat, error) {
func parseProcNetstat(r io.Reader, fileName string) (ProcNetstat, error) {
var (
scanner = bufio.NewScanner(r)
procNetstat = ProcNetstat{}
Expand Down

0 comments on commit 421a743

Please sign in to comment.