未验证 提交 762e347c 编写于 作者: Z zhang-wei 提交者: GitHub

OAL supports multiple values when as numeric (#6233)

上级 a8e66244
...@@ -71,6 +71,7 @@ Release Notes. ...@@ -71,6 +71,7 @@ Release Notes.
* Support Alarm to feishu * Support Alarm to feishu
* Add the implementation of ConfigurationDiscovery on the OAP side. * Add the implementation of ConfigurationDiscovery on the OAP side.
* Fix bug in `parseInternalErrorCode` where some error codes are never reached. * Fix bug in `parseInternalErrorCode` where some error codes are never reached.
* OAL supports multiple values when as numeric
#### UI #### UI
* Fix un-removed tags in trace query. * Fix un-removed tags in trace query.
......
...@@ -35,6 +35,7 @@ public class ConditionExpression { ...@@ -35,6 +35,7 @@ public class ConditionExpression {
private List<String> attributes = new ArrayList<>(); private List<String> attributes = new ArrayList<>();
private String value; private String value;
private List<String> values; private List<String> values;
private boolean number;
public ConditionExpression(final String expressionType, final String attributes, final String value) { public ConditionExpression(final String expressionType, final String attributes, final String value) {
this.expressionType = expressionType; this.expressionType = expressionType;
...@@ -50,11 +51,17 @@ public class ConditionExpression { ...@@ -50,11 +51,17 @@ public class ConditionExpression {
} }
} }
public void isNumber() {
number = true;
}
public void enterMultiConditionValue() { public void enterMultiConditionValue() {
values = new LinkedList<>(); values = new LinkedList<>();
} }
public void exitMultiConditionValue() { public void exitMultiConditionValue() {
value = "new Object[]{" + String.join(",", values) + "}"; value = number ?
"new long[]{" + String.join(",", values) + "}" :
"new Object[]{" + String.join(",", values) + "}";
} }
} }
...@@ -196,6 +196,7 @@ public class OALListener extends OALParserBaseListener { ...@@ -196,6 +196,7 @@ public class OALListener extends OALParserBaseListener {
@Override @Override
public void enterNumberConditionValue(OALParser.NumberConditionValueContext ctx) { public void enterNumberConditionValue(OALParser.NumberConditionValueContext ctx) {
conditionExpression.isNumber();
enterConditionValue(ctx.getText()); enterConditionValue(ctx.getText());
} }
......
...@@ -227,11 +227,31 @@ public class ScriptParserTest { ...@@ -227,11 +227,31 @@ public class ScriptParserTest {
"org.apache.skywalking.oap.server.core.analysis.metrics.expression.InMatch", "org.apache.skywalking.oap.server.core.analysis.metrics.expression.InMatch",
expression.getExpressionObject() expression.getExpressionObject()
); );
Assert.assertEquals("new Object[]{1,2,3}", expression.getRight()); Assert.assertEquals("new long[]{1,2,3}", expression.getRight());
} }
@Test @Test
public void testParse8() throws IOException { 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( ScriptParser parser = ScriptParser.createFromScriptText(
"ServicePercent = from(Service.sidecar.internalError).filter(sidecar.internalError == \"abc\").percent(sidecar.internalError != \"\");", TEST_SOURCE_PACKAGE); "ServicePercent = from(Service.sidecar.internalError).filter(sidecar.internalError == \"abc\").percent(sidecar.internalError != \"\");", TEST_SOURCE_PACKAGE);
List<AnalysisResult> results = parser.parse().getMetricsStmts(); List<AnalysisResult> results = parser.parse().getMetricsStmts();
......
...@@ -22,6 +22,25 @@ import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.FilterM ...@@ -22,6 +22,25 @@ import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.FilterM
@FilterMatcher @FilterMatcher
public class InMatch { 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) { public boolean match(Object left, Object[] rights) {
for (Object right : rights) { for (Object right : rights) {
if (right instanceof String) { if (right instanceof String) {
......
...@@ -48,26 +48,26 @@ public class InMatchTest { ...@@ -48,26 +48,26 @@ public class InMatchTest {
} }
)); ));
Assert.assertTrue(new InMatch().match(1, new Object[] { Assert.assertTrue(new InMatch().match(1, new long[] {
1, 1,
2, 2,
3 3
})); }));
Assert.assertFalse(new InMatch().match(4, new Object[] { Assert.assertFalse(new InMatch().match(4, new long[] {
1, 1,
2, 2,
3 3
})); }));
Assert.assertTrue(new InMatch().match(1.0D, new Object[] { Assert.assertTrue(new InMatch().match(1L, new long[] {
1.0D, 1,
2.0D, 2,
3.0D 3
})); }));
Assert.assertFalse(new InMatch().match(4.0D, new Object[] { Assert.assertFalse(new InMatch().match(4L, new long[] {
1.0D, 1,
2.0D, 2,
3.0D 3
})); }));
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册