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 762e347 OAL supports multiple values when as numeric (#6233)
762e347 is described below
commit 762e347cba4f71e81d43f9a3902bef1c4f84d734
Author: zhang-wei <[email protected]>
AuthorDate: Wed Jan 20 11:42:30 2021 +0800
OAL supports multiple values when as numeric (#6233)
---
CHANGES.md | 1 +
.../oal/rt/parser/ConditionExpression.java | 9 ++++++++-
.../skywalking/oal/rt/parser/OALListener.java | 1 +
.../skywalking/oal/rt/parser/ScriptParserTest.java | 22 +++++++++++++++++++++-
.../core/analysis/metrics/expression/InMatch.java | 19 +++++++++++++++++++
.../analysis/metrics/expression/InMatchTest.java | 20 ++++++++++----------
6 files changed, 60 insertions(+), 12 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index fea05af..9790ed7 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -71,6 +71,7 @@ Release Notes.
* Support Alarm to feishu
* Add the implementation of ConfigurationDiscovery on the OAP side.
* Fix bug in `parseInternalErrorCode` where some error codes are never reached.
+* OAL supports multiple values when as numeric
#### UI
* Fix un-removed tags in trace query.
diff --git
a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/ConditionExpression.java
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/ConditionExpression.java
index a9466f4..8a1efaf 100644
---
a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/ConditionExpression.java
+++
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/ConditionExpression.java
@@ -35,6 +35,7 @@ public class ConditionExpression {
private List<String> attributes = new ArrayList<>();
private String value;
private List<String> values;
+ private boolean number;
public ConditionExpression(final String expressionType, final String
attributes, final String value) {
this.expressionType = expressionType;
@@ -50,11 +51,17 @@ public class ConditionExpression {
}
}
+ public void isNumber() {
+ number = true;
+ }
+
public void enterMultiConditionValue() {
values = new LinkedList<>();
}
public void exitMultiConditionValue() {
- value = "new Object[]{" + String.join(",", values) + "}";
+ value = number ?
+ "new long[]{" + String.join(",", values) + "}" :
+ "new Object[]{" + String.join(",", values) + "}";
}
}
diff --git
a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/OALListener.java
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/OALListener.java
index ef93b77..4bc80ce 100644
---
a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/OALListener.java
+++
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/OALListener.java
@@ -196,6 +196,7 @@ public class OALListener extends OALParserBaseListener {
@Override
public void
enterNumberConditionValue(OALParser.NumberConditionValueContext ctx) {
+ conditionExpression.isNumber();
enterConditionValue(ctx.getText());
}
diff --git
a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/ScriptParserTest.java
b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/ScriptParserTest.java
index 1d28d13..10c9322 100644
---
a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/ScriptParserTest.java
+++
b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/ScriptParserTest.java
@@ -227,12 +227,32 @@ public class ScriptParserTest {
"org.apache.skywalking.oap.server.core.analysis.metrics.expression.InMatch",
expression.getExpressionObject()
);
- Assert.assertEquals("new Object[]{1,2,3}", expression.getRight());
+ Assert.assertEquals("new long[]{1,2,3}", expression.getRight());
}
@Test
public void testParse8() throws IOException {
ScriptParser parser = ScriptParser.createFromScriptText(
+ "service_response_s4_summary =
from(Service.latency).filter(latency != 1).filter(latency in [\"1\",\"2\",
\"3\"]).sum();",
+ TEST_SOURCE_PACKAGE
+ );
+ List<AnalysisResult> results = parser.parse().getMetricsStmts();
+ Assert.assertEquals(1, results.size());
+ AnalysisResult result = results.get(0);
+ List<Expression> expressions = result.getFilterExpressions();
+ Assert.assertEquals(2, expressions.size());
+ Expression expression = expressions.get(1);
+ Assert.assertEquals("source.getLatency()", expression.getLeft());
+ Assert.assertEquals(
+
"org.apache.skywalking.oap.server.core.analysis.metrics.expression.InMatch",
+ expression.getExpressionObject()
+ );
+ Assert.assertEquals("new Object[]{\"1\",\"2\",\"3\"}",
expression.getRight());
+ }
+
+ @Test
+ public void testParse9() throws IOException {
+ ScriptParser parser = ScriptParser.createFromScriptText(
"ServicePercent =
from(Service.sidecar.internalError).filter(sidecar.internalError ==
\"abc\").percent(sidecar.internalError != \"\");", TEST_SOURCE_PACKAGE);
List<AnalysisResult> results = parser.parse().getMetricsStmts();
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatch.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatch.java
index 897bd00..8745645 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatch.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatch.java
@@ -22,6 +22,25 @@ import
org.apache.skywalking.oap.server.core.analysis.metrics.annotation.FilterM
@FilterMatcher
public class InMatch {
+
+ public boolean match(int left, long[] rights) {
+ for (long right : rights) {
+ if (left == right) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean match(long left, long[] rights) {
+ for (long right : rights) {
+ if (left == right) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public boolean match(Object left, Object[] rights) {
for (Object right : rights) {
if (right instanceof String) {
diff --git
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatchTest.java
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatchTest.java
index 60530df..6597bf1 100644
---
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatchTest.java
+++
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatchTest.java
@@ -48,26 +48,26 @@ public class InMatchTest {
}
));
- Assert.assertTrue(new InMatch().match(1, new Object[] {
+ Assert.assertTrue(new InMatch().match(1, new long[] {
1,
2,
3
}));
- Assert.assertFalse(new InMatch().match(4, new Object[] {
+ Assert.assertFalse(new InMatch().match(4, new long[] {
1,
2,
3
}));
- Assert.assertTrue(new InMatch().match(1.0D, new Object[] {
- 1.0D,
- 2.0D,
- 3.0D
+ Assert.assertTrue(new InMatch().match(1L, new long[] {
+ 1,
+ 2,
+ 3
}));
- Assert.assertFalse(new InMatch().match(4.0D, new Object[] {
- 1.0D,
- 2.0D,
- 3.0D
+ Assert.assertFalse(new InMatch().match(4L, new long[] {
+ 1,
+ 2,
+ 3
}));
}
}