func main() { var err error if *logPath != "" { logFile, err := os.OpenFile(*logPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { log.Fatalf("failed to open file: %v\n", err) } log.SetOutput(logFile) defer logFile.Close() } // make influxdb client client, err = influxdb.NewClient(&influxdb.ClientConfig{ Host: *host, Username: *username, Password: *password, Database: *database, }) if err != nil { log.Fatalf("failed to make a influxdb client: %v\n", err) } // register a signal handler sc := make(chan os.Signal, 1) signal.Notify(sc, os.Interrupt, os.Kill) go handleSignals(sc) // make channel for collectd c := make(chan collectd.Packet) // then start to listen go collectd.Listen(*proxyHost+":"+*proxyPort, c) log.Printf("proxy started on %s:%s\n", *proxyHost, *proxyPort) timer := time.Now() var seriesGroup []*influxdb.Series for { packet := <-c seriesGroup = append(seriesGroup, processPacket(packet)...) if time.Since(timer) < influxWriteInterval && len(seriesGroup) < influxWriteLimit { continue } else { if len(seriesGroup) > 0 { if err := client.WriteSeries(seriesGroup); err != nil { log.Printf("failed to write series group to influxdb: %s\n", err) } if *verbose { log.Printf("[TRACE] wrote %d series\n", len(seriesGroup)) } seriesGroup = make([]*influxdb.Series, 0) } timer = time.Now() } } }
func main() { c := make(chan collectd.Packet) go collectd.Listen("127.0.0.1:25827", c) for { packet := <-c for i, name := range packet.ValueNames() { values, _ := packet.ValueNumbers() newpacket := "" if i == 0 { newpacket = "." } fmt.Printf("%2s %s %35s %v\n", newpacket, packet.Time().Format(time.RFC3339), name, values[i]) } } }