func parseConntrackData()

in pkg/metrics/collector/conntrack.go [134:162]


func parseConntrackData(line string, indices *conntrackIndices) (*conntrackStats, error) {
	stats := &conntrackStats{}
	valueParts := strings.Split(line, " ")
	if len(valueParts) != indices.numFields {
		return nil, fmt.Errorf("invalid input %q: doesn't have enough fields", line)
	}

	for _, e := range []struct {
		name  string
		value *uint64
		index int
	}{
		{"found", &stats.found, indices.found},
		{"invalid", &stats.invalid, indices.invalid},
		{"insert", &stats.insert, indices.insert},
		{"insert_failed", &stats.insertFailed, indices.insertFailed},
		{"drop", &stats.drop, indices.drop},
		{"early_drop", &stats.earlyDrop, indices.earlyDrop},
		{"search_restart", &stats.searchRestart, indices.searchRestart},
	} {
		v, err := strconv.ParseUint(valueParts[e.index], 16, 32)
		if err != nil {
			return nil, fmt.Errorf("input does not have a valid %q field (line = %q)", e.name, line)
		}
		*e.value = v
	}

	return stats, nil
}