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
}