diff --git a/go.mod b/go.mod index 7e9ed3955..c438595fc 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ require ( cloud.google.com/go v0.51.0 // indirect cloud.google.com/go/storage v1.5.0 github.com/VictoriaMetrics/fastcache v1.5.7 - github.com/VictoriaMetrics/metrics v1.9.3 + github.com/VictoriaMetrics/metrics v1.10.1 github.com/aws/aws-sdk-go v1.28.7 github.com/cespare/xxhash/v2 v2.1.1 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect diff --git a/go.sum b/go.sum index 72cdd9ed7..32704432d 100644 --- a/go.sum +++ b/go.sum @@ -28,8 +28,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/VictoriaMetrics/fastcache v1.5.7 h1:4y6y0G8PRzszQUYIQHHssv/jgPHAb5qQuuDNdCbyAgw= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= -github.com/VictoriaMetrics/metrics v1.9.3 h1:+1kZnOIb8RY825Nb9q9yMrPcOYuPE2GrZWxUh59XnHI= -github.com/VictoriaMetrics/metrics v1.9.3/go.mod h1:LU2j9qq7xqZYXz8tF3/RQnB2z2MbZms5TDiIg9/NHiQ= +github.com/VictoriaMetrics/metrics v1.10.1 h1:g10gmOvFLKYav0GlVSGbxCek6dSMqMY8MlvO9OkEgEg= +github.com/VictoriaMetrics/metrics v1.10.1/go.mod h1:LU2j9qq7xqZYXz8tF3/RQnB2z2MbZms5TDiIg9/NHiQ= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/aws/aws-sdk-go v1.28.7 h1:8RUfzsEmyXR8a9G7o2snfUKwrSuqks/k4C7TIfXDDrY= diff --git a/vendor/github.com/VictoriaMetrics/metrics/floatcounter.go b/vendor/github.com/VictoriaMetrics/metrics/floatcounter.go new file mode 100644 index 000000000..d01dd851e --- /dev/null +++ b/vendor/github.com/VictoriaMetrics/metrics/floatcounter.go @@ -0,0 +1,82 @@ +package metrics + +import ( + "fmt" + "io" + "sync" +) + +// NewFloatCounter registers and returns new counter of float64 type with the given name. +// +// name must be valid Prometheus-compatible metric with possible labels. +// For instance, +// +// * foo +// * foo{bar="baz"} +// * foo{bar="baz",aaa="b"} +// +// The returned counter is safe to use from concurrent goroutines. +func NewFloatCounter(name string) *FloatCounter { + return defaultSet.NewFloatCounter(name) +} + +// FloatCounter is a float64 counter guarded by RWmutex. +// +// It may be used as a gauge if Add and Sub are called. +type FloatCounter struct { + mu sync.Mutex + n float64 +} + +// Add adds n to fc. +func (fc *FloatCounter) Add(n float64) { + fc.mu.Lock() + fc.n += n + fc.mu.Unlock() +} + +// Sub substracts n from fc. +func (fc *FloatCounter) Sub(n float64) { + fc.mu.Lock() + fc.n -= n + fc.mu.Unlock() +} + +// Get returns the current value for fc. +func (fc *FloatCounter) Get() float64 { + fc.mu.Lock() + n := fc.n + fc.mu.Unlock() + return n +} + +// Set sets fc value to n. +func (fc *FloatCounter) Set(n float64) { + fc.mu.Lock() + fc.n = n + fc.mu.Unlock() +} + +// marshalTo marshals fc with the given prefix to w. +func (fc *FloatCounter) marshalTo(prefix string, w io.Writer) { + v := fc.Get() + fmt.Fprintf(w, "%s %g\n", prefix, v) +} + +// GetOrCreateFloatCounter returns registered FloatCounter with the given name +// or creates new FloatCounter if the registry doesn't contain FloatCounter with +// the given name. +// +// name must be valid Prometheus-compatible metric with possible labels. +// For instance, +// +// * foo +// * foo{bar="baz"} +// * foo{bar="baz",aaa="b"} +// +// The returned FloatCounter is safe to use from concurrent goroutines. +// +// Performance tip: prefer NewFloatCounter instead of GetOrCreateFloatCounter. +func GetOrCreateFloatCounter(name string) *FloatCounter { + return defaultSet.GetOrCreateFloatCounter(name) +} diff --git a/vendor/github.com/VictoriaMetrics/metrics/histogram.go b/vendor/github.com/VictoriaMetrics/metrics/histogram.go index 88263cccb..3ddf68777 100644 --- a/vendor/github.com/VictoriaMetrics/metrics/histogram.go +++ b/vendor/github.com/VictoriaMetrics/metrics/histogram.go @@ -35,7 +35,7 @@ const ( // // Histogram buckets can be converted to Prometheus-like buckets with `le` labels // with `prometheus_buckets(_bucket)` function from PromQL extensions in VictoriaMetrics. -// (see https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/ExtendedPromQL ): +// (see https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/MetricsQL ): // // prometheus_buckets(request_duration_bucket) // diff --git a/vendor/github.com/VictoriaMetrics/metrics/set.go b/vendor/github.com/VictoriaMetrics/metrics/set.go index 15976df75..3b37e9109 100644 --- a/vendor/github.com/VictoriaMetrics/metrics/set.go +++ b/vendor/github.com/VictoriaMetrics/metrics/set.go @@ -169,6 +169,64 @@ func (s *Set) GetOrCreateCounter(name string) *Counter { return c } +// NewFloatCounter registers and returns new FloatCounter with the given name in the s. +// +// name must be valid Prometheus-compatible metric with possible labels. +// For instance, +// +// * foo +// * foo{bar="baz"} +// * foo{bar="baz",aaa="b"} +// +// The returned FloatCounter is safe to use from concurrent goroutines. +func (s *Set) NewFloatCounter(name string) *FloatCounter { + c := &FloatCounter{} + s.registerMetric(name, c) + return c +} + +// GetOrCreateFloatCounter returns registered FloatCounter in s with the given name +// or creates new FloatCounter if s doesn't contain FloatCounter with the given name. +// +// name must be valid Prometheus-compatible metric with possible labels. +// For instance, +// +// * foo +// * foo{bar="baz"} +// * foo{bar="baz",aaa="b"} +// +// The returned FloatCounter is safe to use from concurrent goroutines. +// +// Performance tip: prefer NewFloatCounter instead of GetOrCreateFloatCounter. +func (s *Set) GetOrCreateFloatCounter(name string) *FloatCounter { + s.mu.Lock() + nm := s.m[name] + s.mu.Unlock() + if nm == nil { + // Slow path - create and register missing counter. + if err := validateMetric(name); err != nil { + panic(fmt.Errorf("BUG: invalid metric name %q: %s", name, err)) + } + nmNew := &namedMetric{ + name: name, + metric: &FloatCounter{}, + } + s.mu.Lock() + nm = s.m[name] + if nm == nil { + nm = nmNew + s.m[name] = nm + s.a = append(s.a, nm) + } + s.mu.Unlock() + } + c, ok := nm.metric.(*FloatCounter) + if !ok { + panic(fmt.Errorf("BUG: metric %q isn't a Counter. It is %T", name, nm.metric)) + } + return c +} + // NewGauge registers and returns gauge with the given name in s, which calls f // to obtain gauge value. // diff --git a/vendor/modules.txt b/vendor/modules.txt index d0e7891fb..eb50807e8 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -12,7 +12,7 @@ cloud.google.com/go/storage github.com/BurntSushi/toml # github.com/VictoriaMetrics/fastcache v1.5.7 github.com/VictoriaMetrics/fastcache -# github.com/VictoriaMetrics/metrics v1.9.3 +# github.com/VictoriaMetrics/metrics v1.10.1 github.com/VictoriaMetrics/metrics # github.com/aws/aws-sdk-go v1.28.7 github.com/aws/aws-sdk-go/aws