1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // Copyright (c) 2015 Arista Networks, Inc.
- // Use of this source code is governed by the Apache License 2.0
- // that can be found in the COPYING file.
- package monitor
- import (
- "expvar"
- "strings"
- "time"
- "notabug.org/themusicgod1/goarista/monitor/stats"
- )
- // LatencyHistogram contains the data needed to properly export itself to expvar
- // and provide a pretty printed version
- type LatencyHistogram struct {
- name string
- histogram *stats.Histogram
- latencyUnit time.Duration
- }
- // NewLatencyHistogram creates a new histogram and registers an HTTP handler for it.
- func NewLatencyHistogram(name string, latencyUnit time.Duration, numBuckets int,
- growth float64, smallest float64, minValue int64) *LatencyHistogram {
- histogramOptions := stats.HistogramOptions{
- NumBuckets: numBuckets,
- GrowthFactor: growth,
- SmallestBucketSize: smallest,
- MinValue: minValue,
- }
- histogram := &LatencyHistogram{
- name: name,
- histogram: stats.NewHistogram(histogramOptions),
- latencyUnit: latencyUnit,
- }
- expvar.Publish(name, histogram)
- return histogram
- }
- // Print returns the histogram as a chart
- func (h *LatencyHistogram) Print() string {
- return h.addUnits(h.histogram.Delta1m().String()) +
- h.addUnits(h.histogram.Delta10m().String()) +
- h.addUnits(h.histogram.Delta1h().String()) +
- h.addUnits(h.histogram.Value().String())
- }
- // String returns the histogram as JSON.
- func (h *LatencyHistogram) String() string {
- return h.histogram.String()
- }
- // UpdateLatencyValues updates the LatencyHistogram's buckets with the new
- // datapoint and updates the string associated with the expvar.String
- func (h *LatencyHistogram) UpdateLatencyValues(delta time.Duration) {
- h.histogram.Add(int64(delta / h.latencyUnit))
- }
- func (h *LatencyHistogram) addUnits(hist string) string {
- i := strings.Index(hist, "\n")
- return hist[:i] + "µs" + hist[i:]
- }
|