// // does num pings against conn, waits for any we know of to return. // will wait up to wait seconds for a response, and sends 1 ping at a minimum // of interval. // // returns a tuple of float64 with at maximum num values: rtt in ms. // func (pi *PingInfo) pingTimes(conn net.Conn, registry *metrics.Registry) { count := 0 ping := NewPing(conn, pi) go ping.pingReader() wait_for := time.After(time.Duration(pi.Wait) * time.Second) for i := 0; i < pi.Count; i++ { go ping.sendPing() time.Sleep(time.Duration(ping.PingInfo.Interval) * time.Second) } timeout := false for i := pi.Count; i != 0 && !timeout; { select { case <-wait_for: timeout = true break case result := <-ping.ResultChannel: i-- count++ metrics.GetOrRegisterHistogram( "ns", *registry, metrics.NewUniformSample(pi.Count), ).Update(result) default: time.Sleep(1 * time.Nanosecond) } } update := int64(math.Floor(float64(count) / float64(pi.Count) * 100)) metrics.GetOrRegisterHistogram( "success", *registry, metrics.NewUniformSample(pi.Count), ).Update(update) }
func (a *Addr) ping() { errors := int64(0) start := time.Now() conn, err := net.Dial("tcp", a.Address) if err != nil { errors = 100 } else { conn.Close() metrics.GetOrRegisterHistogram( "ns", *a.Registry, metrics.NewUniformSample(60), ).Update(time.Since(start).Nanoseconds()) } metrics.GetOrRegisterHistogram( "errors", *a.Registry, metrics.NewUniformSample(60), ).Update(errors) }
func NewHeartbeatStatusTracker() StatusTracker { h := &heartbeatStatusTracker{} h.currentStatusGauge = metrics.GetOrRegisterGauge("current-status", metrics.DefaultRegistry) h.taskDurations = make(map[TaskType]metrics.Histogram) for t := UPDATE_AND_BUILD; t <= POLL; t++ { // Using the values from metrics.NewTimer(). s := metrics.NewExpDecaySample(1028, 0.015) h.taskDurations[t] = metrics.GetOrRegisterHistogram(fmt.Sprintf("duration-%s", t), metrics.DefaultRegistry, s) } h.lastSuccessTime = make(map[TaskType]time.Time) h.lastFailureTime = make(map[TaskType]time.Time) return h }
func (a *Addr) ping() { errors := int64(0) start := time.Now() res, err := http.Get(a.Address) if err != nil { errors = 100 } else { defer res.Body.Close() metrics.GetOrRegisterHistogram( "ns", *a.Registry, metrics.NewUniformSample(60), ).Update(time.Since(start).Nanoseconds()) } metrics.GetOrRegisterHistogram( "errors", *a.Registry, metrics.NewUniformSample(60), ).Update(errors) }
func NewMetrics() *ServerMetrics { m := new(ServerMetrics) m.qCounter = metrics.GetOrRegisterMeter("queries", nil) m.lastQueryCount = m.qCounter.Count() m.queriesHistogram = metrics.GetOrRegisterHistogram( "queries-histogram", nil, metrics.NewExpDecaySample(600, 0.015), ) m.goroutines = metrics.GetOrRegisterGauge("goroutines", nil) return m }
func TestHistograms(t *testing.T) { mock := &MockPutMetricsClient{} filter := &config.NoFilter{} cfg := &config.Config{ Client: mock, Filter: filter, } registry := metrics.NewRegistry() hist := metrics.GetOrRegisterHistogram(fmt.Sprintf("histo"), registry, metrics.NewUniformSample(1024)) hist.Update(1000) hist.Update(500) emitMetrics(registry, cfg) if mock.metricsPut < len(filter.Percentiles("")) { t.Fatal("No Metrics Put") } }
func (g *goMetricRegistry) Histogram(name string) accounting.Histogram { return metrics.GetOrRegisterHistogram(name, metrics.DefaultRegistry, metrics.NewExpDecaySample(1028, 0.015)) }