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/incubator-skywalking-oal-tool.git
The following commit(s) were added to refs/heads/master by this push:
new 4f78130 Support percent in OAL tool
4f78130 is described below
commit 4f78130a92b4e49e77722728e874bbb7bec03bbe
Author: Wu Sheng <[email protected]>
AuthorDate: Tue Aug 14 23:43:51 2018 +0800
Support percent in OAL tool
---
.../skywalking/oal/tool/parser/AnalysisResult.java | 10 +++-
.../oal/tool/parser/ConditionExpression.java} | 14 ++++-
.../skywalking/oal/tool/parser/DeepAnalysis.java | 30 +++++++++++
.../skywalking/oal/tool/parser/OALListener.java | 27 +++++++++-
.../skywalking/oal/tool/util/ClassMethodUtil.java | 4 ++
.../skywalking/oap/server/core/Indicators.java | 2 +
.../core/analysis/indicator/PercentIndicator.java | 59 ++++++++++++++++++++++
.../analysis/indicator/annotation/Expression.java | 2 +-
.../{ExpressionArg2.java => ExpressionArg0.java} | 4 +-
.../indicator/annotation/ExpressionArg1.java | 2 +-
.../BinaryMatchExpression.java} | 26 ++++++----
.../BooleanBinaryMatch.java} | 15 +++---
.../oal/tool/parser/DeepAnalysisTest.java | 1 -
.../oal/tool/parser/ScriptParserTest.java | 20 ++++++++
oal-parser/src/test/resources/oal_test.oal | 3 +-
.../apache/skywalking/oal/tool/grammar/OALLexer.g4 | 4 +-
.../skywalking/oal/tool/grammar/OALLexer.tokens | 22 ++------
.../skywalking/oal/tool/grammar/OALParser.g4 | 21 ++++++--
18 files changed, 215 insertions(+), 51 deletions(-)
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java
b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java
index 8c419fe..c520ac3 100644
---
a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java
+++
b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java
@@ -23,7 +23,6 @@ import java.util.List;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
-import org.apache.skywalking.oap.server.core.remote.selector.Selector;
@Getter(AccessLevel.PUBLIC)
@Setter(AccessLevel.PUBLIC)
@@ -44,6 +43,8 @@ public class AnalysisResult {
private EntryMethod entryMethod;
+ private List<ConditionExpression> funcConditionExpressions;
+
private List<DataColumn> persistentFields;
private List<SourceColumn> fieldsFromSource;
@@ -58,6 +59,13 @@ public class AnalysisResult {
persistentFields.add(dataColumn);
}
+ public void addFuncConditionExpression(ConditionExpression
conditionExpression) {
+ if (funcConditionExpressions == null) {
+ funcConditionExpressions = new LinkedList<>();
+ }
+ funcConditionExpressions.add(conditionExpression);
+ }
+
public void generateSerializeFields() {
serializeFields = new PersistenceColumns();
serializeFields.addLongField("timeBucket");
diff --git a/oal-parser/src/test/resources/oal_test.oal
b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/ConditionExpression.java
similarity index 72%
copy from oal-parser/src/test/resources/oal_test.oal
copy to
oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/ConditionExpression.java
index 66ad3cc..6b591b2 100644
--- a/oal-parser/src/test/resources/oal_test.oal
+++
b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/ConditionExpression.java
@@ -16,6 +16,16 @@
*
*/
-//Service_Avg = from(Service.latency).avg();
+package org.apache.skywalking.oal.tool.parser;
-endpoint_Avg = from(Endpoint.latency).avg();
\ No newline at end of file
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter(AccessLevel.PUBLIC)
+@Setter(AccessLevel.PUBLIC)
+public class ConditionExpression {
+ private String expressionType;
+ private String attribute;
+ private String value;
+}
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/DeepAnalysis.java
b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/DeepAnalysis.java
index 2407327..a565750 100644
---
a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/DeepAnalysis.java
+++
b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/DeepAnalysis.java
@@ -28,6 +28,10 @@ import org.apache.skywalking.oap.server.core.Indicators;
import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator;
import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.ConstOne;
import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Entrance;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Expression;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.ExpressionArg0;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.ExpressionArg1;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorOperator;
import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.SourceFrom;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
@@ -38,6 +42,12 @@ public class DeepAnalysis {
Class<? extends Indicator> indicatorClass =
Indicators.find(result.getAggregationFunctionName());
+ // 2. Assert indicator class has IndicatorOperator annotation.
+ IndicatorOperator indicatorClassAnnotation =
indicatorClass.getAnnotation(IndicatorOperator.class);
+ if (indicatorClassAnnotation == null) {
+ throw new IllegalArgumentException("Can't find IndicatorOperator
in class: " + indicatorClass.getName());
+ }
+ result.setIndicatorClassName(indicatorClass.getSimpleName());
// 3. Find Entrance method of this indicator
Class c = indicatorClass;
@@ -71,6 +81,26 @@ public class DeepAnalysis {
entryMethod.addArg("source." +
ClassMethodUtil.toGetMethod(result.getSourceAttribute()) + "()");
} else if (annotation instanceof ConstOne) {
entryMethod.addArg("1");
+ } else if (annotation instanceof Expression) {
+ entryMethod.addArg("new " + parameter.getType().getName() +
"()");
+ } else if (annotation instanceof ExpressionArg0) {
+ if (result.getFuncConditionExpressions().size() == 1) {
+ ConditionExpression conditionExpression =
result.getFuncConditionExpressions().get(0);
+ if
("booleanMatch".equals(conditionExpression.getExpressionType())) {
+ entryMethod.addArg("source." +
ClassMethodUtil.toIsMethod(conditionExpression.getAttribute()) + "()");
+ } else {
+ throw new IllegalArgumentException("Entrance method:"
+ entranceMethod + " argument has @ExpressionArg0, but expression type is not
supported");
+ }
+ } else {
+ throw new IllegalArgumentException("Entrance method:" +
entranceMethod + " argument has @ExpressionArg0, but can't find
funcParamExpression.");
+ }
+ } else if (annotation instanceof ExpressionArg1) {
+ if (result.getFuncConditionExpressions().size() == 1) {
+ ConditionExpression conditionExpression =
result.getFuncConditionExpressions().get(0);
+ entryMethod.addArg(conditionExpression.getValue());
+ } else {
+ throw new IllegalArgumentException("Entrance method:" +
entranceMethod + " argument has @ExpressionArg0, but can't find
funcParamExpression.");
+ }
} else {
throw new IllegalArgumentException("Entrance method:" +
entranceMethod + " doesn't the expected annotation.");
}
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java
b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java
index b577954..63f05e4 100644
---
a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java
+++
b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java
@@ -27,6 +27,8 @@ public class OALListener extends OALParserBaseListener {
private List<AnalysisResult> results;
private AnalysisResult current;
+ private ConditionExpression conditionExpression;
+
public OALListener(List<AnalysisResult> results) {
this.results = results;
}
@@ -64,6 +66,29 @@ public class OALListener extends OALParserBaseListener {
current.setAggregationFunctionName(ctx.getText());
}
+ @Override public void
enterConditionAttribute(OALParser.ConditionAttributeContext ctx) {
+ conditionExpression.setAttribute(ctx.getText());
+ }
+
+ @Override public void
enterBooleanBinaryMatch(OALParser.BooleanBinaryMatchContext ctx) {
+ conditionExpression.setExpressionType("booleanMatch");
+ }
+
+ @Override public void enterConditionValue(OALParser.ConditionValueContext
ctx) {
+ conditionExpression.setValue(ctx.getText());
+ }
+
+ @Override public void
enterFuncParamExpression(OALParser.FuncParamExpressionContext ctx) {
+ conditionExpression = new ConditionExpression();
+ }
+
+ @Override public void
exitFuncParamExpression(OALParser.FuncParamExpressionContext ctx) {
+ current.addFuncConditionExpression(conditionExpression);
+ }
+
+ @Override public void
exitBooleanBinaryMatch(OALParser.BooleanBinaryMatchContext ctx) {
+ }
+
private String metricNameFormat(String source) {
source = firstLetterUpper(source);
int idx;
@@ -73,7 +98,7 @@ public class OALListener extends OALParserBaseListener {
return source;
}
- private String firstLetterUpper(String source){
+ private String firstLetterUpper(String source) {
return source.substring(0, 1).toUpperCase() + source.substring(1);
}
}
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/util/ClassMethodUtil.java
b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/util/ClassMethodUtil.java
index 081bca5..140ab63 100644
---
a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/util/ClassMethodUtil.java
+++
b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/util/ClassMethodUtil.java
@@ -26,4 +26,8 @@ public class ClassMethodUtil {
public static String toSetMethod(String attribute) {
return "set" + attribute.substring(0, 1).toUpperCase() +
attribute.substring(1);
}
+
+ public static String toIsMethod(String attribute) {
+ return "is" + attribute.substring(0, 1).toUpperCase() +
attribute.substring(1);
+ }
}
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/Indicators.java
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/Indicators.java
index 4925b95..d68d729 100644
---
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/Indicators.java
+++
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/Indicators.java
@@ -22,12 +22,14 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.skywalking.oap.server.core.analysis.indicator.AvgIndicator;
import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.PercentIndicator;
public class Indicators {
private static Map<String, Class<? extends Indicator>> REGISTER = new
HashMap<>();
static {
REGISTER.put("avg", AvgIndicator.class);
+ REGISTER.put("percent", PercentIndicator.class);
}
public static Class<? extends Indicator> find(String functionName) {
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PercentIndicator.java
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PercentIndicator.java
new file mode 100644
index 0000000..ab590e8
--- /dev/null
+++
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PercentIndicator.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.core.analysis.indicator;
+
+import lombok.Getter;
+import lombok.Setter;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Entrance;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Expression;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.ExpressionArg0;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.ExpressionArg1;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorOperator;
+import
org.apache.skywalking.oap.server.core.analysis.indicator.expression.BooleanBinaryMatch;
+import org.apache.skywalking.oap.server.core.storage.annotation.Column;
+
+/**
+ * @author wusheng
+ */
+@IndicatorOperator
+public abstract class PercentIndicator extends Indicator {
+ protected static final String TOTAL = "total";
+ protected static final String MATCH = "match";
+ protected static final String PERCENTAGE = "percentage";
+
+ @Getter @Setter @Column(columnName = TOTAL) private long total;
+ @Getter @Setter @Column(columnName = PERCENTAGE) private int percentage;
+ @Getter @Setter @Column(columnName = MATCH) private long match;
+
+ @Entrance
+ public final void combine(@Expression BooleanBinaryMatch expression,
@ExpressionArg0 Object leftValue,
+ @ExpressionArg1 Object rightValue) {
+ expression.setLeft(leftValue);
+ expression.setRight(rightValue);
+ if (expression.match()) {
+ match++;
+ }
+ total++;
+ }
+
+ @Override public final void combine(Indicator indicator) {
+ total += ((PercentIndicator)indicator).total;
+ match += ((PercentIndicator)indicator).match;
+ }
+}
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/Expression.java
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/Expression.java
index 9662fcb..e763bc0 100644
---
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/Expression.java
+++
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/Expression.java
@@ -27,6 +27,6 @@ import java.lang.annotation.Target;
* @author wusheng
*/
@Target(ElementType.PARAMETER)
-@Retention(RetentionPolicy.SOURCE)
+@Retention(RetentionPolicy.RUNTIME)
public @interface Expression {
}
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg2.java
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg0.java
similarity index 93%
copy from
oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg2.java
copy to
oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg0.java
index 76943a1..8bde31a 100644
---
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg2.java
+++
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg0.java
@@ -27,6 +27,6 @@ import java.lang.annotation.Target;
* @author wusheng
*/
@Target(ElementType.PARAMETER)
-@Retention(RetentionPolicy.SOURCE)
-public @interface ExpressionArg2 {
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExpressionArg0 {
}
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg1.java
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg1.java
index 600f06e..70dfc9a 100644
---
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg1.java
+++
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg1.java
@@ -27,6 +27,6 @@ import java.lang.annotation.Target;
* @author wusheng
*/
@Target(ElementType.PARAMETER)
-@Retention(RetentionPolicy.SOURCE)
+@Retention(RetentionPolicy.RUNTIME)
public @interface ExpressionArg1 {
}
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg2.java
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/expression/BinaryMatchExpression.java
similarity index 69%
rename from
oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg2.java
rename to
oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/expression/BinaryMatchExpression.java
index 76943a1..ef8cc80 100644
---
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/ExpressionArg2.java
+++
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/expression/BinaryMatchExpression.java
@@ -16,17 +16,25 @@
*
*/
-package org.apache.skywalking.oap.server.core.analysis.indicator.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+package org.apache.skywalking.oap.server.core.analysis.indicator.expression;
/**
+ * BinaryMatchExpression accepts two calculate factors,
+ * and return the True/False result.
+ *
* @author wusheng
*/
-@Target(ElementType.PARAMETER)
-@Retention(RetentionPolicy.SOURCE)
-public @interface ExpressionArg2 {
+public abstract class BinaryMatchExpression {
+ protected Object left;
+ protected Object right;
+
+ public void setLeft(Object left) {
+ this.left = left;
+ }
+
+ public void setRight(Object right) {
+ this.right = right;
+ }
+
+ public abstract boolean match();
}
diff --git
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/Expression.java
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/expression/BooleanBinaryMatch.java
similarity index 76%
copy from
oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/Expression.java
copy to
oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/expression/BooleanBinaryMatch.java
index 9662fcb..dc55b83 100644
---
a/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/annotation/Expression.java
+++
b/oal-parser/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/expression/BooleanBinaryMatch.java
@@ -16,17 +16,14 @@
*
*/
-package org.apache.skywalking.oap.server.core.analysis.indicator.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+package org.apache.skywalking.oap.server.core.analysis.indicator.expression;
/**
+ *
* @author wusheng
*/
-@Target(ElementType.PARAMETER)
-@Retention(RetentionPolicy.SOURCE)
-public @interface Expression {
+public class BooleanBinaryMatch extends BinaryMatchExpression {
+ @Override public boolean match() {
+ return left == right;
+ }
}
diff --git
a/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/DeepAnalysisTest.java
b/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/DeepAnalysisTest.java
index 90d5b87..ac4277e 100644
---
a/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/DeepAnalysisTest.java
+++
b/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/DeepAnalysisTest.java
@@ -19,7 +19,6 @@
package org.apache.skywalking.oal.tool.parser;
import java.util.List;
-import org.apache.skywalking.oap.server.core.remote.selector.Selector;
import org.junit.Assert;
import org.junit.Test;
diff --git
a/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java
b/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java
index 2ebb95d..d5a8146 100644
---
a/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java
+++
b/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java
@@ -46,4 +46,24 @@ public class ScriptParserTest {
Assert.assertEquals("latency", serviceAvg.getSourceAttribute());
Assert.assertEquals("avg", serviceAvg.getAggregationFunctionName());
}
+
+ @Test
+ public void testParse2() throws IOException {
+ ScriptParser parser = ScriptParser.createFromScriptText(
+ "Endpoint_percent = from(Endpoint.*).percent(status == true);"
+ );
+ List<AnalysisResult> results = parser.parse();
+
+ AnalysisResult endpointPercent = results.get(0);
+ Assert.assertEquals("EndpointPercent",
endpointPercent.getMetricName());
+ Assert.assertEquals("Endpoint", endpointPercent.getSourceName());
+ Assert.assertEquals("*", endpointPercent.getSourceAttribute());
+ Assert.assertEquals("percent",
endpointPercent.getAggregationFunctionName());
+ List<ConditionExpression> expressions =
endpointPercent.getFuncConditionExpressions();
+ EntryMethod entryMethod = endpointPercent.getEntryMethod();
+ List<String> methodArgsExpressions = entryMethod.getArgsExpressions();
+ Assert.assertEquals(3, methodArgsExpressions.size());
+ Assert.assertEquals("source.getStatus()",
methodArgsExpressions.get(1));
+ Assert.assertEquals("true", methodArgsExpressions.get(2));
+ }
}
diff --git a/oal-parser/src/test/resources/oal_test.oal
b/oal-parser/src/test/resources/oal_test.oal
index 66ad3cc..dc98c78 100644
--- a/oal-parser/src/test/resources/oal_test.oal
+++ b/oal-parser/src/test/resources/oal_test.oal
@@ -18,4 +18,5 @@
//Service_Avg = from(Service.latency).avg();
-endpoint_Avg = from(Endpoint.latency).avg();
\ No newline at end of file
+endpoint_Avg = from(Endpoint.latency).avg();
+endpoint_percent = from(Endpoint.*).percent(status == true)
\ No newline at end of file
diff --git
a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4
b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4
index c7811d1..008ac8f 100644
---
a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4
+++
b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4
@@ -103,4 +103,6 @@ LR_BRACKET: '(';
RR_BRACKET: ')';
COMMA: ',';
SEMI: ';';
-EQUAL: '=';
\ No newline at end of file
+EQUAL: '=';
+DUALEQUALS: '==';
+ALL: '*';
\ No newline at end of file
diff --git
a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.tokens
b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.tokens
index 302ec2c..927256f 100644
---
a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.tokens
+++
b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.tokens
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
FROM=1
FILTER=2
SRC_ALL=3
@@ -42,6 +24,8 @@ RR_BRACKET=23
COMMA=24
SEMI=25
EQUAL=26
+DUALEQUALS=27
+ALL=28
'from'=1
'filter'=2
'All'=3
@@ -58,3 +42,5 @@ EQUAL=26
','=24
';'=25
'='=26
+'=='=27
+'*'=28
diff --git
a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
index fd9859c..e1d621b 100644
---
a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
+++
b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
@@ -44,7 +44,7 @@ source
;
sourceAttribute
- : IDENTIFIER
+ : IDENTIFIER | ALL
;
variable
@@ -52,13 +52,26 @@ variable
;
aggregateFunction
- : functionName LR_BRACKET (filterExpression)? RR_BRACKET
+ : functionName LR_BRACKET (funcParamExpression)? RR_BRACKET
;
functionName
: IDENTIFIER
;
-filterExpression
- :
+funcParamExpression
+ : booleanBinaryMatch
+ ;
+
+booleanBinaryMatch
+ : conditionAttribute DUALEQUALS conditionValue
+ ;
+
+
+conditionAttribute
+ : IDENTIFIER
+ ;
+
+conditionValue
+ : BOOL_LITERAL
;
\ No newline at end of file