You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2023/03/29 09:30:47 UTC
[skywalking] branch master updated: Support alarm metric OP `!=` (#10610)
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 886589c15c Support alarm metric OP `!=` (#10610)
886589c15c is described below
commit 886589c15c6225d18e7ca170a814f94bcf0abbff
Author: innerpeacez <in...@gmail.com>
AuthorDate: Wed Mar 29 17:30:31 2023 +0800
Support alarm metric OP `!=` (#10610)
---
docs/en/changes/changes.md | 1 +
docs/en/setup/backend/backend-alarm.md | 2 +-
.../oap/server/core/alarm/provider/AlarmRule.java | 1 -
.../oap/server/core/alarm/provider/OP.java | 29 +++++++++++------
.../oap/server/core/alarm/provider/OPTest.java | 38 +++++++++++++++-------
5 files changed, 47 insertions(+), 24 deletions(-)
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 38073edeb5..b76c3f3272 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -21,6 +21,7 @@
* Fix PromQL HTTP API `/api/v1/labels` response missing `service` label.
* Fix possible NPE when initialize `IntList`.
* Support parse PromQL expression has empty labels in the braces for metadata query.
+* Support alarm metric OP `!=`.
#### UI
* Revert: cpm5d function. This feature is cancelled from backend.
diff --git a/docs/en/setup/backend/backend-alarm.md b/docs/en/setup/backend/backend-alarm.md
index 83025c3bda..f93856fbd4 100644
--- a/docs/en/setup/backend/backend-alarm.md
+++ b/docs/en/setup/backend/backend-alarm.md
@@ -43,7 +43,7 @@ The four label settings mentioned above must implement `LabeledValueHolder`.*
For multiple-value metrics, such as **percentile**, the threshold is an array. It is described as: `value1, value2, value3, value4, value5`.
Each value may serve as the threshold for each value of the metrics. Set the value to `-` if you do not wish to trigger the Alarm by one or more of the values.
For example, in **percentile**, `value1` is the threshold of P50, and `-, -, value3, value4, value5` means that there is no threshold for P50 and P75 in the percentile alarm rule.
-- **OP**. The operator. It supports `>`, `>=`, `<`, `<=`, `==`. We welcome contributions of all OPs.
+- **OP**. The operator. It supports `>`, `>=`, `<`, `<=`, `==`, `!=`. We welcome contributions of all OPs.
- **Period**. The size of metrics cache in minutes for checking the alarm conditions. This is a time window that corresponds to the backend deployment env time.
- **Count**. Within a period window, if the number of times which **value** goes over the threshold (based on OP) reaches `count`, then an alarm will be sent.
- **Only as condition**. Indicates if the rule can send notifications or if it simply serves as a condition of the composite rule.
diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmRule.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmRule.java
index 86bced4349..70a9c43ff5 100644
--- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmRule.java
+++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmRule.java
@@ -36,7 +36,6 @@ import lombok.ToString;
@ToString
public class AlarmRule {
private String alarmRuleName;
-
private String metricsName;
private ArrayList<String> includeNames;
private String includeNamesRegex;
diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/OP.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/OP.java
index 653ebb1315..7ae660972b 100644
--- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/OP.java
+++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/OP.java
@@ -21,28 +21,28 @@ package org.apache.skywalking.oap.server.core.alarm.provider;
import static java.util.Objects.requireNonNull;
public enum OP {
- GREATER {
+ GT {
@Override
public boolean test(final Number expected, final Number actual) {
return requireNonNull(actual, "actual").doubleValue() > requireNonNull(expected, "expected").doubleValue();
}
},
- GREATER_EQ {
+ GTE {
@Override
public boolean test(final Number expected, final Number actual) {
return requireNonNull(actual, "actual").doubleValue() >= requireNonNull(expected, "expected").doubleValue();
}
},
- LESS {
+ LT {
@Override
public boolean test(final Number expected, final Number actual) {
return requireNonNull(actual, "actual").doubleValue() < requireNonNull(expected, "expected").doubleValue();
}
},
- LESS_EQ {
+ LTE {
@Override
public boolean test(final Number expected, final Number actual) {
return requireNonNull(actual, "actual").doubleValue() <= requireNonNull(expected, "expected").doubleValue();
@@ -51,25 +51,34 @@ public enum OP {
// NOTICE: double equal is not reliable in Java,
// match result is not predictable
- EQUAL {
+ EQ {
@Override
public boolean test(final Number expected, final Number actual) {
return requireNonNull(actual, "actual").doubleValue() == requireNonNull(expected, "expected").doubleValue();
}
+ },
+
+ NEQ {
+ @Override
+ public boolean test(final Number expected, final Number actual) {
+ return requireNonNull(actual, "actual").doubleValue() != requireNonNull(expected, "expected").doubleValue();
+ }
};
public static OP get(String op) {
switch (op) {
case ">":
- return GREATER;
+ return GT;
case ">=":
- return GREATER_EQ;
+ return GTE;
case "<":
- return LESS;
+ return LT;
case "<=":
- return LESS_EQ;
+ return LTE;
case "==":
- return EQUAL;
+ return EQ;
+ case "!=":
+ return NEQ;
default:
throw new IllegalArgumentException("unknown op, " + op);
}
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/OPTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/OPTest.java
index c18f800442..8051f344e6 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/OPTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/OPTest.java
@@ -25,20 +25,34 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
public class OPTest {
@Test
public void test() {
- assertTrue(OP.EQUAL.test(123, 123));
- assertTrue(OP.EQUAL.test(123L, 123L));
- assertTrue(OP.EQUAL.test(123.0D, 123.0D));
+ assertTrue(OP.EQ.test(123, 123));
+ assertTrue(OP.EQ.test(123L, 123L));
+ assertTrue(OP.EQ.test(123.0D, 123.0D));
- assertTrue(OP.GREATER.test(122, 123));
- assertTrue(OP.GREATER.test(122L, 123L));
- assertTrue(OP.GREATER.test(122.0D, 123.0D));
+ assertTrue(OP.NEQ.test(124, 123));
+ assertTrue(OP.NEQ.test(124L, 123L));
+ assertTrue(OP.NEQ.test(124.0D, 123.0D));
- assertTrue(OP.GREATER_EQ.test(122, 123));
- assertTrue(OP.GREATER_EQ.test(122L, 123L));
- assertTrue(OP.GREATER_EQ.test(122.0D, 123.0D));
+ assertTrue(OP.GT.test(122, 123));
+ assertTrue(OP.GT.test(122L, 123L));
+ assertTrue(OP.GT.test(122.0D, 123.0D));
- assertTrue(OP.LESS.test(124, 123));
- assertTrue(OP.LESS.test(124L, 123L));
- assertTrue(OP.LESS.test(124.0D, 123.0D));
+ assertTrue(OP.GTE.test(122, 123));
+ assertTrue(OP.GTE.test(122L, 123L));
+ assertTrue(OP.GTE.test(122.0D, 123.0D));
+ assertTrue(OP.GTE.test(122, 122));
+ assertTrue(OP.GTE.test(122L, 122L));
+ assertTrue(OP.GTE.test(122.0D, 122.0D));
+
+ assertTrue(OP.LT.test(124, 123));
+ assertTrue(OP.LT.test(124L, 123L));
+ assertTrue(OP.LT.test(124.0D, 123.0D));
+
+ assertTrue(OP.LTE.test(124, 124));
+ assertTrue(OP.LTE.test(124L, 124L));
+ assertTrue(OP.LTE.test(124.0D, 124.0D));
+ assertTrue(OP.LTE.test(124, 123));
+ assertTrue(OP.LTE.test(124L, 123L));
+ assertTrue(OP.LTE.test(124.0D, 123.0D));
}
}