未验证 提交 720dc924 编写于 作者: wu-sheng's avatar wu-sheng 提交者: GitHub

Refactor the OAL compiler context to improve readability (#7913)

* Refactor the OAL compiler context to improve readability. Usually, this could not be included in the change log, but considering this kind of refactor could cause not-found bugs, Adding this as a hit if we face some related issues in the future.
* Fix wrong generated codes of hashCode and remoteHashCode methods for numeric fields.
上级 29dbcf46
......@@ -24,6 +24,8 @@ Release Notes.
* Support literal `string` as parameter of aggregation function.
* Add `attributeExpression` and `attributeExpressionSegment` in the OAL grammar tree to support `map` type for the
attribute expression.
* Refactor the OAL compiler context to improve readability.
* Fix wrong generated codes of `hashCode` and `remoteHashCode` methods for numeric fields.
#### UI
......
......@@ -295,7 +295,7 @@ public class OALRuntime implements OALEngine {
constPool, AnnotationsAttribute.visibleTag);
Annotation streamAnnotation = new Annotation(Stream.class.getName(), constPool);
streamAnnotation.addMemberValue("name", new StringMemberValue(metricsStmt.getTableName(), constPool));
streamAnnotation.addMemberValue("scopeId", new IntegerMemberValue(constPool, metricsStmt.getSourceScopeId()));
streamAnnotation.addMemberValue("scopeId", new IntegerMemberValue(constPool, metricsStmt.getFrom().getSourceScopeId()));
streamAnnotation.addMemberValue(
"builder", new ClassMemberValue(metricsBuilderClassName(metricsStmt, true), constPool));
streamAnnotation.addMemberValue("processor", new ClassMemberValue(METRICS_STREAM_PROCESSOR, constPool));
......@@ -460,7 +460,7 @@ public class OALRuntime implements OALEngine {
}
private void buildDispatcherContext(AnalysisResult metricsStmt) {
String sourceName = metricsStmt.getSourceName();
String sourceName = metricsStmt.getFrom().getSourceName();
DispatcherContext context = allDispatcherContext.getAllContext().computeIfAbsent(sourceName, name -> {
DispatcherContext absent = new DispatcherContext();
......
/*
* 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.oal.rt.parser;
import java.util.LinkedList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class AggregationFuncStmt {
private String aggregationFunctionName;
private List<ConditionExpression> funcConditionExpressions;
private int funcConditionExpressionGetIdx = 0;
private List<Argument> funcArgs;
private int argGetIdx = 0;
private String nextArgCast = null;
public void addFuncConditionExpression(ConditionExpression conditionExpression) {
if (funcConditionExpressions == null) {
funcConditionExpressions = new LinkedList<>();
}
funcConditionExpressions.add(conditionExpression);
}
public ConditionExpression getNextFuncConditionExpression() {
return funcConditionExpressions.get(funcConditionExpressionGetIdx++);
}
public void addFuncArg(Argument argument) {
if (funcArgs == null) {
funcArgs = new LinkedList<>();
}
if (nextArgCast != null) {
argument.setCastType(nextArgCast);
nextArgCast = null;
}
funcArgs.add(argument);
}
public Argument getLastArgument() {
return funcArgs.get(funcArgs.size() - 1);
}
public Argument getNextFuncArg() {
return funcArgs.get(argGetIdx++);
}
}
......@@ -18,60 +18,75 @@
package org.apache.skywalking.oal.rt.parser;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.storage.type.StorageDataComplexObject;
/**
* OAL analysis result.
*/
@Getter
@Setter
public class AnalysisResult {
/**
* Variable name of one OAL expression.
*/
private String varName;
/**
* Generated metric name.
*/
private String metricsName;
/**
* Package name of generated metric class.
*/
private String metricsClassPackage;
/**
* Table name for the storage.
*/
private String tableName;
private String packageName;
/**
* The package name of source class from {@link org.apache.skywalking.oap.server.core.oal.rt.OALDefine}
*/
private String sourcePackage;
private String sourceName;
private int sourceScopeId;
private List<String> sourceAttribute = new ArrayList<>();
private String sourceCastType;
private String aggregationFunctionName;
/**
* The class name of generated metric class.
*/
private String metricsClassName;
/**
* The raw parsed result of from statement.
*/
private FromStmt from = new FromStmt();
/**
* The raw parsed result of filter statements.
*/
private FilterStmts filters = new FilterStmts();
/**
* The raw parsed result of aggregation function with arguments.
*/
private AggregationFuncStmt aggregationFuncStmt = new AggregationFuncStmt();
/**
* Generated through {@link #aggregationFuncStmt}
*/
private EntryMethod entryMethod;
private List<Expression> filterExpressions;
private List<ConditionExpression> filterExpressionsParserResult;
private List<ConditionExpression> funcConditionExpressions;
private int funcConditionExpressionGetIdx = 0;
private List<Argument> funcArgs;
private int argGetIdx = 0;
private String nextArgCast = null;
/**
* Persistent columns are generated by {@link org.apache.skywalking.oap.server.core.storage.annotation.Column}
* definition of {@link org.apache.skywalking.oap.server.core.analysis.metrics.annotation.MetricsFunction}.
*/
private List<DataColumn> persistentFields;
/**
* Fields of metric class are generated by the fields annotated {@link org.apache.skywalking.oap.server.core.source.ScopeDefaultColumn.DefinedByField}
* and class level definition through {@link org.apache.skywalking.oap.server.core.source.ScopeDefaultColumn.VirtualColumnDefinition}
* in the {@link org.apache.skywalking.oap.server.core.source.Source}
*/
private List<SourceColumn> fieldsFromSource;
/**
* Fields generated by {@link #fieldsFromSource} and {@link #persistentFields}. These fields are used in final
* persistence.
*/
private PersistenceColumns serializeFields;
public void addPersistentField(String fieldName, String columnName, Class<?> type) {
......@@ -82,50 +97,6 @@ public class AnalysisResult {
persistentFields.add(dataColumn);
}
public void addFuncConditionExpression(ConditionExpression conditionExpression) {
if (funcConditionExpressions == null) {
funcConditionExpressions = new LinkedList<>();
}
funcConditionExpressions.add(conditionExpression);
}
public ConditionExpression getNextFuncConditionExpression() {
return funcConditionExpressions.get(funcConditionExpressionGetIdx++);
}
public void addFilterExpressions(Expression filterExpression) {
if (filterExpressions == null) {
filterExpressions = new LinkedList<>();
}
filterExpressions.add(filterExpression);
}
public void addFilterExpressionsParserResult(ConditionExpression conditionExpression) {
if (filterExpressionsParserResult == null) {
filterExpressionsParserResult = new LinkedList<>();
}
filterExpressionsParserResult.add(conditionExpression);
}
public void addFuncArg(Argument argument) {
if (funcArgs == null) {
funcArgs = new LinkedList<>();
}
if (nextArgCast != null) {
argument.setCastType(nextArgCast);
nextArgCast = null;
}
funcArgs.add(argument);
}
public Argument getLastArgument() {
return funcArgs.get(funcArgs.size() - 1);
}
public Argument getNextFuncArg() {
return funcArgs.get(argGetIdx++);
}
public void generateSerializeFields() {
serializeFields = new PersistenceColumns();
for (SourceColumn sourceColumn : fieldsFromSource) {
......
......@@ -37,15 +37,13 @@ import static java.util.Objects.isNull;
public class DeepAnalysis {
public AnalysisResult analysis(AnalysisResult result) {
// 1. Set sub package name by source.metrics
result.setPackageName(result.getSourceName().toLowerCase());
Class<? extends Metrics> metricsClass = MetricsHolder.find(result.getAggregationFunctionName());
Class<? extends Metrics> metricsClass = MetricsHolder.find(result.getAggregationFuncStmt().getAggregationFunctionName());
String metricsClassSimpleName = metricsClass.getSimpleName();
result.setMetricsClassName(metricsClassSimpleName);
// Optional for filter
List<ConditionExpression> expressions = result.getFilterExpressionsParserResult();
List<ConditionExpression> expressions = result.getFilters().getFilterExpressionsParserResult();
if (expressions != null && expressions.size() > 0) {
for (ConditionExpression expression : expressions) {
final FilterMatchers.MatcherInfo matcherInfo = FilterMatchers.INSTANCE.find(
......@@ -59,7 +57,7 @@ public class DeepAnalysis {
filterExpression.setExpressionObject(matcherInfo.getMatcher().getName());
filterExpression.setLeft(TypeCastUtil.withCast(expression.getCastType(), "source." + getter));
filterExpression.setRight(expression.getValue());
result.addFilterExpressions(filterExpression);
result.getFilters().addFilterExpressions(filterExpression);
}
}
......@@ -97,18 +95,19 @@ public class DeepAnalysis {
entryMethod.addArg(
parameterType,
TypeCastUtil.withCast(
result.getSourceCastType(),
"source." + ClassMethodUtil.toGetMethod(result.getSourceAttribute())
result.getFrom().getSourceCastType(),
"source." + ClassMethodUtil.toGetMethod(result.getFrom().getSourceAttribute())
)
);
} else if (annotation instanceof ConstOne) {
entryMethod.addArg(parameterType, "1");
} else if (annotation instanceof org.apache.skywalking.oap.server.core.analysis.metrics.annotation.Expression) {
if (isNull(result.getFuncConditionExpressions()) || result.getFuncConditionExpressions().isEmpty()) {
if (isNull(result.getAggregationFuncStmt().getFuncConditionExpressions())
|| result.getAggregationFuncStmt().getFuncConditionExpressions().isEmpty()) {
throw new IllegalArgumentException(
"Entrance method:" + entranceMethod + " argument can't find funcParamExpression.");
} else {
ConditionExpression expression = result.getNextFuncConditionExpression();
ConditionExpression expression = result.getAggregationFuncStmt().getNextFuncConditionExpression();
final FilterMatchers.MatcherInfo matcherInfo = FilterMatchers.INSTANCE.find(
expression.getExpressionType());
......@@ -124,7 +123,7 @@ public class DeepAnalysis {
entryMethod.addArg(argExpression);
}
} else if (annotation instanceof Arg) {
entryMethod.addArg(parameterType, result.getNextFuncArg());
entryMethod.addArg(parameterType, result.getAggregationFuncStmt().getNextFuncArg());
} else {
throw new IllegalArgumentException(
"Entrance method:" + entranceMethod + " doesn't the expected annotation.");
......@@ -144,7 +143,7 @@ public class DeepAnalysis {
}
// 6. Based on Source, generate default columns
List<SourceColumn> columns = SourceColumnsFactory.getColumns(result.getSourceName());
List<SourceColumn> columns = SourceColumnsFactory.getColumns(result.getFrom().getSourceName());
result.setFieldsFromSource(columns);
result.generateSerializeFields();
......
/*
* 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.oal.rt.parser;
import java.util.LinkedList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
/**
* Filter statements in the OAL scripts.
*/
@Getter
@Setter
public class FilterStmts {
/**
* Parsed raw result from grammar tree.
*/
private List<ConditionExpression> filterExpressionsParserResult;
/**
* Generated expressions for code generation.
*/
private List<Expression> filterExpressions;
public void addFilterExpressions(Expression filterExpression) {
if (filterExpressions == null) {
filterExpressions = new LinkedList<>();
}
filterExpressions.add(filterExpression);
}
public void addFilterExpressionsParserResult(ConditionExpression conditionExpression) {
if (filterExpressionsParserResult == null) {
filterExpressionsParserResult = new LinkedList<>();
}
filterExpressionsParserResult.add(conditionExpression);
}
}
/*
* 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.oal.rt.parser;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
/**
* FROM statement in the OAL script
*/
@Setter
@Getter
public class FromStmt {
/**
* Source name in the FROM statement
*/
private String sourceName;
/**
* source id according to {@link #sourceName}
*/
private int sourceScopeId;
/**
* Attribute accessor
*/
private List<String> sourceAttribute = new ArrayList<>();
/**
* Type cast function if exists. NULL as default, means no cast.
*/
private String sourceCastType;
}
......@@ -55,18 +55,18 @@ public class OALListener extends OALParserBaseListener {
@Override
public void enterSource(OALParser.SourceContext ctx) {
current.setSourceName(ctx.getText());
current.setSourceScopeId(DefaultScopeDefine.valueOf(metricsNameFormat(ctx.getText())));
current.getFrom().setSourceName(ctx.getText());
current.getFrom().setSourceScopeId(DefaultScopeDefine.valueOf(metricsNameFormat(ctx.getText())));
}
@Override
public void enterSourceAttribute(OALParser.SourceAttributeContext ctx) {
current.getSourceAttribute().add(ctx.getText());
current.getFrom().getSourceAttribute().add(ctx.getText());
}
@Override
public void enterSourceAttrCast(OALParser.SourceAttrCastContext ctx) {
current.setSourceCastType(ctx.getText());
current.getFrom().setSourceCastType(ctx.getText());
}
@Override
......@@ -82,7 +82,7 @@ public class OALListener extends OALParserBaseListener {
@Override
public void enterFunctionName(OALParser.FunctionNameContext ctx) {
current.setAggregationFunctionName(ctx.getText());
current.getAggregationFuncStmt().setAggregationFunctionName(ctx.getText());
}
@Override
......@@ -92,7 +92,7 @@ public class OALListener extends OALParserBaseListener {
@Override
public void exitFilterStatement(OALParser.FilterStatementContext ctx) {
current.addFilterExpressionsParserResult(conditionExpression);
current.getFilters().addFilterExpressionsParserResult(conditionExpression);
conditionExpression = null;
}
......@@ -103,7 +103,7 @@ public class OALListener extends OALParserBaseListener {
@Override
public void exitFuncParamExpression(OALParser.FuncParamExpressionContext ctx) {
current.addFuncConditionExpression(conditionExpression);
current.getAggregationFuncStmt().addFuncConditionExpression(conditionExpression);
conditionExpression = null;
}
......@@ -230,22 +230,22 @@ public class OALListener extends OALParserBaseListener {
@Override
public void enterLiteralExpression(OALParser.LiteralExpressionContext ctx) {
current.addFuncArg(new Argument(EntryMethod.LITERAL_TYPE, Arrays.asList(ctx.getText())));
current.getAggregationFuncStmt().addFuncArg(new Argument(EntryMethod.LITERAL_TYPE, Arrays.asList(ctx.getText())));
}
@Override
public void enterAttributeExpression(final OALParser.AttributeExpressionContext ctx) {
current.addFuncArg(new Argument(EntryMethod.ATTRIBUTE_EXP_TYPE, new ArrayList<>(3)));
current.getAggregationFuncStmt().addFuncArg(new Argument(EntryMethod.ATTRIBUTE_EXP_TYPE, new ArrayList<>(3)));
}
@Override
public void enterAttributeExpressionSegment(OALParser.AttributeExpressionSegmentContext ctx) {
current.getLastArgument().addText(ctx.getText());
current.getAggregationFuncStmt().getLastArgument().addText(ctx.getText());
}
@Override
public void enterFunctionArgCast(final OALParser.FunctionArgCastContext ctx) {
current.getLastArgument().setCastType(ctx.getText());
current.getAggregationFuncStmt().getLastArgument().setCastType(ctx.getText());
}
private String metricsNameFormat(String source) {
......
private void do${metricsName}(${sourcePackage}${sourceName} source) {
private void do${metricsName}(${sourcePackage}${from.sourceName} source) {
<#if filterExpressions??>
<#list filterExpressions as filterExpression>
<#if filters.filterExpressions??>
<#list filters.filterExpressions as filterExpression>
if (!new ${filterExpression.expressionObject}().match(${filterExpression.left}, ${filterExpression.right})) {
return;
}
......
public org.apache.skywalking.oap.server.core.analysis.metrics.MetricsMetaInfo getMeta() {
return new org.apache.skywalking.oap.server.core.analysis.metrics.MetricsMetaInfo("${varName}", ${sourceScopeId?c}<#if (fieldsFromSource?size>0) ><#list fieldsFromSource as field><#if field.isID()>, ${field.fieldName}</#if></#list></#if>);
return new org.apache.skywalking.oap.server.core.analysis.metrics.MetricsMetaInfo("${varName}", ${from.sourceScopeId?c}<#if (fieldsFromSource?size>0) ><#list fieldsFromSource as field><#if field.isID()>, ${field.fieldName}</#if></#list></#if>);
}
\ No newline at end of file
......@@ -5,7 +5,7 @@ int result = 17;
<#if sourceField.getTypeName() == "java.lang.String">
result = 31 * result + ${sourceField.fieldName}.hashCode();
<#else>
result += Const.ID_CONNECTOR + ${sourceField.fieldName};
result = 31 * result + ${sourceField.fieldName};
</#if>
</#if>
</#list>
......
......@@ -5,7 +5,7 @@ int result = 17;
<#if sourceField.getTypeName() == "java.lang.String">
result = 31 * result + ${sourceField.fieldName}.hashCode();
<#else>
result += org.apache.skywalking.oap.server.core.Const.ID_CONNECTOR + ${sourceField.fieldName};
result = 31 * result + ${sourceField.fieldName};
</#if>
</#if>
</#list>
......
......@@ -51,11 +51,10 @@ public class DeepAnalysisTest {
@Test
public void testServiceAnalysis() {
AnalysisResult result = new AnalysisResult();
result.setSourceName("Service");
result.setPackageName("service.serviceavg");
result.getSourceAttribute().add("latency");
result.getFrom().setSourceName("Service");
result.getFrom().getSourceAttribute().add("latency");
result.setMetricsName("ServiceAvg");
result.setAggregationFunctionName("longAvg");
result.getAggregationFuncStmt().setAggregationFunctionName("longAvg");
DeepAnalysis analysis = new DeepAnalysis();
result = analysis.analysis(result);
......@@ -75,11 +74,10 @@ public class DeepAnalysisTest {
@Test
public void testEndpointAnalysis() {
AnalysisResult result = new AnalysisResult();
result.setSourceName("Endpoint");
result.setPackageName("endpoint.endpointavg");
result.getSourceAttribute().add("latency");
result.getFrom().setSourceName("Endpoint");
result.getFrom().getSourceAttribute().add("latency");
result.setMetricsName("EndpointAvg");
result.setAggregationFunctionName("longAvg");
result.getAggregationFuncStmt().setAggregationFunctionName("longAvg");
DeepAnalysis analysis = new DeepAnalysis();
result = analysis.analysis(result);
......@@ -99,16 +97,15 @@ public class DeepAnalysisTest {
@Test
public void testFilterAnalysis() {
AnalysisResult result = new AnalysisResult();
result.setSourceName("Endpoint");
result.setPackageName("endpoint.endpointavg");
result.getSourceAttribute().add("latency");
result.getFrom().setSourceName("Endpoint");
result.getFrom().getSourceAttribute().add("latency");
result.setMetricsName("EndpointAvg");
result.setAggregationFunctionName("longAvg");
result.getAggregationFuncStmt().setAggregationFunctionName("longAvg");
ConditionExpression expression = new ConditionExpression();
expression.setExpressionType("stringMatch");
expression.getAttributes().add("name");
expression.setValue("\"/service/prod/save\"");
result.addFilterExpressionsParserResult(expression);
result.getFilters().addFilterExpressionsParserResult(expression);
DeepAnalysis analysis = new DeepAnalysis();
result = analysis.analysis(result);
......@@ -124,7 +121,7 @@ public class DeepAnalysisTest {
List<DataColumn> persistentFields = result.getPersistentFields();
Assert.assertEquals(4, persistentFields.size());
List<Expression> filterExpressions = result.getFilterExpressions();
List<Expression> filterExpressions = result.getFilters().getFilterExpressions();
Assert.assertEquals(1, filterExpressions.size());
Expression filterExpression = filterExpressions.get(0);
Assert.assertEquals(StringMatch.class.getName(), filterExpression.getExpressionObject());
......@@ -136,44 +133,43 @@ public class DeepAnalysisTest {
public void shouldUseCorrectMatcher() {
AnalysisResult result = new AnalysisResult();
result.setSourceName("Endpoint");
result.setPackageName("endpoint.endpointavg");
result.getSourceAttribute().add("latency");
result.getFrom().setSourceName("Endpoint");
result.getFrom().getSourceAttribute().add("latency");
result.setMetricsName("EndpointAvg");
result.setAggregationFunctionName("longAvg");
result.getAggregationFuncStmt().setAggregationFunctionName("longAvg");
DeepAnalysis analysis = new DeepAnalysis();
result.setFilterExpressions(null);
result.setFilterExpressionsParserResult(null);
result.addFilterExpressionsParserResult(new ConditionExpression("booleanMatch", "valid", ""));
result.getFilters().setFilterExpressions(null);
result.getFilters().setFilterExpressionsParserResult(null);
result.getFilters().addFilterExpressionsParserResult(new ConditionExpression("booleanMatch", "valid", ""));
result = analysis.analysis(result);
assertTrue(result.getFilterExpressions().size() > 0);
assertEquals(BooleanMatch.class.getName(), result.getFilterExpressions().get(0).getExpressionObject());
assertEquals("source.isValid()", result.getFilterExpressions().get(0).getLeft());
assertTrue(result.getFilters().getFilterExpressions().size() > 0);
assertEquals(BooleanMatch.class.getName(), result.getFilters().getFilterExpressions().get(0).getExpressionObject());
assertEquals("source.isValid()", result.getFilters().getFilterExpressions().get(0).getLeft());
result.setFilterExpressions(null);
result.setFilterExpressionsParserResult(null);
result.addFilterExpressionsParserResult(new ConditionExpression("stringMatch", "type", ""));
result.getFilters().setFilterExpressions(null);
result.getFilters().setFilterExpressionsParserResult(null);
result.getFilters().addFilterExpressionsParserResult(new ConditionExpression("stringMatch", "type", ""));
result = analysis.analysis(result);
assertTrue(result.getFilterExpressions().size() > 0);
assertEquals(StringMatch.class.getName(), result.getFilterExpressions().get(0).getExpressionObject());
assertEquals("source.getType()", result.getFilterExpressions().get(0).getLeft());
assertTrue(result.getFilters().getFilterExpressions().size() > 0);
assertEquals(StringMatch.class.getName(), result.getFilters().getFilterExpressions().get(0).getExpressionObject());
assertEquals("source.getType()", result.getFilters().getFilterExpressions().get(0).getLeft());
result.setFilterExpressions(null);
result.setFilterExpressionsParserResult(null);
result.addFilterExpressionsParserResult(new ConditionExpression("notEqualMatch", "type", ""));
result.getFilters().setFilterExpressions(null);
result.getFilters().setFilterExpressionsParserResult(null);
result.getFilters().addFilterExpressionsParserResult(new ConditionExpression("notEqualMatch", "type", ""));
result = analysis.analysis(result);
assertTrue(result.getFilterExpressions().size() > 0);
assertEquals(NotEqualMatch.class.getName(), result.getFilterExpressions().get(0).getExpressionObject());
assertEquals("source.getType()", result.getFilterExpressions().get(0).getLeft());
assertTrue(result.getFilters().getFilterExpressions().size() > 0);
assertEquals(NotEqualMatch.class.getName(), result.getFilters().getFilterExpressions().get(0).getExpressionObject());
assertEquals("source.getType()", result.getFilters().getFilterExpressions().get(0).getLeft());
result.setFilterExpressions(null);
result.setFilterExpressionsParserResult(null);
result.addFilterExpressionsParserResult(new ConditionExpression("booleanNotEqualMatch", "type", ""));
result.getFilters().setFilterExpressions(null);
result.getFilters().setFilterExpressionsParserResult(null);
result.getFilters().addFilterExpressionsParserResult(new ConditionExpression("booleanNotEqualMatch", "type", ""));
result = analysis.analysis(result);
assertTrue(result.getFilterExpressions().size() > 0);
assertEquals(BooleanNotEqualMatch.class.getName(), result.getFilterExpressions().get(0).getExpressionObject());
assertEquals("source.isType()", result.getFilterExpressions().get(0).getLeft());
assertTrue(result.getFilters().getFilterExpressions().size() > 0);
assertEquals(BooleanNotEqualMatch.class.getName(), result.getFilters().getFilterExpressions().get(0).getExpressionObject());
assertEquals("source.isType()", result.getFilters().getFilterExpressions().get(0).getLeft());
}
}
......@@ -56,15 +56,15 @@ public class ScriptParserTest {
AnalysisResult endpointAvg = results.get(0);
Assert.assertEquals("EndpointAvg", endpointAvg.getMetricsName());
Assert.assertEquals("Endpoint", endpointAvg.getSourceName());
Assert.assertEquals("[latency]", endpointAvg.getSourceAttribute().toString());
Assert.assertEquals("longAvg", endpointAvg.getAggregationFunctionName());
Assert.assertEquals("Endpoint", endpointAvg.getFrom().getSourceName());
Assert.assertEquals("[latency]", endpointAvg.getFrom().getSourceAttribute().toString());
Assert.assertEquals("longAvg", endpointAvg.getAggregationFuncStmt().getAggregationFunctionName());
AnalysisResult serviceAvg = results.get(1);
Assert.assertEquals("ServiceAvg", serviceAvg.getMetricsName());
Assert.assertEquals("Service", serviceAvg.getSourceName());
Assert.assertEquals("[latency]", serviceAvg.getSourceAttribute().toString());
Assert.assertEquals("longAvg", serviceAvg.getAggregationFunctionName());
Assert.assertEquals("Service", serviceAvg.getFrom().getSourceName());
Assert.assertEquals("[latency]", serviceAvg.getFrom().getSourceAttribute().toString());
Assert.assertEquals("longAvg", serviceAvg.getAggregationFuncStmt().getAggregationFunctionName());
}
@Test
......@@ -75,9 +75,9 @@ public class ScriptParserTest {
AnalysisResult endpointPercent = results.get(0);
Assert.assertEquals("EndpointPercent", endpointPercent.getMetricsName());
Assert.assertEquals("Endpoint", endpointPercent.getSourceName());
Assert.assertEquals("[*]", endpointPercent.getSourceAttribute().toString());
Assert.assertEquals("percent", endpointPercent.getAggregationFunctionName());
Assert.assertEquals("Endpoint", endpointPercent.getFrom().getSourceName());
Assert.assertEquals("[*]", endpointPercent.getFrom().getSourceAttribute().toString());
Assert.assertEquals("percent", endpointPercent.getAggregationFuncStmt().getAggregationFunctionName());
EntryMethod entryMethod = endpointPercent.getEntryMethod();
List<Object> methodArgsExpressions = entryMethod.getArgsExpressions();
Assert.assertEquals(1, methodArgsExpressions.size());
......@@ -93,10 +93,10 @@ public class ScriptParserTest {
AnalysisResult endpointPercent = results.get(0);
Assert.assertEquals("EndpointPercent", endpointPercent.getMetricsName());
Assert.assertEquals("Endpoint", endpointPercent.getSourceName());
Assert.assertEquals("[*]", endpointPercent.getSourceAttribute().toString());
Assert.assertEquals("longAvg", endpointPercent.getAggregationFunctionName());
List<ConditionExpression> expressions = endpointPercent.getFilterExpressionsParserResult();
Assert.assertEquals("Endpoint", endpointPercent.getFrom().getSourceName());
Assert.assertEquals("[*]", endpointPercent.getFrom().getSourceAttribute().toString());
Assert.assertEquals("longAvg", endpointPercent.getAggregationFuncStmt().getAggregationFunctionName());
List<ConditionExpression> expressions = endpointPercent.getFilters().getFilterExpressionsParserResult();
Assert.assertEquals(2, expressions.size());
......@@ -124,10 +124,10 @@ public class ScriptParserTest {
AnalysisResult responseSummary = results.get(0);
Assert.assertEquals("ServiceResponseS1Summary", responseSummary.getMetricsName());
Assert.assertEquals("Service", responseSummary.getSourceName());
Assert.assertEquals("[latency]", responseSummary.getSourceAttribute().toString());
Assert.assertEquals("sum", responseSummary.getAggregationFunctionName());
List<ConditionExpression> expressions = responseSummary.getFilterExpressionsParserResult();
Assert.assertEquals("Service", responseSummary.getFrom().getSourceName());
Assert.assertEquals("[latency]", responseSummary.getFrom().getSourceAttribute().toString());
Assert.assertEquals("sum", responseSummary.getAggregationFuncStmt().getAggregationFunctionName());
List<ConditionExpression> expressions = responseSummary.getFilters().getFilterExpressionsParserResult();
Assert.assertEquals(1, expressions.size());
......@@ -137,7 +137,7 @@ public class ScriptParserTest {
Assert.assertEquals("greaterMatch", booleanMatchExp.getExpressionType());
responseSummary = results.get(1);
expressions = responseSummary.getFilterExpressionsParserResult();
expressions = responseSummary.getFilters().getFilterExpressionsParserResult();
Assert.assertEquals(1, expressions.size());
......@@ -147,7 +147,7 @@ public class ScriptParserTest {
Assert.assertEquals("lessMatch", booleanMatchExp.getExpressionType());
responseSummary = results.get(2);
expressions = responseSummary.getFilterExpressionsParserResult();
expressions = responseSummary.getFilters().getFilterExpressionsParserResult();
Assert.assertEquals(1, expressions.size());
......@@ -157,7 +157,7 @@ public class ScriptParserTest {
Assert.assertEquals("greaterEqualMatch", booleanMatchExp.getExpressionType());
responseSummary = results.get(3);
expressions = responseSummary.getFilterExpressionsParserResult();
expressions = responseSummary.getFilters().getFilterExpressionsParserResult();
Assert.assertEquals(1, expressions.size());
......@@ -176,15 +176,15 @@ public class ScriptParserTest {
List<AnalysisResult> results = parser.parse().getMetricsStmts();
Assert.assertEquals(1, results.size());
AnalysisResult result = results.get(0);
Assert.assertEquals("rate", result.getAggregationFunctionName());
Assert.assertEquals(2, result.getFuncConditionExpressions().size());
Assert.assertEquals("rate", result.getAggregationFuncStmt().getAggregationFunctionName());
Assert.assertEquals(2, result.getAggregationFuncStmt().getFuncConditionExpressions().size());
ConditionExpression expression1 = result.getFuncConditionExpressions().get(0);
ConditionExpression expression1 = result.getAggregationFuncStmt().getFuncConditionExpressions().get(0);
Assert.assertEquals("[param1]", expression1.getAttributes().toString());
Assert.assertEquals("booleanMatch", expression1.getExpressionType());
Assert.assertEquals("true", expression1.getValue());
ConditionExpression expression2 = result.getFuncConditionExpressions().get(1);
ConditionExpression expression2 = result.getAggregationFuncStmt().getFuncConditionExpressions().get(1);
Assert.assertEquals("[param2]", expression2.getAttributes().toString());
Assert.assertEquals("booleanMatch", expression2.getExpressionType());
Assert.assertEquals("false", expression2.getValue());
......@@ -199,7 +199,7 @@ public class ScriptParserTest {
List<AnalysisResult> results = parser.parse().getMetricsStmts();
Assert.assertEquals(1, results.size());
AnalysisResult result = results.get(0);
List<Expression> expressions = result.getFilterExpressions();
List<Expression> expressions = result.getFilters().getFilterExpressions();
Assert.assertEquals(1, expressions.size());
Expression expression = expressions.get(0);
Assert.assertEquals("source.getLatency()", expression.getLeft());
......@@ -219,7 +219,7 @@ public class ScriptParserTest {
List<AnalysisResult> results = parser.parse().getMetricsStmts();
Assert.assertEquals(1, results.size());
AnalysisResult result = results.get(0);
List<Expression> expressions = result.getFilterExpressions();
List<Expression> expressions = result.getFilters().getFilterExpressions();
Assert.assertEquals(2, expressions.size());
Expression expression = expressions.get(1);
Assert.assertEquals("source.getLatency()", expression.getLeft());
......@@ -239,7 +239,7 @@ public class ScriptParserTest {
List<AnalysisResult> results = parser.parse().getMetricsStmts();
Assert.assertEquals(1, results.size());
AnalysisResult result = results.get(0);
List<Expression> expressions = result.getFilterExpressions();
List<Expression> expressions = result.getFilters().getFilterExpressions();
Assert.assertEquals(2, expressions.size());
Expression expression = expressions.get(1);
Assert.assertEquals("source.getLatency()", expression.getLeft());
......@@ -260,12 +260,12 @@ public class ScriptParserTest {
AnalysisResult servicePercent = results.get(0);
Assert.assertEquals("ServicePercent", servicePercent.getMetricsName());
Assert.assertEquals("Service", servicePercent.getSourceName());
Assert.assertEquals("[sidecar, internalError]", servicePercent.getSourceAttribute().toString());
final List<Expression> filterExpressions = servicePercent.getFilterExpressions();
Assert.assertEquals("Service", servicePercent.getFrom().getSourceName());
Assert.assertEquals("[sidecar, internalError]", servicePercent.getFrom().getSourceAttribute().toString());
final List<Expression> filterExpressions = servicePercent.getFilters().getFilterExpressions();
Assert.assertEquals(1, filterExpressions.size());
Assert.assertEquals("source.getSidecar().getInternalError()", filterExpressions.get(0).getLeft());
Assert.assertEquals("percent", servicePercent.getAggregationFunctionName());
Assert.assertEquals("percent", servicePercent.getAggregationFuncStmt().getAggregationFunctionName());
EntryMethod entryMethod = servicePercent.getEntryMethod();
List<Object> methodArgsExpressions = entryMethod.getArgsExpressions();
Assert.assertEquals(1, methodArgsExpressions.size());
......@@ -278,12 +278,12 @@ public class ScriptParserTest {
List<AnalysisResult> results = parser.parse().getMetricsStmts();
AnalysisResult clientCpm = results.get(0);
Assert.assertEquals("ClientCpm", clientCpm.getMetricsName());
Assert.assertEquals("ServiceInstanceRelation", clientCpm.getSourceName());
Assert.assertEquals("[*]", clientCpm.getSourceAttribute().toString());
final List<Expression> filterExpressions = clientCpm.getFilterExpressions();
Assert.assertEquals("ServiceInstanceRelation", clientCpm.getFrom().getSourceName());
Assert.assertEquals("[*]", clientCpm.getFrom().getSourceAttribute().toString());
final List<Expression> filterExpressions = clientCpm.getFilters().getFilterExpressions();
Assert.assertEquals(1, filterExpressions.size());
Assert.assertEquals("source.getComponentId()", filterExpressions.get(0).getLeft());
Assert.assertEquals("cpm", clientCpm.getAggregationFunctionName());
Assert.assertEquals("cpm", clientCpm.getAggregationFuncStmt().getAggregationFunctionName());
EntryMethod entryMethod = clientCpm.getEntryMethod();
List<Object> methodArgsExpressions = entryMethod.getArgsExpressions();
Assert.assertEquals(1, methodArgsExpressions.size());
......@@ -297,11 +297,11 @@ public class ScriptParserTest {
);
List<AnalysisResult> results = parser.parse().getMetricsStmts();
AnalysisResult clientCpm = results.get(0);
final List<Expression> filterExpressions = clientCpm.getFilterExpressions();
final List<Expression> filterExpressions = clientCpm.getFilters().getFilterExpressions();
Assert.assertEquals(1, filterExpressions.size());
Assert.assertEquals("source.getTag(\"http.method\")", filterExpressions.get(0).getLeft());
Assert.assertEquals(1, clientCpm.getFuncArgs().size());
Assert.assertEquals("[tag[\"http.method\"]]", clientCpm.getFuncArgs().get(0).getText().toString());
Assert.assertEquals(1, clientCpm.getAggregationFuncStmt().getFuncArgs().size());
Assert.assertEquals("[tag[\"http.method\"]]", clientCpm.getAggregationFuncStmt().getFuncArgs().get(0).getText().toString());
}
@Test
......@@ -312,14 +312,14 @@ public class ScriptParserTest {
);
List<AnalysisResult> results = parser.parse().getMetricsStmts();
AnalysisResult castExp = results.get(0);
Assert.assertEquals("(str->long)", castExp.getSourceCastType());
final List<Expression> filterExpressions = castExp.getFilterExpressions();
Assert.assertEquals("(str->long)", castExp.getFrom().getSourceCastType());
final List<Expression> filterExpressions = castExp.getFilters().getFilterExpressions();
Assert.assertEquals(1, filterExpressions.size());
Assert.assertEquals(
"Long.parseLong(source.getTag(\"transmission.latency\"))", filterExpressions.get(0).getLeft());
Assert.assertEquals("(str->long)", castExp.getFuncConditionExpressions().get(0).getCastType());
Assert.assertEquals(EntryMethod.ATTRIBUTE_EXP_TYPE, castExp.getFuncArgs().get(0).getType());
Assert.assertEquals("(str->long)", castExp.getFuncArgs().get(0).getCastType());
Assert.assertEquals("(str->long)", castExp.getAggregationFuncStmt().getFuncConditionExpressions().get(0).getCastType());
Assert.assertEquals(EntryMethod.ATTRIBUTE_EXP_TYPE, castExp.getAggregationFuncStmt().getFuncArgs().get(0).getType());
Assert.assertEquals("(str->long)", castExp.getAggregationFuncStmt().getFuncArgs().get(0).getCastType());
}
@Test
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册