feature:compatible
This commit is contained in:
parent
fd0a3a0deb
commit
60fb01a811
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.idea/
|
37
histogram.go
37
histogram.go
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"math"
|
"math"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -55,6 +56,8 @@ type Histogram struct {
|
|||||||
upper uint64
|
upper uint64
|
||||||
|
|
||||||
sum float64
|
sum float64
|
||||||
|
|
||||||
|
compatible bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset resets the given histogram.
|
// Reset resets the given histogram.
|
||||||
@ -149,7 +152,10 @@ func (h *Histogram) VisitNonZeroBuckets(f func(vmrange string, count uint64)) {
|
|||||||
//
|
//
|
||||||
// The returned histogram is safe to use from concurrent goroutines.
|
// The returned histogram is safe to use from concurrent goroutines.
|
||||||
func NewHistogram(name string) *Histogram {
|
func NewHistogram(name string) *Histogram {
|
||||||
return defaultSet.NewHistogram(name)
|
return defaultSet.NewHistogram(name, true)
|
||||||
|
}
|
||||||
|
func NewHistogramByVM(name string) *Histogram {
|
||||||
|
return defaultSet.NewHistogram(name, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetOrCreateHistogram returns registered histogram with the given name
|
// GetOrCreateHistogram returns registered histogram with the given name
|
||||||
@ -201,6 +207,10 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (h *Histogram) marshalTo(prefix string, w io.Writer) {
|
func (h *Histogram) marshalTo(prefix string, w io.Writer) {
|
||||||
|
if h.compatible {
|
||||||
|
h.marshalToPrometheus(prefix, w)
|
||||||
|
return
|
||||||
|
}
|
||||||
countTotal := uint64(0)
|
countTotal := uint64(0)
|
||||||
h.VisitNonZeroBuckets(func(vmrange string, count uint64) {
|
h.VisitNonZeroBuckets(func(vmrange string, count uint64) {
|
||||||
tag := fmt.Sprintf("vmrange=%q", vmrange)
|
tag := fmt.Sprintf("vmrange=%q", vmrange)
|
||||||
@ -221,6 +231,31 @@ func (h *Histogram) marshalTo(prefix string, w io.Writer) {
|
|||||||
}
|
}
|
||||||
fmt.Fprintf(w, "%s_count%s %d\n", name, labels, countTotal)
|
fmt.Fprintf(w, "%s_count%s %d\n", name, labels, countTotal)
|
||||||
}
|
}
|
||||||
|
func (h *Histogram) marshalToPrometheus(prefix string, w io.Writer) {
|
||||||
|
countTotal := uint64(0)
|
||||||
|
h.VisitNonZeroBuckets(func(vmrange string, count uint64) {
|
||||||
|
v := strings.Split(vmrange, "...")
|
||||||
|
if len(v) != 2 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
tag := fmt.Sprintf("le=%q", v[1])
|
||||||
|
metricName := addTag(prefix, tag)
|
||||||
|
name, labels := splitMetricName(metricName)
|
||||||
|
countTotal += count
|
||||||
|
fmt.Fprintf(w, "%s_bucket%s %d\n", name, labels, countTotal)
|
||||||
|
})
|
||||||
|
if countTotal == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
name, labels := splitMetricName(prefix)
|
||||||
|
sum := h.getSum()
|
||||||
|
if float64(int64(sum)) == sum {
|
||||||
|
fmt.Fprintf(w, "%s_sum%s %d\n", name, labels, int64(sum))
|
||||||
|
} else {
|
||||||
|
fmt.Fprintf(w, "%s_sum%s %g\n", name, labels, sum)
|
||||||
|
}
|
||||||
|
fmt.Fprintf(w, "%s_count%s %d\n", name, labels, countTotal)
|
||||||
|
}
|
||||||
|
|
||||||
func (h *Histogram) getSum() float64 {
|
func (h *Histogram) getSum() float64 {
|
||||||
h.mu.Lock()
|
h.mu.Lock()
|
||||||
|
4
set.go
4
set.go
@ -65,8 +65,8 @@ func (s *Set) WritePrometheus(w io.Writer) {
|
|||||||
// - foo{bar="baz",aaa="b"}
|
// - foo{bar="baz",aaa="b"}
|
||||||
//
|
//
|
||||||
// The returned histogram is safe to use from concurrent goroutines.
|
// The returned histogram is safe to use from concurrent goroutines.
|
||||||
func (s *Set) NewHistogram(name string) *Histogram {
|
func (s *Set) NewHistogram(name string, compatible bool) *Histogram {
|
||||||
h := &Histogram{}
|
h := &Histogram{compatible: compatible}
|
||||||
s.registerMetric(name, h)
|
s.registerMetric(name, h)
|
||||||
return h
|
return h
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ func TestNewSet(t *testing.T) {
|
|||||||
if sm == nil {
|
if sm == nil {
|
||||||
t.Fatalf("NewSummary returned nil")
|
t.Fatalf("NewSummary returned nil")
|
||||||
}
|
}
|
||||||
h := s.NewHistogram(fmt.Sprintf("histogram_%d", j))
|
h := s.NewHistogram(fmt.Sprintf("histogram_%d", j), false)
|
||||||
if h == nil {
|
if h == nil {
|
||||||
t.Fatalf("NewHistogram returned nil")
|
t.Fatalf("NewHistogram returned nil")
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ func TestSetUnregisterAllMetrics(t *testing.T) {
|
|||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
_ = s.NewCounter(fmt.Sprintf("counter_%d", i))
|
_ = s.NewCounter(fmt.Sprintf("counter_%d", i))
|
||||||
_ = s.NewSummary(fmt.Sprintf("summary_%d", i))
|
_ = s.NewSummary(fmt.Sprintf("summary_%d", i))
|
||||||
_ = s.NewHistogram(fmt.Sprintf("histogram_%d", i))
|
_ = s.NewHistogram(fmt.Sprintf("histogram_%d", i), false)
|
||||||
_ = s.NewGauge(fmt.Sprintf("gauge_%d", i), func() float64 { return 0 })
|
_ = s.NewGauge(fmt.Sprintf("gauge_%d", i), func() float64 { return 0 })
|
||||||
expectedMetricsCount += 4
|
expectedMetricsCount += 4
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user