This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch rt-oal in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit 153eaae6edcd55d83243754dfa126b69a606d5bb Author: Wu Sheng <[email protected]> AuthorDate: Wed Jul 17 23:00:33 2019 +0800 Generate dispatcher all methods. --- .../org/apache/skywalking/oal/rt/OALRuntime.java | 21 ++++++++ .../skywalking/oal/rt/parser/AnalysisResult.java | 4 +- .../skywalking/oal/rt/parser/DeepAnalysis.java | 58 ++++++++++++++-------- .../skywalking/oal/rt/parser/EntryMethod.java | 25 ++++++++-- .../{FilterExpression.java => Expression.java} | 14 +++++- .../skywalking/oal/rt/parser/OALListener.java | 16 ++++-- .../code-templates/dispatcher/dispatch.ftl | 5 ++ .../code-templates/dispatcher/doMetrics.ftl | 36 ++++++++++++++ .../oal/rt/output/FileGeneratorTest.java | 4 +- .../skywalking/oal/rt/parser/DeepAnalysisTest.java | 4 +- .../skywalking/oal/rt/parser/ScriptParserTest.java | 2 +- .../core/analysis/metrics/DoubleAvgMetrics.java | 4 +- .../core/analysis/metrics/LongAvgMetrics.java | 4 +- .../core/analysis/metrics/PercentMetrics.java | 7 +-- .../metrics/annotation/ExpressionArg0.java | 32 ------------ .../metrics/annotation/ExpressionArg1.java | 32 ------------ .../metrics/expression/BinaryMatchExpression.java | 32 ++++++++++++ .../metrics/expression/GreaterEqualMatch.java | 15 ++++++ .../analysis/metrics/expression/GreaterMatch.java | 15 ++++++ .../metrics/expression/LessEqualMatch.java | 15 ++++++ .../analysis/metrics/expression/LessMatch.java | 15 ++++++ .../core/analysis/metrics/PercentMetricsTest.java | 24 ++++----- 22 files changed, 260 insertions(+), 124 deletions(-) diff --git a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/OALRuntime.java b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/OALRuntime.java index 7c9d5c0..6037892 100644 --- a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/OALRuntime.java +++ b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/OALRuntime.java @@ -395,6 +395,27 @@ public class OALRuntime implements OALEngine { /** * Generate methods */ + for (AnalysisResult dispatcherContextMetric : dispatcherContext.getMetrics()) { + StringWriter methodEntity = new StringWriter(); + try { + configuration.getTemplate("dispatcher/doMetrics.ftl").process(dispatcherContextMetric, methodEntity); + dispatcherClass.addMethod(CtNewMethod.make(methodEntity.toString(), dispatcherClass)); + } catch (Exception e) { + logger.error("Can't generate method do" + dispatcherContextMetric.getMetricsName() + " for " + className + ".", e); + logger.error("Method body as following" + System.lineSeparator() + "{}", methodEntity); + throw new OALCompileException(e.getMessage(), e); + } + } + + try { + StringWriter methodEntity = new StringWriter(); + configuration.getTemplate("dispatcher/dispatch.ftl").process(dispatcherContext, methodEntity); + dispatcherClass.addMethod(CtNewMethod.make(methodEntity.toString(), dispatcherClass)); + } catch (Exception e) { + logger.error("Can't generate method dispatch for " + className + ".", e); + throw new OALCompileException(e.getMessage(), e); + } + Class targetClass; try { targetClass = dispatcherClass.toClass(currentClassLoader, null); diff --git a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/AnalysisResult.java b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/AnalysisResult.java index 6579e27..70090a9 100644 --- a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/AnalysisResult.java +++ b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/AnalysisResult.java @@ -44,7 +44,7 @@ public class AnalysisResult { private EntryMethod entryMethod; - private List<FilterExpression> filterExpressions; + private List<Expression> filterExpressions; private List<ConditionExpression> filterExpressionsParserResult; @@ -74,7 +74,7 @@ public class AnalysisResult { funcConditionExpressions.add(conditionExpression); } - public void addFilterExpressions(FilterExpression filterExpression) { + public void addFilterExpressions(Expression filterExpression) { if (filterExpressions == null) { filterExpressions = new LinkedList<>(); } diff --git a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/DeepAnalysis.java b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/DeepAnalysis.java index 277d6a3..99622fa 100644 --- a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/DeepAnalysis.java +++ b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/DeepAnalysis.java @@ -39,7 +39,7 @@ public class DeepAnalysis { List<ConditionExpression> expressions = result.getFilterExpressionsParserResult(); if (expressions != null && expressions.size() > 0) { for (ConditionExpression expression : expressions) { - FilterExpression filterExpression = new FilterExpression(); + Expression filterExpression = new Expression(); if ("booleanMatch".equals(expression.getExpressionType())) { filterExpression.setExpressionObject("EqualMatch"); filterExpression.setLeft("source." + ClassMethodUtil.toIsMethod(expression.getAttribute()) + "()"); @@ -99,39 +99,55 @@ public class DeepAnalysis { // 4. Use parameter's annotation of entrance method to generate aggregation entrance. for (Parameter parameter : entranceMethod.getParameters()) { + Class<?> parameterType = parameter.getType(); Annotation[] parameterAnnotations = parameter.getAnnotations(); if (parameterAnnotations == null || parameterAnnotations.length == 0) { throw new IllegalArgumentException("Entrance method:" + entranceMethod + " doesn't include the annotation."); } Annotation annotation = parameterAnnotations[0]; if (annotation instanceof SourceFrom) { - entryMethod.addArg("source." + ClassMethodUtil.toGetMethod(result.getSourceAttribute()) + "()"); + entryMethod.addArg(parameterType, "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) { + entryMethod.addArg(parameterType, "1"); + } else if (annotation instanceof org.apache.skywalking.oap.server.core.analysis.metrics.annotation.Expression) { if (result.getFuncConditionExpressions().size() == 1) { - ConditionExpression conditionExpression = result.getFuncConditionExpressions().get(0); - if ("booleanMatch".equals(conditionExpression.getExpressionType())) { - entryMethod.addArg("source." + ClassMethodUtil.toIsMethod(conditionExpression.getAttribute()) + "()"); - } else if ("stringMatch".equals(conditionExpression.getExpressionType())) { - entryMethod.addArg("source." + ClassMethodUtil.toGetMethod(conditionExpression.getAttribute()) + "()"); + ConditionExpression expression = result.getFuncConditionExpressions().get(0); + + Expression argExpression = new Expression(); + if ("booleanMatch".equals(expression.getExpressionType())) { + argExpression.setExpressionObject("EqualMatch"); + argExpression.setLeft("source." + ClassMethodUtil.toIsMethod(expression.getAttribute()) + "()"); + argExpression.setRight(expression.getValue()); + } else if ("stringMatch".equals(expression.getExpressionType())) { + argExpression.setExpressionObject("EqualMatch"); + argExpression.setLeft("source." + ClassMethodUtil.toGetMethod(expression.getAttribute()) + "()"); + argExpression.setRight(expression.getValue()); + } else if ("greaterMatch".equals(expression.getExpressionType())) { + argExpression.setExpressionObject("GreaterMatch"); + argExpression.setLeft("source." + ClassMethodUtil.toGetMethod(expression.getAttribute()) + "()"); + argExpression.setRight(expression.getValue()); + } else if ("lessMatch".equals(expression.getExpressionType())) { + argExpression.setExpressionObject("LessMatch"); + argExpression.setLeft("source." + ClassMethodUtil.toGetMethod(expression.getAttribute()) + "()"); + argExpression.setRight(expression.getValue()); + } else if ("greaterEqualMatch".equals(expression.getExpressionType())) { + argExpression.setExpressionObject("GreaterEqualMatch"); + argExpression.setLeft("source." + ClassMethodUtil.toGetMethod(expression.getAttribute()) + "()"); + argExpression.setRight(expression.getValue()); + } else if ("lessEqualMatch".equals(expression.getExpressionType())) { + argExpression.setExpressionObject("LessEqualMatch"); + argExpression.setLeft("source." + ClassMethodUtil.toGetMethod(expression.getAttribute()) + "()"); + argExpression.setRight(expression.getValue()); } else { - throw new IllegalArgumentException("Entrance method:" + entranceMethod + " argument has @ExpressionArg0, but expression type is not supported"); + throw new IllegalArgumentException("filter expression [" + expression.getExpressionType() + "] not found"); } + + entryMethod.addArg(argExpression); } 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."); + throw new IllegalArgumentException("Entrance method:" + entranceMethod + " argument can't find funcParamExpression."); } } else if (annotation instanceof Arg) { - entryMethod.addArg(result.getNextFuncArg()); + entryMethod.addArg(parameterType, result.getNextFuncArg()); } else { throw new IllegalArgumentException("Entrance method:" + entranceMethod + " doesn't the expected annotation."); } diff --git a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/EntryMethod.java b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/EntryMethod.java index 000b3e2..8f08e24 100644 --- a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/EntryMethod.java +++ b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/EntryMethod.java @@ -24,14 +24,29 @@ import lombok.*; @Getter(AccessLevel.PUBLIC) @Setter(AccessLevel.PUBLIC) public class EntryMethod { - private String methodName; + private static final int LITERAL_TYPE = 1; + private static final int EXPRESSION_TYPE = 2; - private List<String> argsExpressions; + private String methodName; + private List<Integer> argTypes = new ArrayList<>(); + private List<Object> argsExpressions = new ArrayList<>(); - public void addArg(String expression) { - if (argsExpressions == null) { - argsExpressions = new LinkedList<>(); + public void addArg(Class<?> parameterType, String expression) { + if (parameterType.equals(int.class)) { + expression = "(int)(" + expression + ")"; + } else if (parameterType.equals(long.class)) { + expression = "(long)(" + expression + ")"; + } else if (parameterType.equals(double.class)) { + expression = "(double)(" + expression + ")"; + } else if (parameterType.equals(float.class)) { + expression = "(float)(" + expression + ")"; } + argTypes.add(LITERAL_TYPE); + argsExpressions.add(expression); + } + + public void addArg(Expression expression) { + argTypes.add(EXPRESSION_TYPE); argsExpressions.add(expression); } } diff --git a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/FilterExpression.java b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/Expression.java similarity index 80% rename from oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/FilterExpression.java rename to oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/Expression.java index d83973a..ccd1856 100644 --- a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/FilterExpression.java +++ b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/parser/Expression.java @@ -18,12 +18,22 @@ package org.apache.skywalking.oal.rt.parser; -import lombok.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; @Getter(AccessLevel.PUBLIC) @Setter(AccessLevel.PUBLIC) -public class FilterExpression { +public class Expression { private String expressionObject; private String left; private String right; + + public void setLeft(String left) { + this.left = left; + } + + public void setRight(String right) { + this.right = right; + } } 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 fb5b3cd..a43d723 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 @@ -120,19 +120,27 @@ public class OALListener extends OALParserBaseListener { } @Override public void enterBooleanConditionValue(OALParser.BooleanConditionValueContext ctx) { - conditionExpression.setValue(ctx.getText()); + enterConditionValue(ctx.getText()); } @Override public void enterStringConditionValue(OALParser.StringConditionValueContext ctx) { - conditionExpression.setValue(ctx.getText()); + enterConditionValue(ctx.getText()); } @Override public void enterEnumConditionValue(OALParser.EnumConditionValueContext ctx) { - conditionExpression.setValue(ctx.getText()); + enterConditionValue(ctx.getText()); } @Override public void enterNumberConditionValue(OALParser.NumberConditionValueContext ctx) { - conditionExpression.setValue(ctx.getText()); + enterConditionValue(ctx.getText()); + } + + private void enterConditionValue(String value) { + if (value.split("\\.").length == 2 && !value.startsWith("\"")) { + // Value is an enum. + value = "org.apache.skywalking.oap.server.core.source." + value; + } + conditionExpression.setValue(value); } ///////////// diff --git a/oap-server/oal-rt/src/main/resources/code-templates/dispatcher/dispatch.ftl b/oap-server/oal-rt/src/main/resources/code-templates/dispatcher/dispatch.ftl new file mode 100644 index 0000000..c04c26e --- /dev/null +++ b/oap-server/oal-rt/src/main/resources/code-templates/dispatcher/dispatch.ftl @@ -0,0 +1,5 @@ +public void dispatch(org.apache.skywalking.oap.server.core.source.${source} source) { + <#list metrics as metrics> + do${metrics.metricsName}(source); + </#list> +} \ No newline at end of file diff --git a/oap-server/oal-rt/src/main/resources/code-templates/dispatcher/doMetrics.ftl b/oap-server/oal-rt/src/main/resources/code-templates/dispatcher/doMetrics.ftl new file mode 100644 index 0000000..6e7c6f4 --- /dev/null +++ b/oap-server/oal-rt/src/main/resources/code-templates/dispatcher/doMetrics.ftl @@ -0,0 +1,36 @@ +private void do${metricsName}(org.apache.skywalking.oap.server.core.source.${sourceName} source) { + org.apache.skywalking.oal.rt.metrics.${metricsName}Metrics metrics = new org.apache.skywalking.oal.rt.metrics.${metricsName}Metrics(); + + <#if filterExpressions??> + <#list filterExpressions as filterExpression> + <#if filterExpression.expressionObject == "GreaterMatch" || filterExpression.expressionObject == "LessMatch" || filterExpression.expressionObject == "GreaterEqualMatch" || filterExpression.expressionObject == "LessEqualMatch"> + if (!new org.apache.skywalking.oap.server.core.analysis.metrics.expression.${filterExpression.expressionObject}().match(${filterExpression.left}, ${filterExpression.right})) { + return; + } + <#else> + if (!new org.apache.skywalking.oap.server.core.analysis.metrics.expression.${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { + return; + } + </#if> + </#list> + </#if> + + metrics.setTimeBucket(source.getTimeBucket()); + <#list fieldsFromSource as field> + metrics.${field.fieldSetter}(source.${field.fieldGetter}()); + </#list> + metrics.${entryMethod.methodName}( + <#list entryMethod.argsExpressions as arg> + <#if entryMethod.argTypes[arg_index] == 1> + ${arg} + <#else> + <#if arg.expressionObject == "GreaterMatch" || arg.expressionObject == "LessMatch" || arg.expressionObject == "GreaterEqualMatch" || arg.expressionObject == "LessEqualMatch"> + new org.apache.skywalking.oap.server.core.analysis.metrics.expression.${arg.expressionObject}().match(${arg.left}, ${arg.right}) + <#else> + new org.apache.skywalking.oap.server.core.analysis.metrics.expression.${arg.expressionObject}().setLeft(${arg.left}).setRight(${arg.right}).match() + </#if> + </#if><#if arg_has_next>, </#if> + </#list>); + + org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor.getInstance().in(metrics); +} diff --git a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/output/FileGeneratorTest.java b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/output/FileGeneratorTest.java index 21069ae..2acd6b5 100644 --- a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/output/FileGeneratorTest.java +++ b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/output/FileGeneratorTest.java @@ -46,13 +46,13 @@ public class FileGeneratorTest { result.setAggregationFunctionName("avg"); result.setMetricsClassName("LongAvgMetrics"); - FilterExpression equalExpression = new FilterExpression(); + Expression equalExpression = new Expression(); equalExpression.setExpressionObject("EqualMatch"); equalExpression.setLeft("source.getName()"); equalExpression.setRight("\"/service/prod/save\""); result.addFilterExpressions(equalExpression); - FilterExpression greaterExpression = new FilterExpression(); + Expression greaterExpression = new Expression(); greaterExpression.setExpressionObject("GreaterMatch"); greaterExpression.setLeft("source.getLatency()"); greaterExpression.setRight("1000"); diff --git a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java index b4abfd2..7701c13 100644 --- a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java +++ b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java @@ -109,9 +109,9 @@ public class DeepAnalysisTest { List<DataColumn> persistentFields = result.getPersistentFields(); Assert.assertEquals(4, persistentFields.size()); - List<FilterExpression> filterExpressions = result.getFilterExpressions(); + List<Expression> filterExpressions = result.getFilterExpressions(); Assert.assertEquals(1, filterExpressions.size()); - FilterExpression filterExpression = filterExpressions.get(0); + Expression filterExpression = filterExpressions.get(0); Assert.assertEquals("EqualMatch", filterExpression.getExpressionObject()); Assert.assertEquals("source.getName()", filterExpression.getLeft()); Assert.assertEquals("\"/service/prod/save\"", filterExpression.getRight()); 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 e27ac02..7748d4f 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 @@ -80,7 +80,7 @@ public class ScriptParserTest { Assert.assertEquals("*", endpointPercent.getSourceAttribute()); Assert.assertEquals("percent", endpointPercent.getAggregationFunctionName()); EntryMethod entryMethod = endpointPercent.getEntryMethod(); - List<String> methodArgsExpressions = entryMethod.getArgsExpressions(); + List<Object> methodArgsExpressions = entryMethod.getArgsExpressions(); Assert.assertEquals(3, methodArgsExpressions.size()); Assert.assertEquals("source.isStatus()", methodArgsExpressions.get(1)); Assert.assertEquals("true", methodArgsExpressions.get(2)); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/DoubleAvgMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/DoubleAvgMetrics.java index 9e70800..850c580 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/DoubleAvgMetrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/DoubleAvgMetrics.java @@ -34,11 +34,11 @@ public abstract class DoubleAvgMetrics extends Metrics implements DoubleValueHol protected static final String VALUE = "value"; @Getter @Setter @Column(columnName = SUMMATION) private double summation; - @Getter @Setter @Column(columnName = COUNT) private int count; + @Getter @Setter @Column(columnName = COUNT) private long count; @Getter @Setter @Column(columnName = VALUE, isValue = true, function = Function.Avg) private double value; @Entrance - public final void combine(@SourceFrom double summation, @ConstOne int count) { + public final void combine(@SourceFrom double summation, @ConstOne long count) { this.summation += summation; this.count += count; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/LongAvgMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/LongAvgMetrics.java index fce1e58..a0d5c3a 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/LongAvgMetrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/LongAvgMetrics.java @@ -34,11 +34,11 @@ public abstract class LongAvgMetrics extends Metrics implements LongValueHolder protected static final String VALUE = "value"; @Getter @Setter @Column(columnName = SUMMATION) private long summation; - @Getter @Setter @Column(columnName = COUNT) private int count; + @Getter @Setter @Column(columnName = COUNT) private long count; @Getter @Setter @Column(columnName = VALUE, isValue = true, function = Function.Avg) private long value; @Entrance - public final void combine(@SourceFrom long summation, @ConstOne int count) { + public final void combine(@SourceFrom long summation, @ConstOne long count) { this.summation += summation; this.count += count; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetrics.java index 1224d92..1f8654f 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetrics.java @@ -38,11 +38,8 @@ public abstract class PercentMetrics extends Metrics implements IntValueHolder { @Getter @Setter @Column(columnName = MATCH) private long match; @Entrance - public final void combine(@Expression EqualMatch expression, @ExpressionArg0 Object leftValue, - @ExpressionArg1 Object rightValue) { - expression.setLeft(leftValue); - expression.setRight(rightValue); - if (expression.match()) { + public final void combine(@Expression boolean isMatch) { + if (isMatch) { match++; } total++; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/annotation/ExpressionArg0.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/annotation/ExpressionArg0.java deleted file mode 100644 index 1e4384f..0000000 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/annotation/ExpressionArg0.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.metrics.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author wusheng - */ -@Target(ElementType.PARAMETER) -@Retention(RetentionPolicy.RUNTIME) -public @interface ExpressionArg0 { -} diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/annotation/ExpressionArg1.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/annotation/ExpressionArg1.java deleted file mode 100644 index 364ac7e..0000000 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/annotation/ExpressionArg1.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.metrics.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author wusheng - */ -@Target(ElementType.PARAMETER) -@Retention(RetentionPolicy.RUNTIME) -public @interface ExpressionArg1 { -} diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/BinaryMatchExpression.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/BinaryMatchExpression.java index db7422a..f2985e5 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/BinaryMatchExpression.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/BinaryMatchExpression.java @@ -33,10 +33,42 @@ public abstract class BinaryMatchExpression { return this; } + public BinaryMatchExpression setLeft(boolean left) { + return setLeft(left); + } + + public BinaryMatchExpression setLeft(int left) { + return setLeft(left); + } + + public BinaryMatchExpression setLeft(long left) { + return setLeft(left); + } + + public BinaryMatchExpression setLeft(double left) { + return setLeft(left); + } + public BinaryMatchExpression setRight(Object right) { this.right = right; return this; } + public BinaryMatchExpression setRight(boolean left) { + return setLeft(left); + } + + public BinaryMatchExpression setRight(int left) { + return setLeft(left); + } + + public BinaryMatchExpression setRight(long left) { + return setLeft(left); + } + + public BinaryMatchExpression setRight(double left) { + return setLeft(left); + } + public abstract boolean match(); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/GreaterEqualMatch.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/GreaterEqualMatch.java index f26aac7..7c8f455 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/GreaterEqualMatch.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/GreaterEqualMatch.java @@ -22,6 +22,21 @@ package org.apache.skywalking.oap.server.core.analysis.metrics.expression; * @author peng-yongsheng */ public class GreaterEqualMatch { + public boolean match(int left, int right) { + return left >= right; + } + + public boolean match(long left, long right) { + return left >= right; + } + + public boolean match(float left, float right) { + return left >= right; + } + + public boolean match(double left, double right) { + return left >= right; + } public boolean match(Integer left, Integer right) { return left >= right; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/GreaterMatch.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/GreaterMatch.java index 87b06c5..7a82dc0 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/GreaterMatch.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/GreaterMatch.java @@ -22,6 +22,21 @@ package org.apache.skywalking.oap.server.core.analysis.metrics.expression; * @author peng-yongsheng */ public class GreaterMatch { + public boolean match(int left, int right) { + return left > right; + } + + public boolean match(long left, long right) { + return left > right; + } + + public boolean match(float left, float right) { + return left > right; + } + + public boolean match(double left, double right) { + return left > right; + } public boolean match(Integer left, Integer right) { return left > right; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LessEqualMatch.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LessEqualMatch.java index 00f64f1..4590dab 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LessEqualMatch.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LessEqualMatch.java @@ -22,6 +22,21 @@ package org.apache.skywalking.oap.server.core.analysis.metrics.expression; * @author peng-yongsheng */ public class LessEqualMatch { + public boolean match(int left, int right) { + return left <= right; + } + + public boolean match(long left, long right) { + return left <= right; + } + + public boolean match(float left, float right) { + return left <= right; + } + + public boolean match(double left, double right) { + return left <= right; + } public boolean match(Integer left, Integer right) { return left <= right; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LessMatch.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LessMatch.java index 5583def..924d2fb 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LessMatch.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LessMatch.java @@ -22,6 +22,21 @@ package org.apache.skywalking.oap.server.core.analysis.metrics.expression; * @author peng-yongsheng */ public class LessMatch { + public boolean match(int left, int right) { + return left < right; + } + + public boolean match(long left, long right) { + return left < right; + } + + public boolean match(float left, float right) { + return left < right; + } + + public boolean match(double left, double right) { + return left < right; + } public boolean match(Integer left, Integer right) { return left < right; diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetricsTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetricsTest.java index b5bb0f0..97a3f0d 100644 --- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetricsTest.java +++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetricsTest.java @@ -30,18 +30,18 @@ public class PercentMetricsTest { @Test public void testEntranceCombine() { PercentMetricsImpl impl = new PercentMetricsImpl(); - impl.combine(new EqualMatch(), true, true); - impl.combine(new EqualMatch(), true, false); - impl.combine(new EqualMatch(), true, false); + impl.combine(new EqualMatch().setLeft(true).setRight(true).match()); + impl.combine(new EqualMatch().setLeft(true).setRight(false).match()); + impl.combine(new EqualMatch().setLeft(true).setRight(false).match()); impl.calculate(); Assert.assertEquals(3333, impl.getValue()); impl = new PercentMetricsImpl(); - impl.combine(new EqualMatch(), true, true); - impl.combine(new EqualMatch(), true, true); - impl.combine(new EqualMatch(), true, false); + impl.combine(new EqualMatch().setLeft(true).setRight(true).match()); + impl.combine(new EqualMatch().setLeft(true).setRight(true).match()); + impl.combine(new EqualMatch().setLeft(true).setRight(false).match()); impl.calculate(); @@ -51,14 +51,14 @@ public class PercentMetricsTest { @Test public void testSelfCombine() { PercentMetricsImpl impl = new PercentMetricsImpl(); - impl.combine(new EqualMatch(), true, true); - impl.combine(new EqualMatch(), true, false); - impl.combine(new EqualMatch(), true, false); + impl.combine(new EqualMatch().setLeft(true).setRight(true).match()); + impl.combine(new EqualMatch().setLeft(true).setRight(false).match()); + impl.combine(new EqualMatch().setLeft(true).setRight(false).match()); PercentMetricsImpl impl2 = new PercentMetricsImpl(); - impl2.combine(new EqualMatch(), true, true); - impl2.combine(new EqualMatch(), true, true); - impl2.combine(new EqualMatch(), true, false); + impl2.combine(new EqualMatch().setLeft(true).setRight(true).match()); + impl2.combine(new EqualMatch().setLeft(true).setRight(true).match()); + impl2.combine(new EqualMatch().setLeft(true).setRight(false).match()); impl.combine(impl2);
