// Reads a collectd types db from a file. func TypesDBFile(path string) (typesdb *api.TypesDB, err error) { var reader *os.File reader, err = os.Open(path) if err == nil { typesdb, err = api.NewTypesDB(reader) } return }
// SetTypes sets collectd types db. func (s *Service) SetTypes(types string) (err error) { reader := strings.NewReader(types) s.popts.TypesDB, err = api.NewTypesDB(reader) return }
func startCollectdServer(ctx context.Context, w api.Writer) { if *collectdAddress == "" { return } srv := network.Server{ Addr: *collectdAddress, Writer: w, } if *collectdAuth != "" { srv.PasswordLookup = network.NewAuthFile(*collectdAuth) } if *collectdTypesDB != "" { file, err := os.Open(*collectdTypesDB) if err != nil { log.Fatalf("Can't open types.db file %s", *collectdTypesDB) } defer file.Close() typesDB, err := api.NewTypesDB(file) if err != nil { log.Fatalf("Error in parsing types.db file %s", *collectdTypesDB) } srv.TypesDB = typesDB } switch strings.ToLower(*collectdSecurity) { case "", "none": srv.SecurityLevel = network.None case "sign": srv.SecurityLevel = network.Sign case "encrypt": srv.SecurityLevel = network.Encrypt default: log.Fatalf("Unknown security level %q. Must be one of \"None\", \"Sign\" and \"Encrypt\".", *collectdSecurity) } laddr, err := net.ResolveUDPAddr("udp", *collectdAddress) if err != nil { log.Fatalf("Failed to resolve binary protocol listening UDP address %q: %v", *collectdAddress, err) } if laddr.IP != nil && laddr.IP.IsMulticast() { srv.Conn, err = net.ListenMulticastUDP("udp", nil, laddr) } else { srv.Conn, err = net.ListenUDP("udp", laddr) } if err != nil { log.Fatalf("Failed to create a socket for a binary protocol server: %v", err) } if *collectdBuffer >= 0 { if err = srv.Conn.SetReadBuffer(*collectdBuffer); err != nil { log.Fatalf("Failed to adjust a read buffer of the socket: %v", err) } } go func() { log.Fatal(srv.ListenAndWrite(ctx)) }() }