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 3532ed6a1ee7efe86414510700812367e8dca299 Author: Wu Sheng <[email protected]> AuthorDate: Thu Jul 18 09:40:03 2019 +0800 Clear up --- .../org/apache/skywalking/oal/rt/OALRuntime.java | 13 +- .../skywalking/oal/rt/output/FileGenerator.java | 115 -------- .../skywalking/oal/rt/output/WriteWrapper.java | 26 -- .../code-templates/DisableSourceDefinition.ftl | 33 --- .../code-templates/DispatcherTemplate.ftl | 73 ----- .../code-templates/MetricsImplementor.ftl | 293 --------------------- .../oal/rt/output/FileGeneratorTest.java | 120 --------- .../skywalking/oal/rt/parser/DeepAnalysisTest.java | 12 +- .../skywalking/oal/rt/parser/ScriptParserTest.java | 4 +- .../core/analysis/metrics/PercentMetrics.java | 8 +- oap-server/server-starter/pom.xml | 1 + .../server-starter/src/main/assembly/assembly.xml | 2 + 12 files changed, 18 insertions(+), 682 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 3d30baa..6f7b0c3 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 @@ -27,7 +27,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.Reader; import java.io.StringWriter; -import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -45,7 +44,6 @@ import javassist.bytecode.ClassFile; import javassist.bytecode.ConstPool; import javassist.bytecode.SignatureAttribute; import javassist.bytecode.annotation.Annotation; -import javassist.bytecode.annotation.ArrayMemberValue; import javassist.bytecode.annotation.ClassMemberValue; import javassist.bytecode.annotation.IntegerMemberValue; import javassist.bytecode.annotation.StringMemberValue; @@ -54,19 +52,15 @@ import org.apache.skywalking.oal.rt.meta.MetaReader; import org.apache.skywalking.oal.rt.meta.MetaSettings; import org.apache.skywalking.oal.rt.output.AllDispatcherContext; import org.apache.skywalking.oal.rt.output.DispatcherContext; -import org.apache.skywalking.oal.rt.output.FileGenerator; import org.apache.skywalking.oal.rt.parser.AnalysisResult; -import org.apache.skywalking.oal.rt.parser.DisableCollection; import org.apache.skywalking.oal.rt.parser.MetricsHolder; import org.apache.skywalking.oal.rt.parser.OALScripts; import org.apache.skywalking.oal.rt.parser.ScriptParser; import org.apache.skywalking.oal.rt.parser.SourceColumn; import org.apache.skywalking.oal.rt.parser.SourceColumnsFactory; import org.apache.skywalking.oap.server.core.WorkPath; -import org.apache.skywalking.oap.server.core.analysis.Disable; import org.apache.skywalking.oap.server.core.analysis.DisableRegister; import org.apache.skywalking.oap.server.core.analysis.DispatcherDetectorListener; -import org.apache.skywalking.oap.server.core.analysis.MultipleDisable; import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; import org.apache.skywalking.oap.server.core.analysis.Stream; import org.apache.skywalking.oap.server.core.analysis.StreamAnnotationListener; @@ -88,12 +82,11 @@ import org.slf4j.LoggerFactory; public class OALRuntime implements OALEngine { private static final Logger logger = LoggerFactory.getLogger(OALRuntime.class); - private static final Charset CLASS_FILE_CHARSET = Charset.forName("UTF-8"); + private static final String CLASS_FILE_CHARSET = "UTF-8"; private static final String METRICS_FUNCTION_PACKAGE = "org.apache.skywalking.oap.server.core.analysis.metrics."; private static final String DYNAMIC_METRICS_CLASS_PACKAGE = "org.apache.skywalking.oal.rt.metrics."; private static final String DYNAMIC_METRICS_BUILDER_CLASS_PACKAGE = "org.apache.skywalking.oal.rt.metrics.builder."; private static final String DYNAMIC_DISPATCHER_CLASS_PACKAGE = "org.apache.skywalking.oal.rt.dispatcher."; - private static final String DYNAMIC_DISABLE_CLASS_NAME = "org.apache.skywalking.oal.rt.DisableSourceDefinition"; private static final String WITH_METADATA_INTERFACE = "org.apache.skywalking.oap.server.core.analysis.metrics.WithMetadata"; private static final String STORAGE_BUILDER_INTERFACE = "org.apache.skywalking.oap.server.core.storage.StorageBuilder"; private static final String DISPATCHER_INTERFACE = "org.apache.skywalking.oap.server.core.analysis.SourceDispatcher"; @@ -115,8 +108,8 @@ public class OALRuntime implements OALEngine { public OALRuntime() { classPool = ClassPool.getDefault(); configuration = new Configuration(new Version("2.3.28")); - configuration.setEncoding(Locale.ENGLISH, "UTF-8"); - configuration.setClassLoaderForTemplateLoading(FileGenerator.class.getClassLoader(), "/code-templates"); + configuration.setEncoding(Locale.ENGLISH, CLASS_FILE_CHARSET); + configuration.setClassLoaderForTemplateLoading(OALRuntime.class.getClassLoader(), "/code-templates"); allDispatcherContext = new AllDispatcherContext(); metricsClasses = new ArrayList<>(); dispatcherClasses = new ArrayList<>(); diff --git a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/output/FileGenerator.java b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/output/FileGenerator.java deleted file mode 100644 index 671bc46..0000000 --- a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/output/FileGenerator.java +++ /dev/null @@ -1,115 +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.oal.rt.output; - -import freemarker.template.*; -import java.io.*; -import java.util.*; -import org.apache.skywalking.oal.rt.parser.*; - -public class FileGenerator { - private List<AnalysisResult> results; - private DisableCollection collection; - private String outputPath; - private Configuration configuration; - private AllDispatcherContext allDispatcherContext; - - public FileGenerator(OALScripts oalScripts, String outputPath) { - this.results = oalScripts.getMetricsStmts(); - this.collection = oalScripts.getDisableCollection(); - this.outputPath = outputPath; - configuration = new Configuration(new Version("2.3.28")); - configuration.setEncoding(Locale.ENGLISH, "UTF-8"); - configuration.setClassLoaderForTemplateLoading(FileGenerator.class.getClassLoader(), "/code-templates"); - allDispatcherContext = new AllDispatcherContext(); - buildDispatcherContext(); - } - - public void generate() throws IOException, TemplateException { - for (AnalysisResult result : results) { - generate(result, "Metrics.java", writer -> generateMetricsImplementor(result, writer)); - - String scopeName = result.getSourceName(); - File file = new File(outputPath, "generated/" + scopeName.toLowerCase() + "/" + scopeName + "Dispatcher.java"); - createFile(file); - generateDispatcher(result, new FileWriter(file)); - } - generateDisable(); - } - - private void generate(AnalysisResult result, String fileSuffix, - WriteWrapper writeWrapper) throws IOException, TemplateException { - File file = new File(outputPath, buildSubFolderName(result, fileSuffix)); - createFile(file); - FileWriter fileWriter = new FileWriter(file); - try { - writeWrapper.execute(fileWriter); - } finally { - fileWriter.close(); - } - } - - private void createFile(File file) throws IOException { - if (!file.exists()) { - if (!file.getParentFile().exists()) { - file.getParentFile().mkdirs(); - } - file.createNewFile(); - } - } - - private String buildSubFolderName(AnalysisResult result, String suffix) { - return "generated/" - + result.getSourceName().toLowerCase() + "/" - + result.getMetricsName() + suffix; - } - - public void generateMetricsImplementor(AnalysisResult result, Writer output) throws IOException, TemplateException { - configuration.getTemplate("MetricsImplementor.ftl").process(result, output); - } - - void generateDispatcher(AnalysisResult result, Writer output) throws IOException, TemplateException { - String scopeName = result.getSourceName(); - DispatcherContext context = allDispatcherContext.getAllContext().get(scopeName); - if (context != null) { - configuration.getTemplate("DispatcherTemplate.ftl").process(context, output); - } - } - - private void buildDispatcherContext() { - for (AnalysisResult result : results) { - String sourceName = result.getSourceName(); - - DispatcherContext context = allDispatcherContext.getAllContext().get(sourceName); - if (context == null) { - context = new DispatcherContext(); - context.setSource(sourceName); - context.setPackageName(sourceName.toLowerCase()); - allDispatcherContext.getAllContext().put(sourceName, context); - } - context.getMetrics().add(result); - } - } - - private void generateDisable() throws IOException, TemplateException { - File file = new File(outputPath, "generated/DisableSourceDefinition.java"); - createFile(file); - configuration.getTemplate("DisableSourceDefinition.ftl").process(collection, new FileWriter(file)); - } -} diff --git a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/output/WriteWrapper.java b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/output/WriteWrapper.java deleted file mode 100644 index a98a271..0000000 --- a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/output/WriteWrapper.java +++ /dev/null @@ -1,26 +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.oal.rt.output; - -import freemarker.template.TemplateException; -import java.io.*; - -public interface WriteWrapper { - void execute(FileWriter fileWriter) throws IOException, TemplateException; -} diff --git a/oap-server/oal-rt/src/main/resources/code-templates/DisableSourceDefinition.ftl b/oap-server/oal-rt/src/main/resources/code-templates/DisableSourceDefinition.ftl deleted file mode 100644 index b1c9be5..0000000 --- a/oap-server/oal-rt/src/main/resources/code-templates/DisableSourceDefinition.ftl +++ /dev/null @@ -1,33 +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.generated; -<#if (allDisableSources?size>0)> -import org.apache.skywalking.oap.server.core.analysis.Disable; -</#if> - -/** -* This class is auto generated. Please don't change this class manually. -* -* @author Observability Analysis Language code generator -*/ -<#list allDisableSources as disableSource> -@Disable("${disableSource}") -</#list> -public class DisableSourceDefinition { -} \ No newline at end of file diff --git a/oap-server/oal-rt/src/main/resources/code-templates/DispatcherTemplate.ftl b/oap-server/oal-rt/src/main/resources/code-templates/DispatcherTemplate.ftl deleted file mode 100644 index ea6b319..0000000 --- a/oap-server/oal-rt/src/main/resources/code-templates/DispatcherTemplate.ftl +++ /dev/null @@ -1,73 +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.generated.${packageName}; - -import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; -<#if (metrics?size>0)> -import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor; - <#list metrics as metrics> - <#if metrics.filterExpressions??> -import org.apache.skywalking.oap.server.core.analysis.metrics.expression.*; - <#break> - </#if> - </#list> -</#if> -import org.apache.skywalking.oap.server.core.source.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -public class ${source}Dispatcher implements SourceDispatcher<${source}> { - - @Override public void dispatch(${source} source) { -<#list metrics as metrics> - do${metrics.metricsName}(source); -</#list> - } - -<#list metrics as metrics> - private void do${metrics.metricsName}(${source} source) { - ${metrics.metricsName}Metrics metrics = new ${metrics.metricsName}Metrics(); - - <#if metrics.filterExpressions??> - <#list metrics.filterExpressions as filterExpression> - <#if filterExpression.expressionObject == "GreaterMatch" || filterExpression.expressionObject == "LessMatch" || filterExpression.expressionObject == "GreaterEqualMatch" || filterExpression.expressionObject == "LessEqualMatch"> - if (!new ${filterExpression.expressionObject}().match(${filterExpression.left}, ${filterExpression.right})) { - return; - } - <#else> - if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) { - return; - } - </#if> - </#list> - </#if> - - metrics.setTimeBucket(source.getTimeBucket()); - <#list metrics.fieldsFromSource as field> - metrics.${field.fieldSetter}(source.${field.fieldGetter}()); - </#list> - metrics.${metrics.entryMethod.methodName}(<#list metrics.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>); - - MetricsStreamProcessor.getInstance().in(metrics); - } -</#list> -} diff --git a/oap-server/oal-rt/src/main/resources/code-templates/MetricsImplementor.ftl b/oap-server/oal-rt/src/main/resources/code-templates/MetricsImplementor.ftl deleted file mode 100644 index bd94528..0000000 --- a/oap-server/oal-rt/src/main/resources/code-templates/MetricsImplementor.ftl +++ /dev/null @@ -1,293 +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.generated.${packageName}; - -import java.util.*; -<#if (fieldsFromSource?size>0) > -import lombok.*; -</#if> -<#list fieldsFromSource as sourceField> - <#if sourceField.isID()> -import org.apache.skywalking.oap.server.core.Const; - <#break> - </#if> -</#list> -import org.apache.skywalking.oap.server.core.analysis.Stream; -import org.apache.skywalking.oap.server.core.analysis.metrics.*; -import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor; -import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; -import org.apache.skywalking.oap.server.core.storage.StorageBuilder; -import org.apache.skywalking.oap.server.core.storage.annotation.*; - -/** - * This class is auto generated. Please don't change this class manually. - * - * @author Observability Analysis Language code generator - */ -@Stream(name = "${tableName}", scopeId = ${sourceScopeId}, builder = ${metricsName}Metrics.Builder.class, processor = MetricsStreamProcessor.class) -public class ${metricsName}Metrics extends ${metricsClassName} implements WithMetadata { - -<#list fieldsFromSource as sourceField> - @Setter @Getter @Column(columnName = "${sourceField.columnName}") <#if sourceField.isID()>@IDColumn</#if> private ${sourceField.typeName} ${sourceField.fieldName}; -</#list> - - @Override public String id() { - String splitJointId = String.valueOf(getTimeBucket()); -<#list fieldsFromSource as sourceField> - <#if sourceField.isID()> - <#if sourceField.getTypeName() == "java.lang.String"> - splitJointId += Const.ID_SPLIT + ${sourceField.fieldName}; - <#else> - splitJointId += Const.ID_SPLIT + String.valueOf(${sourceField.fieldName}); - </#if> - </#if> -</#list> - return splitJointId; - } - - @Override public int hashCode() { - int result = 17; -<#list fieldsFromSource as sourceField> - <#if sourceField.isID()> - <#if sourceField.getTypeName() == "java.lang.String"> - result = 31 * result + ${sourceField.fieldName}.hashCode(); - <#else> - result += Const.ID_SPLIT + ${sourceField.fieldName}; - </#if> - </#if> -</#list> - result = 31 * result + (int)getTimeBucket(); - return result; - } - - @Override public int remoteHashCode() { - int result = 17; -<#list fieldsFromSource as sourceField> - <#if sourceField.isID()> - <#if sourceField.getTypeName() == "java.lang.String"> - result = 31 * result + ${sourceField.fieldName}.hashCode(); - <#else> - result += Const.ID_SPLIT + ${sourceField.fieldName}; - </#if> - </#if> -</#list> - return result; - } - - @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - - ${metricsName}Metrics metrics = (${metricsName}Metrics)obj; -<#list fieldsFromSource as sourceField> - <#if sourceField.isID()> - <#if sourceField.getTypeName() == "java.lang.String"> - if (!${sourceField.fieldName}.equals(metrics.${sourceField.fieldName})) - <#else> - if (${sourceField.fieldName} != metrics.${sourceField.fieldName}) - </#if> - return false; - </#if> -</#list> - - if (getTimeBucket() != metrics.getTimeBucket()) - return false; - - return true; - } - - @Override public RemoteData.Builder serialize() { - RemoteData.Builder remoteBuilder = RemoteData.newBuilder(); -<#list serializeFields.stringFields as field> - remoteBuilder.addDataStrings(${field.getter}()); -</#list> - -<#list serializeFields.longFields as field> - remoteBuilder.addDataLongs(${field.getter}()); -</#list> - -<#list serializeFields.doubleFields as field> - remoteBuilder.addDataDoubles(${field.getter}()); -</#list> - -<#list serializeFields.intFields as field> - remoteBuilder.addDataIntegers(${field.getter}()); -</#list> -<#list serializeFields.intLongValuePairListFields as field> - ${field.getter}().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize())); -</#list> - - return remoteBuilder; - } - - @Override public void deserialize(RemoteData remoteData) { -<#list serializeFields.stringFields as field> - ${field.setter}(remoteData.getDataStrings(${field?index})); -</#list> - -<#list serializeFields.longFields as field> - ${field.setter}(remoteData.getDataLongs(${field?index})); -</#list> - -<#list serializeFields.doubleFields as field> - ${field.setter}(remoteData.getDataDoubles(${field?index})); -</#list> - -<#list serializeFields.intFields as field> - ${field.setter}(remoteData.getDataIntegers(${field?index})); -</#list> - -<#list serializeFields.intLongValuePairListFields as field> - setDetailGroup(new IntKeyLongValueArray(30)); - remoteData.getDataIntLongPairListList().forEach(element -> { - getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue())); - }); -</#list> - - } - - @Override public MetricsMetaInfo getMeta() { - return new MetricsMetaInfo("${varName}", ${sourceScopeId}<#if (fieldsFromSource?size>0) ><#list fieldsFromSource as field><#if field.isID()>, ${field.fieldName}</#if></#list></#if>); - } - - @Override - public Metrics toHour() { - ${metricsName}Metrics metrics = new ${metricsName}Metrics(); -<#list fieldsFromSource as field> - <#if field.columnName == "time_bucket"> - metrics.setTimeBucket(toTimeBucketInHour()); - <#elseif field.typeName == "java.lang.String" || field.typeName == "long" || field.typeName == "int" || field.typeName == "double" || field.typeName == "float"> - metrics.${field.fieldSetter}(this.${field.fieldGetter}()); - <#else> - ${field.typeName} newValue = new ${field.typeName}(); - newValue.copyFrom(this.${field.fieldGetter}()); - metrics.${field.fieldSetter}(newValue); - </#if> -</#list> -<#list persistentFields as field> - <#if field.columnName == "time_bucket"> - metrics.setTimeBucket(toTimeBucketInHour()); - <#elseif field.typeName == "java.lang.String" || field.typeName == "long" || field.typeName == "int" || field.typeName == "double" || field.typeName == "float"> - metrics.${field.fieldSetter}(this.${field.fieldGetter}()); - <#else> - ${field.typeName} newValue = new ${field.typeName}(); - newValue.copyFrom(this.${field.fieldGetter}()); - metrics.${field.fieldSetter}(newValue); - </#if> -</#list> - return metrics; - } - - @Override - public Metrics toDay() { - ${metricsName}Metrics metrics = new ${metricsName}Metrics(); -<#list fieldsFromSource as field> - <#if field.columnName == "time_bucket"> - metrics.setTimeBucket(toTimeBucketInDay()); - <#elseif field.typeName == "java.lang.String" || field.typeName == "long" || field.typeName == "int" || field.typeName == "double" || field.typeName == "float"> - metrics.${field.fieldSetter}(this.${field.fieldGetter}()); - <#else> - ${field.typeName} newValue = new ${field.typeName}(); - newValue.copyFrom(this.${field.fieldGetter}()); - metrics.${field.fieldSetter}(newValue); - </#if> -</#list> -<#list persistentFields as field> - <#if field.columnName == "time_bucket"> - metrics.setTimeBucket(toTimeBucketInDay()); - <#elseif field.typeName == "java.lang.String" || field.typeName == "long" || field.typeName == "int" || field.typeName == "double" || field.typeName == "float"> - metrics.${field.fieldSetter}(this.${field.fieldGetter}()); - <#else> - ${field.typeName} newValue = new ${field.typeName}(); - newValue.copyFrom(this.${field.fieldGetter}()); - metrics.${field.fieldSetter}(newValue); - </#if> -</#list> - return metrics; - } - - @Override - public Metrics toMonth() { - ${metricsName}Metrics metrics = new ${metricsName}Metrics(); -<#list fieldsFromSource as field> - <#if field.columnName == "time_bucket"> - metrics.setTimeBucket(toTimeBucketInMonth()); - <#elseif field.typeName == "java.lang.String" || field.typeName == "long" || field.typeName == "int" || field.typeName == "double" || field.typeName == "float"> - metrics.${field.fieldSetter}(this.${field.fieldGetter}()); - <#else> - ${field.typeName} newValue = new ${field.typeName}(); - newValue.copyFrom(this.${field.fieldGetter}()); - metrics.${field.fieldSetter}(newValue); - </#if> -</#list> -<#list persistentFields as field> - <#if field.columnName == "time_bucket"> - metrics.setTimeBucket(toTimeBucketInMonth()); - <#elseif field.typeName == "java.lang.String" || field.typeName == "long" || field.typeName == "int" || field.typeName == "double" || field.typeName == "float"> - metrics.${field.fieldSetter}(this.${field.fieldGetter}()); - <#else> - ${field.typeName} newValue = new ${field.typeName}(); - newValue.copyFrom(this.${field.fieldGetter}()); - metrics.${field.fieldSetter}(newValue); - </#if> -</#list> - return metrics; - } - - public static class Builder implements StorageBuilder<${metricsName}Metrics> { - - @Override public Map<String, Object> data2Map(${metricsName}Metrics storageData) { - Map<String, Object> map = new HashMap<>(); - <#list fieldsFromSource as field> - map.put("${field.columnName}", storageData.${field.fieldGetter}()); - </#list> - <#list persistentFields as field> - map.put("${field.columnName}", storageData.${field.fieldGetter}()); - </#list> - return map; - } - - @Override public ${metricsName}Metrics map2Data(Map<String, Object> dbMap) { - ${metricsName}Metrics metrics = new ${metricsName}Metrics(); - <#list fieldsFromSource as field> - <#if field.typeName == "long" || field.typeName == "int" || field.typeName == "double" || field.typeName == "float"> - metrics.${field.fieldSetter}(((Number)dbMap.get("${field.columnName}")).${field.typeName}Value()); - <#elseif field.typeName == "java.lang.String"> - metrics.${field.fieldSetter}((String)dbMap.get("${field.columnName}")); - <#else> - metrics.${field.fieldSetter}(new ${field.typeName}((String)dbMap.get("${field.columnName}"))); - </#if> - </#list> - <#list persistentFields as field> - <#if field.typeName == "long" || field.typeName == "int" || field.typeName == "double" || field.typeName == "float"> - metrics.${field.fieldSetter}(((Number)dbMap.get("${field.columnName}")).${field.typeName}Value()); - <#elseif field.typeName == "java.lang.String"> - metrics.${field.fieldSetter}((String)dbMap.get("${field.columnName}")); - <#else> - metrics.${field.fieldSetter}(new ${field.typeName}((String)dbMap.get("${field.columnName}"))); - </#if> - </#list> - return 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 deleted file mode 100644 index 2acd6b5..0000000 --- a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/output/FileGeneratorTest.java +++ /dev/null @@ -1,120 +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.oal.rt.output; - -import freemarker.template.TemplateException; -import java.io.*; -import java.util.LinkedList; -import org.apache.skywalking.oal.rt.meta.*; -import org.apache.skywalking.oal.rt.parser.*; -import org.junit.*; - -public class FileGeneratorTest { - @BeforeClass - public static void init() { - MetaReader reader = new MetaReader(); - InputStream stream = MetaReaderTest.class.getResourceAsStream("/scope-meta.yml"); - MetaSettings metaSettings = reader.read(stream); - SourceColumnsFactory.setSettings(metaSettings); - } - - private AnalysisResult buildResult() { - AnalysisResult result = new AnalysisResult(); - result.setVarName("generate_metrics"); - result.setSourceName("Service"); - result.setSourceScopeId(1); - result.setPackageName("service.serviceavg"); - result.setTableName("service_avg"); - result.setSourceAttribute("latency"); - result.setMetricsName("ServiceAvg"); - result.setAggregationFunctionName("avg"); - result.setMetricsClassName("LongAvgMetrics"); - - Expression equalExpression = new Expression(); - equalExpression.setExpressionObject("EqualMatch"); - equalExpression.setLeft("source.getName()"); - equalExpression.setRight("\"/service/prod/save\""); - result.addFilterExpressions(equalExpression); - - Expression greaterExpression = new Expression(); - greaterExpression.setExpressionObject("GreaterMatch"); - greaterExpression.setLeft("source.getLatency()"); - greaterExpression.setRight("1000"); - result.addFilterExpressions(greaterExpression); - - EntryMethod method = new EntryMethod(); - method.setMethodName("combine"); - method.setArgsExpressions(new LinkedList<>()); - method.getArgsExpressions().add("source.getLatency()"); - method.getArgsExpressions().add("1"); - result.setEntryMethod(method); - result.addPersistentField("summation", "summation", long.class); - result.addPersistentField("count", "count", int.class); - result.addPersistentField("value", "value", long.class); - result.addPersistentField("timeBucket", "time_bucket", long.class); - result.addPersistentField("stringField", "string_field", String.class); - result.setFieldsFromSource(SourceColumnsFactory.getColumns("Service")); - result.generateSerializeFields(); - - return result; - } - - @Test - public void testGenerateMetricsImplementor() throws IOException, TemplateException { - AnalysisResult result = buildResult(); - - OALScripts oalScripts = new OALScripts(); - oalScripts.getMetricsStmts().add(result); - - FileGenerator fileGenerator = new FileGenerator(oalScripts, "."); - StringWriter writer = new StringWriter(); - fileGenerator.generateMetricsImplementor(result, writer); - Assert.assertEquals(readExpectedFile("MetricsImplementorExpected.java"), writer.toString()); - -// fileGenerator.generateMetricsImplementor(result, new OutputStreamWriter(System.out)); - } - - @Test - public void testServiceDispatcher() throws IOException, TemplateException { - AnalysisResult result = buildResult(); - - OALScripts oalScripts = new OALScripts(); - oalScripts.getMetricsStmts().add(result); - - FileGenerator fileGenerator = new FileGenerator(oalScripts, "."); - StringWriter writer = new StringWriter(); - fileGenerator.generateDispatcher(result, writer); - Assert.assertEquals(readExpectedFile("ServiceDispatcherExpected.java"), writer.toString()); - -// fileGenerator.generateDispatcher(result, new OutputStreamWriter(System.out)); - } - - private String readExpectedFile(String filename) throws IOException { - BufferedReader reader = new BufferedReader(new InputStreamReader(FileGenerator.class.getResourceAsStream("/expectedFiles/" + filename))); - - StringBuilder fileContent = new StringBuilder(); - String sCurrentLine; - - while ((sCurrentLine = reader.readLine()) != null) { - fileContent.append(sCurrentLine).append("\n"); - } - - return fileContent.toString(); - } -} 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 7701c13..18b035a 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 @@ -47,8 +47,8 @@ public class DeepAnalysisTest { EntryMethod method = result.getEntryMethod(); Assert.assertEquals("combine", method.getMethodName()); - Assert.assertEquals("source.getLatency()", method.getArgsExpressions().get(0)); - Assert.assertEquals("1", method.getArgsExpressions().get(1)); + Assert.assertEquals("(long)(source.getLatency())", method.getArgsExpressions().get(0)); + Assert.assertEquals("(long)(1)", method.getArgsExpressions().get(1)); List<SourceColumn> source = result.getFieldsFromSource(); Assert.assertEquals(1, source.size()); @@ -71,8 +71,8 @@ public class DeepAnalysisTest { EntryMethod method = result.getEntryMethod(); Assert.assertEquals("combine", method.getMethodName()); - Assert.assertEquals("source.getLatency()", method.getArgsExpressions().get(0)); - Assert.assertEquals("1", method.getArgsExpressions().get(1)); + Assert.assertEquals("(long)(source.getLatency())", method.getArgsExpressions().get(0)); + Assert.assertEquals("(long)(1)", method.getArgsExpressions().get(1)); List<SourceColumn> source = result.getFieldsFromSource(); Assert.assertEquals(3, source.size()); @@ -100,8 +100,8 @@ public class DeepAnalysisTest { EntryMethod method = result.getEntryMethod(); Assert.assertEquals("combine", method.getMethodName()); - Assert.assertEquals("source.getLatency()", method.getArgsExpressions().get(0)); - Assert.assertEquals("1", method.getArgsExpressions().get(1)); + Assert.assertEquals("(long)(source.getLatency())", method.getArgsExpressions().get(0)); + Assert.assertEquals("(long)(1)", method.getArgsExpressions().get(1)); List<SourceColumn> source = result.getFieldsFromSource(); Assert.assertEquals(3, source.size()); 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 7748d4f..35464db 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 @@ -81,9 +81,7 @@ public class ScriptParserTest { Assert.assertEquals("percent", endpointPercent.getAggregationFunctionName()); EntryMethod entryMethod = endpointPercent.getEntryMethod(); List<Object> methodArgsExpressions = entryMethod.getArgsExpressions(); - Assert.assertEquals(3, methodArgsExpressions.size()); - Assert.assertEquals("source.isStatus()", methodArgsExpressions.get(1)); - Assert.assertEquals("true", methodArgsExpressions.get(2)); + Assert.assertEquals(1, methodArgsExpressions.size()); } @Test 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 1f8654f..e88539c 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 @@ -18,9 +18,11 @@ package org.apache.skywalking.oap.server.core.analysis.metrics; -import lombok.*; -import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.*; -import org.apache.skywalking.oap.server.core.analysis.metrics.expression.EqualMatch; +import lombok.Getter; +import lombok.Setter; +import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.Entrance; +import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.Expression; +import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.MetricsFunction; import org.apache.skywalking.oap.server.core.query.sql.Function; import org.apache.skywalking.oap.server.core.storage.annotation.Column; diff --git a/oap-server/server-starter/pom.xml b/oap-server/server-starter/pom.xml index 2f7fd2d..761c377 100644 --- a/oap-server/server-starter/pom.xml +++ b/oap-server/server-starter/pom.xml @@ -225,6 +225,7 @@ <exclude>datasource-settings.properties</exclude> <exclude>endpoint_naming_rules.properties</exclude> <exclude>official_analysis.oal</exclude> + <exclude>scope-meta.yml</exclude> </excludes> </configuration> </plugin> diff --git a/oap-server/server-starter/src/main/assembly/assembly.xml b/oap-server/server-starter/src/main/assembly/assembly.xml index ed116d6..0758aa4 100644 --- a/oap-server/server-starter/src/main/assembly/assembly.xml +++ b/oap-server/server-starter/src/main/assembly/assembly.xml @@ -40,6 +40,8 @@ <include>alarm-settings.yml</include> <include>alarm-settings-sample.yml</include> <include>datasource-settings.properties</include> + <include>official_analysis.oal</include> + <include>scope-meta.yml</include> </includes> </fileSet> <fileSet>
