func parseEntry()

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
}