func parseKeyValueLines()

in pkg/metrics/collector/kernel_metrics.go [91:115]


func parseKeyValueLines(output, label string) (map[string]uint64, error) {
	stats := make(map[string]uint64)
	splitFile := strings.Split(output, "\n")
	for i, stat := range splitFile {
		if !strings.Contains(stat, label) {
			continue
		}
		keyList := strings.Fields(stat)
		// TODO(#112): Look for next instance of label rather than assuming its the next
		valList := strings.Fields(splitFile[i+1])
		if len(valList) != len(keyList) {
			// Return nothing if malformed.
			return nil, fmt.Errorf("malformed key value pair while parsing %q", label)
		}
		for i, key := range keyList[1:] {
			val, err := strconv.Atoi(valList[i+1])
			if err != nil {
				return nil, fmt.Errorf("could not cast value to uint64, got %q", err)
			}
			stats[key] = uint64(val)
		}
		return stats, nil
	}
	return stats, nil
}