feat(aggregators.basicstats): Add percentage change (#13118)
This commit is contained in:
parent
129d8eb98e
commit
ca13259989
|
|
@ -26,11 +26,14 @@ See the [CONFIGURATION.md][CONFIGURATION.md] for more details.
|
|||
drop_original = false
|
||||
|
||||
## Configures which basic stats to push as fields
|
||||
# stats = ["count","diff","rate","min","max","mean","non_negative_diff","non_negative_rate","stdev","s2","sum","interval"]
|
||||
# stats = ["count","diff","rate","min","max","mean","non_negative_diff","non_negative_rate","percent_change","stdev","s2","sum","interval"]
|
||||
```
|
||||
|
||||
- stats
|
||||
- If not specified, then `count`, `min`, `max`, `mean`, `stdev`, and `s2` are aggregated and pushed as fields. `sum`, `diff` and `non_negative_diff` are not aggregated by default to maintain backwards compatibility.
|
||||
- If not specified, then `count`, `min`, `max`, `mean`, `stdev`, and `s2` are
|
||||
aggregated and pushed as fields. `sum`, `diff`, `non_negative_diff`,
|
||||
`percent_change` are not aggregated by default to maintain backwards
|
||||
compatibility.
|
||||
- If empty array, no stats are aggregated
|
||||
|
||||
## Measurements & Fields
|
||||
|
|
@ -44,6 +47,7 @@ See the [CONFIGURATION.md][CONFIGURATION.md] for more details.
|
|||
- field1_mean
|
||||
- field1_non_negative_diff (non-negative difference)
|
||||
- field1_non_negative_rate (non-negative rate per second)
|
||||
- field1_percent_change
|
||||
- field1_sum
|
||||
- field1_s2 (variance)
|
||||
- field1_stdev (standard deviation)
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ type configuredStats struct {
|
|||
nonNegativeDiff bool
|
||||
rate bool
|
||||
nonNegativeRate bool
|
||||
percentChange bool
|
||||
interval bool
|
||||
}
|
||||
|
||||
|
|
@ -191,6 +192,9 @@ func (b *BasicStats) Push(acc telegraf.Accumulator) {
|
|||
if b.statsConfig.rate {
|
||||
fields[k+"_rate"] = v.rate
|
||||
}
|
||||
if b.statsConfig.percentChange {
|
||||
fields[k+"_percent_change"] = v.diff / v.LAST * 100
|
||||
}
|
||||
if b.statsConfig.nonNegativeRate && v.diff >= 0 {
|
||||
fields[k+"_non_negative_rate"] = v.rate
|
||||
}
|
||||
|
|
@ -235,6 +239,8 @@ func (b *BasicStats) parseStats() *configuredStats {
|
|||
parsed.rate = true
|
||||
case "non_negative_rate":
|
||||
parsed.nonNegativeRate = true
|
||||
case "percent_change":
|
||||
parsed.percentChange = true
|
||||
case "interval":
|
||||
parsed.interval = true
|
||||
default:
|
||||
|
|
@ -258,6 +264,7 @@ func (b *BasicStats) getConfiguredStats() {
|
|||
nonNegativeDiff: false,
|
||||
rate: false,
|
||||
nonNegativeRate: false,
|
||||
percentChange: false,
|
||||
}
|
||||
} else {
|
||||
b.statsConfig = b.parseStats()
|
||||
|
|
|
|||
|
|
@ -536,6 +536,31 @@ func TestBasicStatsWithNonNegativeRate(t *testing.T) {
|
|||
}
|
||||
acc.AssertContainsTaggedFields(t, "m1", expectedFields, expectedTags)
|
||||
}
|
||||
|
||||
func TestBasicStatsWithPctChange(t *testing.T) {
|
||||
aggregator := NewBasicStats()
|
||||
aggregator.Stats = []string{"percent_change"}
|
||||
aggregator.Log = testutil.Logger{}
|
||||
aggregator.getConfiguredStats()
|
||||
|
||||
aggregator.Add(m1)
|
||||
aggregator.Add(m2)
|
||||
|
||||
acc := testutil.Accumulator{}
|
||||
aggregator.Push(&acc)
|
||||
expectedFields := map[string]interface{}{
|
||||
"a_percent_change": float64(0),
|
||||
"b_percent_change": float64(200),
|
||||
"c_percent_change": float64(100),
|
||||
"d_percent_change": float64(200),
|
||||
"g_percent_change": float64(-66.66666666666666),
|
||||
}
|
||||
expectedTags := map[string]string{
|
||||
"foo": "bar",
|
||||
}
|
||||
acc.AssertContainsTaggedFields(t, "m1", expectedFields, expectedTags)
|
||||
}
|
||||
|
||||
func TestBasicStatsWithInterval(t *testing.T) {
|
||||
aggregator := NewBasicStats()
|
||||
aggregator.Stats = []string{"interval"}
|
||||
|
|
|
|||
|
|
@ -8,4 +8,4 @@
|
|||
drop_original = false
|
||||
|
||||
## Configures which basic stats to push as fields
|
||||
# stats = ["count","diff","rate","min","max","mean","non_negative_diff","non_negative_rate","stdev","s2","sum","interval"]
|
||||
# stats = ["count","diff","rate","min","max","mean","non_negative_diff","non_negative_rate","percent_change","stdev","s2","sum","interval"]
|
||||
|
|
|
|||
Loading…
Reference in New Issue