1
0
Fork 0
telegraf/plugins/inputs/netflow/mappings.go

45 lines
960 B
Go
Raw Normal View History

package netflow
import (
"encoding/csv"
"fmt"
"os"
)
var funcMapping = map[string]decoderFunc{
"uint": decodeUint,
"hex": decodeHex,
"string": decodeString,
"ip": decodeIP,
"proto": decodeL4Proto,
}
func loadMapping(filename string) (map[string]fieldMapping, error) {
file, err := os.Open(filename)
if err != nil {
return nil, fmt.Errorf("opening %q failed: %w", filename, err)
}
defer file.Close()
reader := csv.NewReader(file)
reader.Comma = ','
reader.Comment = '#'
reader.TrimLeadingSpace = true
records, err := reader.ReadAll()
if err != nil {
return nil, fmt.Errorf("reading csv failed: %w", err)
}
mappings := make(map[string]fieldMapping, len(records))
for _, r := range records {
id, name, dtype := r[0], r[1], r[2]
fun, found := funcMapping[dtype]
if !found {
return nil, fmt.Errorf("unknown data-type %q for id %q", dtype, id)
}
mappings[id] = fieldMapping{name, fun}
}
return mappings, nil
}