func main() { flag.Parse() if *showVersion { fmt.Printf("statsdaemon v%s (built w/%s)\n", VERSION, runtime.Version()) return } if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { log.Fatal(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() } if *memprofile != "" { f, err := os.Create(*memprofile) if err != nil { log.Fatal(err) } defer f.Close() defer pprof.WriteHeapProfile(f) } config.Parse(*config_file) runtime.GOMAXPROCS(*processes) var err error pct, err := timers.NewPercentiles(*percentile_thresholds) if err != nil { log.Fatal(err) } inst := os.Expand(*instance, expand_cfg_vars) if inst == "" { inst = "null" } signalchan := make(chan os.Signal, 1) signal.Notify(signalchan) if *profile_addr != "" { go func() { fmt.Println("Profiling endpoint listening on " + *profile_addr) log.Println(http.ListenAndServe(*profile_addr, nil)) }() } daemon := statsdaemon.New(inst, *listen_addr, *admin_addr, *graphite_addr, *prefix_rates, *prefix_timers, *prefix_gauges, *pct, *flushInterval, MAX_UNPROCESSED_PACKETS, *max_timers_per_s, signalchan, *debug) if *debug { consumer := make(chan interface{}, 100) daemon.Invalid_lines.Register(consumer) go func() { for line := range consumer { log.Printf("invalid line '%s'\n", line) } }() } daemon.Run() }
func main() { runtime.GOMAXPROCS(4) flag.Parse() if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { panic(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() } if *memprofile != "" { f, err := os.Create(*memprofile) if err != nil { panic(err) } defer f.Close() defer pprof.WriteHeapProfile(f) } cl, err := statsd.NewClient(true, "localhost:8125", "statsd-tester") if nil != err { panic(err) } laddr, err := net.ResolveTCPAddr("tcp", "localhost:2003") if nil != err { panic(err) } w := NewWatcher(laddr) go w.Run() pct := timers.Percentiles{} daemon := statsdaemon.New("test", ":8125", ":8126", ":2003", "rates.", "timers.", "gauges.", pct, 10, 1000, 1000, nil, false) tick := time.Tick(time.Duration(1) * time.Second) go func() { for range tick { // send 1M packets per second in theory. in practice this takes more than a second msg := []byte("test.counter:1|c") for i := 0; i < 1000000; i++ { //cl.Increment("test-counter") cl.SendRaw(msg) } } }() daemon.Run() }