in providers/linux/procnet.go [46:79]
func parseEntry(line1, line2 string) (map[string]uint64, error) {
keyArr := strings.Split(strings.TrimSpace(line1), " ")
valueArr := strings.Split(strings.TrimSpace(line2), " ")
if len(keyArr) != len(valueArr) {
return nil, errors.New("key and value lines are mismatched")
}
counters := make(map[string]uint64, len(valueArr))
for iter, value := range valueArr {
// This if-else block is to deal with the MaxConn value in SNMP,
// which is a signed value according to RFC2012.
// This library emulates the behavior of the kernel: store all values as a uint, then cast to a signed value for printing
// Users of this library need to be aware that this value should be printed as a signed int or hex value to make it useful.
var parsed uint64
var err error
if strings.Contains(value, "-") {
signedParsed, err := strconv.ParseInt(value, 10, 64)
if err != nil {
return nil, fmt.Errorf("error parsing string to int in line: %#v: %w", valueArr, err)
}
parsed = uint64(signedParsed)
} else {
parsed, err = strconv.ParseUint(value, 10, 64)
if err != nil {
return nil, fmt.Errorf("error parsing string to int in line: %#v: %w", valueArr, err)
}
}
counters[keyArr[iter]] = parsed
}
return counters, nil
}