feat(metric): added `Dec()` and `Sub()` in `GaugeVec` interface (#3666)

master
#Suyghur 1 year ago committed by GitHub
parent 922efbfc2d
commit 1e2a12b3d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -16,8 +16,12 @@ type (
Set(v float64, labels ...string) Set(v float64, labels ...string)
// Inc increments labels. // Inc increments labels.
Inc(labels ...string) Inc(labels ...string)
// Dec decrements labels.
Dec(labels ...string)
// Add adds v to labels. // Add adds v to labels.
Add(v float64, labels ...string) Add(v float64, labels ...string)
// Sub subtracts v to labels.
Sub(v float64, labels ...string)
close() bool close() bool
} }
@ -50,6 +54,14 @@ func NewGaugeVec(cfg *GaugeVecOpts) GaugeVec {
return gv return gv
} }
func (gv *promGaugeVec) Set(v float64, labels ...string) {
if !prometheus.Enabled() {
return
}
gv.gauge.WithLabelValues(labels...).Set(v)
}
func (gv *promGaugeVec) Inc(labels ...string) { func (gv *promGaugeVec) Inc(labels ...string) {
if !prometheus.Enabled() { if !prometheus.Enabled() {
return return
@ -58,6 +70,13 @@ func (gv *promGaugeVec) Inc(labels ...string) {
gv.gauge.WithLabelValues(labels...).Inc() gv.gauge.WithLabelValues(labels...).Inc()
} }
func (gv *promGaugeVec) Dec(labels ...string) {
if !prometheus.Enabled() {
return
}
gv.gauge.WithLabelValues(labels...).Dec()
}
func (gv *promGaugeVec) Add(v float64, labels ...string) { func (gv *promGaugeVec) Add(v float64, labels ...string) {
if !prometheus.Enabled() { if !prometheus.Enabled() {
return return
@ -66,12 +85,11 @@ func (gv *promGaugeVec) Add(v float64, labels ...string) {
gv.gauge.WithLabelValues(labels...).Add(v) gv.gauge.WithLabelValues(labels...).Add(v)
} }
func (gv *promGaugeVec) Set(v float64, labels ...string) { func (gv *promGaugeVec) Sub(v float64, labels ...string) {
if !prometheus.Enabled() { if !prometheus.Enabled() {
return return
} }
gv.gauge.WithLabelValues(labels...).Sub(v)
gv.gauge.WithLabelValues(labels...).Set(v)
} }
func (gv *promGaugeVec) close() bool { func (gv *promGaugeVec) close() bool {

@ -40,6 +40,23 @@ func TestGaugeInc(t *testing.T) {
assert.Equal(t, float64(2), r) assert.Equal(t, float64(2), r)
} }
func TestGaugeDec(t *testing.T) {
startAgent()
gaugeVec := NewGaugeVec(&GaugeVecOpts{
Namespace: "rpc_client",
Subsystem: "requests",
Name: "duration_ms",
Help: "rpc server requests duration(ms).",
Labels: []string{"path"},
})
defer gaugeVec.close()
gv, _ := gaugeVec.(*promGaugeVec)
gv.Dec("/users")
gv.Dec("/users")
r := testutil.ToFloat64(gv.gauge)
assert.Equal(t, float64(-2), r)
}
func TestGaugeAdd(t *testing.T) { func TestGaugeAdd(t *testing.T) {
startAgent() startAgent()
gaugeVec := NewGaugeVec(&GaugeVecOpts{ gaugeVec := NewGaugeVec(&GaugeVecOpts{
@ -57,6 +74,23 @@ func TestGaugeAdd(t *testing.T) {
assert.Equal(t, float64(20), r) assert.Equal(t, float64(20), r)
} }
func TestGaugeSub(t *testing.T) {
startAgent()
gaugeVec := NewGaugeVec(&GaugeVecOpts{
Namespace: "rpc_client",
Subsystem: "request",
Name: "duration_ms",
Help: "rpc server requests duration(ms).",
Labels: []string{"path"},
})
defer gaugeVec.close()
gv, _ := gaugeVec.(*promGaugeVec)
gv.Sub(-100, "/classroom")
gv.Sub(30, "/classroom")
r := testutil.ToFloat64(gv.gauge)
assert.Equal(t, float64(70), r)
}
func TestGaugeSet(t *testing.T) { func TestGaugeSet(t *testing.T) {
startAgent() startAgent()
gaugeVec := NewGaugeVec(&GaugeVecOpts{ gaugeVec := NewGaugeVec(&GaugeVecOpts{

Loading…
Cancel
Save