Skip to content

Commit bad5514

Browse files
committed
Refactor netstat parsing
Move the file hadling into the parseNetstat() function to only open one file at a time. This eliminates keeping all files open until all are read. Signed-off-by: SuperQ <[email protected]>
1 parent 99b481d commit bad5514

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

netstat.go

+11-15
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ package procfs
1515

1616
import (
1717
"bufio"
18-
"io"
1918
"os"
2019
"path/filepath"
2120
"strconv"
@@ -38,13 +37,7 @@ func (fs FS) NetStat() ([]NetStat, error) {
3837
var netStatsTotal []NetStat
3938

4039
for _, filePath := range statFiles {
41-
file, err := os.Open(filePath)
42-
if err != nil {
43-
return nil, err
44-
}
45-
defer file.Close()
46-
47-
procNetstat, err := parseNetstat(file)
40+
procNetstat, err := parseNetstat(filePath)
4841
if err != nil {
4942
return nil, err
5043
}
@@ -57,14 +50,17 @@ func (fs FS) NetStat() ([]NetStat, error) {
5750

5851
// parseNetstat parses the metrics from `/proc/net/stat/` file
5952
// and returns a NetStat structure.
60-
func parseNetstat(r io.Reader) (NetStat, error) {
61-
var (
62-
scanner = bufio.NewScanner(r)
63-
netStat = NetStat{
64-
Stats: make(map[string][]uint64),
65-
}
66-
)
53+
func parseNetstat(filePath string) (NetStat, error) {
54+
netStat := NetStat{
55+
Stats: make(map[string][]uint64),
56+
}
57+
file, err := os.Open(filePath)
58+
if err != nil {
59+
return netStat, err
60+
}
61+
defer file.Close()
6762

63+
scanner := bufio.NewScanner(file)
6864
scanner.Scan()
6965

7066
// First string is always a header for stats

0 commit comments

Comments
 (0)