From dd70e22cda582f52caf18b194debc97c2062945b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20L=C3=B3pez=20de=20la=20Franca=20Beltran?= Date: Wed, 20 Mar 2024 08:11:57 +0100 Subject: [PATCH] Add 'negative' value type for negative events --- js/summary.js | 14 ++++++++------ metrics/builtin.go | 2 +- metrics/metric_type.go | 7 ++++--- metrics/value_type.go | 13 ++++++++++--- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/js/summary.js b/js/summary.js index 57eaaf315f2..a7d2b647122 100644 --- a/js/summary.js +++ b/js/summary.js @@ -230,12 +230,14 @@ function nonTrendMetricValueForSum(metric, timeUnit) { 'min=' + humanizeValue(metric.values.min, metric, timeUnit), 'max=' + humanizeValue(metric.values.max, metric, timeUnit), ] - case 'rate': - return [ - humanizeValue(metric.values.rate, metric, timeUnit), - succMark + ' ' + metric.values.passes, - failMark + ' ' + metric.values.fails, - ] + case 'rate': + const passesMark = metric.contains === 'negative' ? failMark : succMark; + const failsMark = metric.contains === 'negative' ? succMark : failMark; + return [ + humanizeValue(metric.values.rate, metric, timeUnit), + passesMark + ' ' + metric.values.passes, + failsMark + ' ' + metric.values.fails, + ] default: return ['[no data]'] } diff --git a/metrics/builtin.go b/metrics/builtin.go index d05f2baf002..641fcdac637 100644 --- a/metrics/builtin.go +++ b/metrics/builtin.go @@ -87,7 +87,7 @@ func RegisterBuiltinMetrics(registry *Registry) *BuiltinMetrics { GroupDuration: registry.MustNewMetric(GroupDurationName, Trend, Time), HTTPReqs: registry.MustNewMetric(HTTPReqsName, Counter), - HTTPReqFailed: registry.MustNewMetric(HTTPReqFailedName, Rate), + HTTPReqFailed: registry.MustNewMetric(HTTPReqFailedName, Rate, Negative), HTTPReqDuration: registry.MustNewMetric(HTTPReqDurationName, Trend, Time), HTTPReqBlocked: registry.MustNewMetric(HTTPReqBlockedName, Trend, Time), HTTPReqConnecting: registry.MustNewMetric(HTTPReqConnectingName, Trend, Time), diff --git a/metrics/metric_type.go b/metrics/metric_type.go index bc787a23f9f..e236b9b307f 100644 --- a/metrics/metric_type.go +++ b/metrics/metric_type.go @@ -22,9 +22,10 @@ const ( trendString = "trend" rateString = "rate" - defaultString = "default" - timeString = "time" - dataString = "data" + defaultString = "default" + timeString = "time" + dataString = "data" + negativeString = "negative" ) // MarshalJSON serializes a MetricType as a human readable string. diff --git a/metrics/value_type.go b/metrics/value_type.go index 78ec798f1fc..e53400102a0 100644 --- a/metrics/value_type.go +++ b/metrics/value_type.go @@ -4,9 +4,10 @@ import "errors" // Possible values for ValueType. const ( - Default = ValueType(iota) // Values are presented as-is - Time // Values are time durations (milliseconds) - Data // Values are data amounts (bytes) + Default = ValueType(iota) // Values are presented as-is + Time // Values are time durations (milliseconds) + Data // Values are data amounts (bytes) + Negative // Values represent negative events (e.g. failed requests) ) // ErrInvalidValueType indicates the serialized value type is invalid. @@ -33,6 +34,8 @@ func (t ValueType) MarshalText() ([]byte, error) { return []byte(timeString), nil case Data: return []byte(dataString), nil + case Negative: + return []byte(negativeString), nil default: return nil, ErrInvalidValueType } @@ -47,6 +50,8 @@ func (t *ValueType) UnmarshalText(data []byte) error { *t = Time case dataString: *t = Data + case negativeString: + *t = Negative default: return ErrInvalidValueType } @@ -62,6 +67,8 @@ func (t ValueType) String() string { return timeString case Data: return dataString + case Negative: + return negativeString default: return "[INVALID]" }