in pkg/metrics/collector/sockstat.go [115:147]
func parseLine(in string) (*socketStats, error) {
line := strings.Split(in, " ")
if len(line) < 2 || len(line[0]) < 2 || line[0][len(line[0])-1] != ':' {
return nil, fmt.Errorf("invalid line %q", in)
}
ret := &socketStats{}
tcpEntries := map[string]*sockStatEntry{
"inuse": {&ret.tcpInUse, extractSockStatUint},
"tw": {&ret.tcpTimeWait, extractSockStatUint},
"mem": {&ret.memUsedInPages, extractSockStatUint},
}
udpEntries := map[string]*sockStatEntry{
"inuse": {&ret.udpInUse, extractSockStatUint},
"mem": {&ret.memUsedInPages, extractSockStatUint},
}
protocol := line[0][:len(line[0])-1]
rest := line[1:]
switch protocol {
case "TCP", "TCP6":
if err := extractSockStatFields(rest, tcpEntries); err != nil {
return nil, err
}
case "UDP", "UDP6":
if err := extractSockStatFields(rest, udpEntries); err != nil {
return nil, err
}
}
return ret, nil
}