func InitStatsd(ch chan *map[string]map[string]int64, conf *StatsdConfig) error { go func() { statsdclient := statsd.NewStatsdClient(conf.Host, conf.Prefix) statsdclient.CreateSocket() interval, err := time.ParseDuration(conf.Interval) if err != nil { Conf.Logger.Fatalf("can't parse interval %+v", err) } stats := statsd.NewStatsdBuffer(interval, statsdclient) defer stats.Close() for data := range statsdCh { for op, values := range *data { for key, val := range values { switch op { case "increment": debug("send incr", key, val) go stats.Incr(key, val) case "timing": debug("send timing", key, val) go stats.Timing(key, val) case "gauge": debug("send gauge", key, val) go stats.Gauge(key, val) } } } } }() return nil }
func (varnishncsa *Varnishncsa) Connect() { statsdclient := statsd.NewStatsdClient(varnishncsa.StatsdServer, varnishncsa.StatsdPrefix) statsdclient.CreateSocket() interval := time.Duration(int(time.Millisecond) * varnishncsa.StatsdSendInterval) stats := statsd.NewStatsdBuffer(interval, statsdclient) defer stats.Close() cmd := exec.Command("varnishncsa", "-F", `%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i" %{Varnish:time_firstbyte}x`) stdout, outerr := cmd.StdoutPipe() if outerr != nil { log.Fatal(outerr) } err := cmd.Start() if err != nil { log.Fatal(err) } scanner := bufio.NewScanner(stdout) for scanner.Scan() { r := Record{scanner.Text(), stats, varnishncsa.RecordRegex} r.Process() } if err := scanner.Err(); err != nil { fmt.Fprintln(os.Stderr, "There was an error with the scanner attached to varnishncsa", err) } cmd.Wait() }
// CreateStatsdClient creates a local instances of a statsd client. Any errors will be logged to // console and ignored. func CreateStatsdClient(statsdURL, statsdPrefix string) error { lock.Lock() defer lock.Unlock() if stats != noopClient { // Already initialized. Don't overwrite return nil } if statsdURL != "" { hostname, err := os.Hostname() if err != nil { log.Printf("Could not read hostname. Using default noop statsd client: %s", err) return err } prefix := fmt.Sprintf("%s.%s.artifacts.", statsdPrefix, hostname) statsdClient := statsd.NewStatsdClient(statsdURL, prefix) if statsdClient != nil { stats = statsd.NewStatsdBuffer(updateInterval, statsdClient) } } else { log.Println("No statsd URL provided. Using default noop statsd client") } return nil }
func main() { // Initialize the StatsD client prefix := "test.rob-egan." statsdclient := statsd.NewStatsdClient(agentServer, prefix) err := statsdclient.CreateSocket() if err != nil { log.Println(err) os.Exit(1) } interval := time.Second * 2 // aggregate stats and flush every 2 seconds stats := statsd.NewStatsdBuffer(interval, statsdclient) defer stats.Close() // Handler functions http.HandleFunc("/", handler) http.HandleFunc("/lissajous", func(w http.ResponseWriter, r *http.Request) { lissajous(w) }) http.HandleFunc("/debug", debug) http.HandleFunc("/count", counter) http.HandleFunc("/help", help) // The actual web server log.Print("Starting web server...\n") log.Print("Point your browser to http://", webServerHost, "/help for more info...\n") log.Fatal(http.ListenAndServe(webServerHost, nil)) }
func runLoop(redisHost string, redisPort int64, redisDb int64, statsdHost string, statsdPort int64, statsPrefix string, interval int64, queues []string) { client := redis.NewClient(&redis.Options{ Addr: fmt.Sprintf("%s:%d", redisHost, redisPort), DB: redisDb, }) _, connErr := client.Ping().Result() fmt.Println("connection errors? ", connErr) statsdClient := statsd.NewStatsdClient( fmt.Sprintf("%s:%d", statsdHost, statsdPort), fmt.Sprintf("%s.", statsPrefix), ) statsdClient.CreateSocket() stats := statsd.NewStatsdBuffer(time.Second*2, statsdClient) defer stats.Close() timeoutInterval := time.Duration(interval) * time.Millisecond for true { for _, name := range queues { go func(oneName string) { listLength, err := client.LLen(oneName).Result() stats.Gauge(oneName, listLength) fmt.Println(oneName, listLength, err) }(name) } time.Sleep(timeoutInterval) } }
func initStatsd(address string, prefix string) *statsd.StatsdBuffer { statsdclient := statsd.NewStatsdClient(address, prefix) statsdclient.CreateSocket() interval := time.Second * 10 // aggregate stats and flush every 2 seconds stats := statsd.NewStatsdBuffer(interval, statsdclient) return stats }
func mustStartStatsd(host string, prefix string, frequency time.Duration) *statsd.StatsdBuffer { sClient := statsd.NewStatsdClient(opts.StatsDHost, opts.StatsDPrefix) if err := sClient.CreateSocket(); err != nil { log.WithField("error", err).Fatal("could not open socket to statsd") } return statsd.NewStatsdBuffer(opts.statsdFrequency, sClient) }
func getStatsdBuffer(host string) (*statsd.StatsdBuffer, error) { statsdclient := statsd.NewStatsdClient(host, "aws.sqs.") if err := statsdclient.CreateSocket(); err != nil { log.WithField("error", err).Warn("unable to open socket for statsd") return nil, err } return statsd.NewStatsdBuffer(time.Minute, statsdclient), nil }
func NewStatsdClient(simulationPrefix string) *StatsdClient { statsdClient := statsd.NewStatsdClient("localhost:8125", simulationPrefix) statsdClient.CreateSocket() interval := time.Second * 2 stats := statsd.NewStatsdBuffer(interval, statsdClient) return &StatsdClient{ Stats: stats, } }
func main() { fmt.Println("Starting eISCP (ethernet Integra Serial Communication Protocol) Gateway") // Command line options flag.BoolVar(&debug, "debug", false, "enable verbose debugging") flag.BoolVar(&statsEnabled, "stats", false, "enable stats collecting") flag.StringVar(&defaultDevice, "device", "192.168.2.143", "IP address of device to connect to") flag.IntVar(&devicePort, "port", 60128, "port on device to commmunicate with") flag.IntVar(&defaultPort, "serve", 3000, "port to host REST API on") flag.StringVar(&statsdAddress, "statsd", "localhost:8125", "IP and Port of Statsd server") flag.StringVar(&statsdPrefix, "prefix", "eiscp", "A prefix prepended to all stats") // Now that we've defined our flags, parse them flag.Parse() if debug { fmt.Println("Displaying debug output.") } // init statsdclient := statsd.NewStatsdClient(statsdAddress, statsdPrefix) if statsEnabled { if debug { fmt.Println("Attempting connection to statsd") } statsdclient.CreateSocket() interval := time.Second * 2 // aggregate stats and flush every 2 seconds stats = statsd.NewStatsdBuffer(interval, statsdclient) defer stats.Close() } fmt.Println("Searching for device on port", devicePort, "at", defaultDevice) // Do our device stuff here go func() { for true { deviceLoop() } }() r := mux.NewRouter() r.HandleFunc("/kill", HandleKill) //Debug Function r.HandleFunc("/status/", GetStatus).Methods("GET") r.HandleFunc("/device/", DeleteDevice).Methods("DELETE") r.HandleFunc("/device/{ip}/{port}", PutDevice).Methods("PUT") r.HandleFunc("/device/{property}", GetProperty).Methods("GET") r.HandleFunc("/device/{property}/{value}", PostProperty).Methods("POST") http.Handle("/", r) fmt.Println("REST API listening on port", strconv.Itoa(defaultPort)) http.ListenAndServe(":"+strconv.Itoa(defaultPort), nil) }
func BenchmarkQuipoTimingAsDuration(b *testing.B) { s := newServer() c := quipo.NewStatsdBuffer(flushPeriod, quipo.NewStatsdClient(addr, prefix)) c.Logger = logger{} b.StartTimer() for i := 0; i < b.N; i++ { c.Incr(counterKey, 1) c.Gauge(gaugeKey, gaugeValue) c.PrecisionTiming(timingKey, tValDur) } c.Close() b.StopTimer() s.Close() }
func TestMain(m *testing.M) { var statsdHost = flag.String("test_statsd_host", "", "Statsd server hostname or IP") var statsdInterval = flag.Int("test_statsd_interval", 3, "Seconds between metric flush") var statsdPrefix = flag.String("test_statsd_prefix", "gopassivedns", "statsd metric prefix") flag.Parse() if *statsdHost != "" { statsdclient := statsd.NewStatsdClient(*statsdHost, *statsdPrefix) stats = statsd.NewStatsdBuffer(time.Duration(*statsdInterval)*time.Second, statsdclient) } os.Exit(m.Run()) }
func BenchmarkQuipo(b *testing.B) { s := newServer() c := quipo.NewStatsdBuffer(flushPeriod, quipo.NewStatsdClient(s.Addr(), prefix)) c.Logger = logger{} b.ResetTimer() for i := 0; i < b.N; i++ { c.Incr(counterKey, 1) c.Gauge(gaugeKey, gaugeValue) c.Timing(timingKey, int64(timingValue)) } c.Close() s.Close() }
func main() { //insert the ENV as defaults here, then after the parse we add the true defaults if nothing has been set //also convert true/false strings to true/false types config := initConfig() if config.cpuprofile != "" { f, err := os.Create(config.cpuprofile) if err != nil { log.Fatal(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() } var stats *statsd.StatsdBuffer = nil if config.statsdHost != "" { statsdclient := statsd.NewStatsdClient(config.statsdHost, config.statsdPrefix+"."+config.sensorName+".") stats = statsd.NewStatsdBuffer(time.Duration(config.statsdInterval)*time.Second, statsdclient) } handle := initHandle(config) if handle == nil { log.Fatal("Could not initilize the capture.") } logOpts := NewLogOptions(config) logChan := initLogging(logOpts) reChan := make(chan tcpDataStruct) //spin up logging thread(s) go logConn(logChan, logOpts, stats) //spin up the actual capture threads doCapture(handle, logChan, config, reChan, stats) log.Debug("Done! Goodbye.") os.Exit(0) }
func InitStatsd(conf interface{}) { host := conf.(map[string]interface{})["host"].(string) prefix := "" _interval := "1s" if val, ok := conf.(map[string]interface{})["prefix"].(string); ok { prefix = val } if val, ok := conf.(map[string]interface{})["interval"].(string); ok { _interval = val } statsdclient := statsd.NewStatsdClient(host, prefix) statsdclient.CreateSocket() interval, err := time.ParseDuration(_interval) if err != nil { Conf.Logger.Fatalf("can't parse interval %+v", err) } stats := statsd.NewStatsdBuffer(interval, statsdclient) go func() { defer stats.Close() Conf.Logger.Println("Statsd queue is starts") for data := range statsdCh { for op, values := range *data { for key, val := range values { switch op { case "increment": debug("send incr", key, val) go stats.Incr(key, val) case "timing": debug("send timing", key, val) go stats.Timing(key, val) case "gauge": debug("send gauge", key, val) go stats.Gauge(key, val) } } } } }() return }
func NewMasterWithStatsd(host string, workerConfig *WorkerConfig, command, balanceConfigTemplate, balanceConfigFile, digitalOceanToken, digitalOceanImageID string, overloadedCpuThreshold, underusedCpuThreshold float64, minWorkers, maxWorkers int64, pollInterval, cooldownInterval, surveyDeadline, queryInterval time.Duration, scaleNodes, changeWeights bool, statsdAddr, statsdPrefix string, statsdInterval time.Duration) *Master { master := NewMaster( host, workerConfig, command, balanceConfigTemplate, balanceConfigFile, digitalOceanToken, digitalOceanImageID, overloadedCpuThreshold, underusedCpuThreshold, minWorkers, maxWorkers, pollInterval, cooldownInterval, surveyDeadline, queryInterval, scaleNodes, changeWeights, ) statsdClient := statsd.NewStatsdClient(statsdAddr, statsdPrefix) statsdClient.CreateSocket() master.statsdClientBuffer = statsd.NewStatsdBuffer(statsdInterval, statsdClient) return master }
func NewMetricsManager(givenQueueManager *queueManager) *MetricsManager { m := MetricsManager{} m.queueManager = givenQueueManager m.metricsChannel = make(chan *Metric, 100) if Configuration.StatsDEndpoint != "" { m.statsdEnabled = true statsClient := statsd.NewStatsdClient(Configuration.StatsDEndpoint, "gamq.") statsClient.CreateSocket() interval := time.Second m.statsBuffer = statsd.NewStatsdBuffer(interval, statsClient) log.Debugf("Initialized StatsD - sending metrics to: %s", Configuration.StatsDEndpoint) } else { m.statsdEnabled = false } go m.listenForMetrics() return &m }
func main() { // init prefix := "myproject." statsdclient := statsd.NewStatsdClient("localhost:8125", prefix) err := statsdclient.CreateSocket() if nil != err { log.Println(err) os.Exit(1) } interval := time.Second * 2 // aggregate stats and flush every 2 seconds stats := statsd.NewStatsdBuffer(interval, statsdclient) defer stats.Close() // not buffered: send immediately statsdclient.Incr("mymetric", 4) // buffered: aggregate in memory before flushing stats.Incr("mymetric", 1) stats.Incr("mymetric", 3) stats.Incr("mymetric", 1) stats.Incr("mymetric", 1) }