You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2019/02/24 03:44:24 UTC

[incubator-skywalking] branch scope-refactor updated: Provide new and extendable dispatcher generator tool

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch scope-refactor
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git


The following commit(s) were added to refs/heads/scope-refactor by this push:
     new 4ffd58a  Provide new and extendable dispatcher generator tool
4ffd58a is described below

commit 4ffd58a2c1d48c4fa2ee7c498dad1ef9849d6b14
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Sun Feb 24 11:44:15 2019 +0800

    Provide new and extendable dispatcher generator tool
---
 .../oal/tool/output/AllDispatcherContext.java      |  28 ++++
 .../oal/tool/output/DispatcherContext.java         |  19 +--
 .../skywalking/oal/tool/output/FileGenerator.java  | 160 +++------------------
 .../DatabaseAccessDispatcherTemplate.ftl           |  66 ---------
 ...spatcherTemplate.ftl => DispatcherTemplate.ftl} |  16 +--
 .../code-templates/EndpointDispatcherTemplate.ftl  |  67 ---------
 .../EndpointRelationDispatcherTemplate.ftl         |  66 ---------
 .../code-templates/ServiceDispatcherTemplate.ftl   |  66 ---------
 .../ServiceInstanceDispatcherTemplate.ftl          |  66 ---------
 .../ServiceInstanceJVMCPUDispatcherTemplate.ftl    |  66 ---------
 .../ServiceInstanceJVMGCDispatcherTemplate.ftl     |  66 ---------
 .../ServiceInstanceJVMMemoryDispatcherTemplate.ftl |  66 ---------
 ...viceInstanceJVMMemoryPoolDispatcherTemplate.ftl |  66 ---------
 .../ServiceInstanceRelationDispatcherTemplate.ftl  |  66 ---------
 .../ServiceRelationDispatcherTemplate.ftl          |  66 ---------
 .../oal/tool/output/FileGeneratorTest.java         |   2 +-
 .../IndicatorImplementorExpected.java              |   1 -
 17 files changed, 65 insertions(+), 888 deletions(-)

diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/AllDispatcherContext.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/AllDispatcherContext.java
new file mode 100644
index 0000000..ac11fe7
--- /dev/null
+++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/AllDispatcherContext.java
@@ -0,0 +1,28 @@
+/*
+ * 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.tool.output;
+
+import java.util.*;
+import lombok.*;
+
+@Getter
+@Setter
+public class AllDispatcherContext {
+    private Map<String, DispatcherContext> allContext = new HashMap<>();
+}
diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java
index 9a160f8..8c83610 100644
--- a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java
+++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java
@@ -22,19 +22,10 @@ import java.util.*;
 import lombok.*;
 import org.apache.skywalking.oal.tool.parser.AnalysisResult;
 
-@Getter(AccessLevel.PUBLIC)
-@Setter(AccessLevel.PUBLIC)
+@Getter
+@Setter
 public class DispatcherContext {
-    private List<AnalysisResult> allIndicators = new LinkedList<>();
-    private List<AnalysisResult> serviceIndicators = new LinkedList<>();
-    private List<AnalysisResult> serviceInstanceIndicators = new LinkedList<>();
-    private List<AnalysisResult> endpointIndicators = new LinkedList<>();
-    private List<AnalysisResult> serviceRelationIndicators = new LinkedList<>();
-    private List<AnalysisResult> serviceInstanceRelationIndicators = new LinkedList<>();
-    private List<AnalysisResult> endpointRelationIndicators = new LinkedList<>();
-    private List<AnalysisResult> serviceInstanceJVMCPUIndicators = new LinkedList<>();
-    private List<AnalysisResult> serviceInstanceJVMMemoryIndicators = new LinkedList<>();
-    private List<AnalysisResult> serviceInstanceJVMMemoryPoolIndicators = new LinkedList<>();
-    private List<AnalysisResult> serviceInstanceJVMGCIndicators = new LinkedList<>();
-    private List<AnalysisResult> databaseAccessIndicators = new LinkedList<>();
+    private String source;
+    private String packageName;
+    private List<AnalysisResult> indicators = new ArrayList<>();
 }
diff --git a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java
index 19bb941..469eb97 100644
--- a/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java
+++ b/oap-server/generate-tool/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java
@@ -27,7 +27,7 @@ public class FileGenerator {
     private List<AnalysisResult> results;
     private String outputPath;
     private Configuration configuration;
-    private DispatcherContext dispatcherContext;
+    private AllDispatcherContext allDispatcherContext;
 
     public FileGenerator(List<AnalysisResult> results, String outputPath) {
         this.results = results;
@@ -35,61 +35,19 @@ public class FileGenerator {
         configuration = new Configuration(new Version("2.3.28"));
         configuration.setEncoding(Locale.ENGLISH, "UTF-8");
         configuration.setClassLoaderForTemplateLoading(FileGenerator.class.getClassLoader(), "/code-templates");
-        this.toDispatchers();
+        allDispatcherContext = new AllDispatcherContext();
+        buildDispatcherContext();
     }
 
     public void generate() throws IOException, TemplateException {
         for (AnalysisResult result : results) {
             generate(result, "Indicator.java", writer -> generateIndicatorImplementor(result, writer));
-        }
-
-        File file = new File(outputPath, "generated/all/AllDispatcher.java");
-        createFile(file);
-        this.generateAllDispatcher(new FileWriter(file));
-
-        file = new File(outputPath, "generated/service/ServiceDispatcher.java");
-        createFile(file);
-        this.generateServiceDispatcher(new FileWriter(file));
-
-        file = new File(outputPath, "generated/databaseaccess/DatabaseAccessDispatcher.java");
-        createFile(file);
-        this.generateDatabaseAccessDispatcher(new FileWriter(file));
-
-        file = new File(outputPath, "generated/servicerelation/ServiceRelationDispatcher.java");
-        createFile(file);
-        this.generateServiceRelationDispatcher(new FileWriter(file));
-
-        file = new File(outputPath, "generated/endpoint/EndpointDispatcher.java");
-        createFile(file);
-        this.generateEndpointDispatcher(new FileWriter(file));
-
-        file = new File(outputPath, "generated/endpointrelation/EndpointRelationDispatcher.java");
-        createFile(file);
-        this.generateEndpointRelationDispatcher(new FileWriter(file));
 
-        file = new File(outputPath, "generated/serviceinstance/ServiceInstanceDispatcher.java");
-        createFile(file);
-        this.generateServiceInstanceDispatcher(new FileWriter(file));
-
-        file = new File(outputPath, "generated/serviceinstancerelation/ServiceInstanceRelationDispatcher.java");
-        createFile(file);
-        this.generateServiceInstanceRelationDispatcher(new FileWriter(file));
-
-        file = new File(outputPath, "generated/serviceinstancejvmcpu/ServiceInstanceJVMCPUDispatcher.java");
-        createFile(file);
-        this.generateServiceInstanceJVMCPUDispatcher(new FileWriter(file));
-
-        file = new File(outputPath, "generated/serviceinstancejvmmemory/ServiceInstanceJVMMemoryDispatcher.java");
-        createFile(file);
-        this.generateServiceInstanceJVMMemoryDispatcher(new FileWriter(file));
-
-        file = new File(outputPath, "generated/serviceinstancejvmmemorypool/ServiceInstanceJVMMemoryPoolDispatcher.java");
-        createFile(file);
-        this.generateServiceInstanceJVMMemoryPoolDispatcher(new FileWriter(file));
-
-        file = new File(outputPath, "generated/serviceinstancejvmgc/ServiceInstanceJVMGCDispatcher.java");
-        createFile(file);
-        this.generateServiceInstanceJVMGCDispatcher(new FileWriter(file));
+            String scopeName = result.getSourceName();
+            File file = new File(outputPath, "generated/" + scopeName.toLowerCase() + "/" + scopeName + "Dispatcher.java");
+            createFile(file);
+            generateDispatcher(result, new FileWriter(file));
+        }
     }
 
     private void generate(AnalysisResult result, String fileSuffix,
@@ -123,98 +81,26 @@ public class FileGenerator {
         configuration.getTemplate("IndicatorImplementor.ftl").process(result, output);
     }
 
-    void generateAllDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("AllDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateServiceDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("ServiceDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateDatabaseAccessDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("DatabaseAccessDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateServiceRelationDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("ServiceRelationDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateEndpointDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("EndpointDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateEndpointRelationDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("EndpointRelationDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateServiceInstanceDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("ServiceInstanceDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateServiceInstanceRelationDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("ServiceInstanceRelationDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateServiceInstanceJVMCPUDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("ServiceInstanceJVMCPUDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateServiceInstanceJVMMemoryDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("ServiceInstanceJVMMemoryDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateServiceInstanceJVMMemoryPoolDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl").process(dispatcherContext, output);
-    }
-
-    void generateServiceInstanceJVMGCDispatcher(Writer output) throws IOException, TemplateException {
-        configuration.getTemplate("ServiceInstanceJVMGCDispatcherTemplate.ftl").process(dispatcherContext, 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 toDispatchers() {
-        dispatcherContext = new DispatcherContext();
+    private void buildDispatcherContext() {
         for (AnalysisResult result : results) {
             String sourceName = result.getSourceName();
-            switch (sourceName) {
-                case "All":
-                    dispatcherContext.getAllIndicators().add(result);
-                    break;
-                case "Service":
-                    dispatcherContext.getServiceIndicators().add(result);
-                    break;
-                case "ServiceRelation":
-                    dispatcherContext.getServiceRelationIndicators().add(result);
-                    break;
-                case "ServiceInstance":
-                    dispatcherContext.getServiceInstanceIndicators().add(result);
-                    break;
-                case "ServiceInstanceRelation":
-                    dispatcherContext.getServiceInstanceRelationIndicators().add(result);
-                    break;
-                case "Endpoint":
-                    dispatcherContext.getEndpointIndicators().add(result);
-                    break;
-                case "EndpointRelation":
-                    dispatcherContext.getEndpointRelationIndicators().add(result);
-                    break;
-                case "ServiceInstanceJVMCPU":
-                    dispatcherContext.getServiceInstanceJVMCPUIndicators().add(result);
-                    break;
-                case "ServiceInstanceJVMMemory":
-                    dispatcherContext.getServiceInstanceJVMMemoryIndicators().add(result);
-                    break;
-                case "ServiceInstanceJVMMemoryPool":
-                    dispatcherContext.getServiceInstanceJVMMemoryPoolIndicators().add(result);
-                    break;
-                case "ServiceInstanceJVMGC":
-                    dispatcherContext.getServiceInstanceJVMGCIndicators().add(result);
-                    break;
-                case "DatabaseAccess":
-                    dispatcherContext.getDatabaseAccessIndicators().add(result);
-                    break;
-                default:
-                    throw new RuntimeException("Unexpected dispatcher");
+
+            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.getIndicators().add(result);
         }
     }
 }
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/DatabaseAccessDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/DatabaseAccessDispatcherTemplate.ftl
deleted file mode 100644
index 7bfb7b3..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/DatabaseAccessDispatcherTemplate.ftl
+++ /dev/null
@@ -1,66 +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.databaseaccess;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (databaseAccessIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list databaseAccessIndicators as indicator>
-        <#if indicator.filterExpressions??>
-            import org.apache.skywalking.oap.server.core.analysis.indicator.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 DatabaseAccessDispatcher implements SourceDispatcher<DatabaseAccess> {
-
-    @Override public void dispatch(DatabaseAccess source) {
-    <#list databaseAccessIndicators as indicator>
-        do${indicator.metricName}(source);
-    </#list>
-    }
-
-    <#list databaseAccessIndicators as indicator>
-    private void do${indicator.metricName}(DatabaseAccess source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-        <#if indicator.filterExpressions??>
-            <#list indicator.filterExpressions as filterExpression>
-                if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-                return;
-                }
-            </#list>
-        </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-        <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-        </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-    </#list>
-}
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/AllDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/DispatcherTemplate.ftl
similarity index 87%
rename from oap-server/generate-tool/src/main/resources/code-templates/AllDispatcherTemplate.ftl
rename to oap-server/generate-tool/src/main/resources/code-templates/DispatcherTemplate.ftl
index 95ff276..b6068ca 100644
--- a/oap-server/generate-tool/src/main/resources/code-templates/AllDispatcherTemplate.ftl
+++ b/oap-server/generate-tool/src/main/resources/code-templates/DispatcherTemplate.ftl
@@ -16,12 +16,12 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.all;
+package org.apache.skywalking.oap.server.core.analysis.generated.${packageName};
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (allIndicators?size>0)>
+<#if (indicators?size>0)>
 import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list allIndicators as indicator>
+    <#list indicators as indicator>
         <#if indicator.filterExpressions??>
 import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*;
             <#break>
@@ -35,16 +35,16 @@ import org.apache.skywalking.oap.server.core.source.*;
  *
  * @author Observability Analysis Language code generator
  */
-public class AllDispatcher implements SourceDispatcher<All> {
+public class ${source}Dispatcher implements SourceDispatcher<${source}> {
 
-    @Override public void dispatch(All source) {
-<#list allIndicators as indicator>
+    @Override public void dispatch(${source} source) {
+<#list indicators as indicator>
         do${indicator.metricName}(source);
 </#list>
     }
 
-<#list allIndicators as indicator>
-    private void do${indicator.metricName}(All source) {
+<#list indicators as indicator>
+    private void do${indicator.metricName}(${source} source) {
         ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
 
     <#if indicator.filterExpressions??>
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl
deleted file mode 100644
index 468100a..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl
+++ /dev/null
@@ -1,67 +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.endpoint;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (endpointIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list endpointIndicators as indicator>
-        <#if indicator.filterExpressions??>
-import org.apache.skywalking.oap.server.core.analysis.indicator.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 EndpointDispatcher implements SourceDispatcher<Endpoint> {
-
-    @Override public void dispatch(Endpoint source) {
-<#list endpointIndicators as indicator>
-        do${indicator.metricName}(source);
-</#list>
-    }
-
-<#list endpointIndicators as indicator>
-    private void do${indicator.metricName}(Endpoint source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-    <#if indicator.filterExpressions??>
-        <#list indicator.filterExpressions as filterExpression>
-        if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-            return;
-        }
-        </#list>
-    </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-    <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-    </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-
-</#list>
-}
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/EndpointRelationDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/EndpointRelationDispatcherTemplate.ftl
deleted file mode 100644
index 5b68f81..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/EndpointRelationDispatcherTemplate.ftl
+++ /dev/null
@@ -1,66 +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.endpointrelation;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (endpointRelationIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list endpointRelationIndicators as indicator>
-        <#if indicator.filterExpressions??>
-import org.apache.skywalking.oap.server.core.analysis.indicator.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 EndpointRelationDispatcher implements SourceDispatcher<EndpointRelation> {
-
-    @Override public void dispatch(EndpointRelation source) {
-<#list endpointRelationIndicators as indicator>
-        do${indicator.metricName}(source);
-</#list>
-    }
-
-<#list endpointRelationIndicators as indicator>
-    private void do${indicator.metricName}(EndpointRelation source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-    <#if indicator.filterExpressions??>
-        <#list indicator.filterExpressions as filterExpression>
-        if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-            return;
-        }
-        </#list>
-    </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-    <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-    </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-</#list>
-}
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl
deleted file mode 100644
index 78b908d..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl
+++ /dev/null
@@ -1,66 +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.service;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list serviceIndicators as indicator>
-        <#if indicator.filterExpressions??>
-import org.apache.skywalking.oap.server.core.analysis.indicator.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 ServiceDispatcher implements SourceDispatcher<Service> {
-
-    @Override public void dispatch(Service source) {
-<#list serviceIndicators as indicator>
-        do${indicator.metricName}(source);
-</#list>
-    }
-
-<#list serviceIndicators as indicator>
-    private void do${indicator.metricName}(Service source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-    <#if indicator.filterExpressions??>
-        <#list indicator.filterExpressions as filterExpression>
-        if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-            return;
-        }
-        </#list>
-    </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-    <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-    </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-</#list>
-}
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceDispatcherTemplate.ftl
deleted file mode 100644
index 9ea53a4..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceDispatcherTemplate.ftl
+++ /dev/null
@@ -1,66 +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.serviceinstance;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceInstanceIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list serviceInstanceIndicators as indicator>
-        <#if indicator.filterExpressions??>
-import org.apache.skywalking.oap.server.core.analysis.indicator.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 ServiceInstanceDispatcher implements SourceDispatcher<ServiceInstance> {
-    
-    @Override public void dispatch(ServiceInstance source) {
-<#list serviceInstanceIndicators as indicator>
-        do${indicator.metricName}(source);
-</#list>
-    }
-
-<#list serviceInstanceIndicators as indicator>
-    private void do${indicator.metricName}(ServiceInstance source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-    <#if indicator.filterExpressions??>
-        <#list indicator.filterExpressions as filterExpression>
-        if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-            return;
-        }
-        </#list>
-    </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-    <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-    </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-</#list>
-}
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl
deleted file mode 100644
index d1d4913..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl
+++ /dev/null
@@ -1,66 +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.serviceinstancejvmcpu;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceInstanceJVMCPUIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list serviceInstanceJVMCPUIndicators as indicator>
-        <#if indicator.filterExpressions??>
-import org.apache.skywalking.oap.server.core.analysis.indicator.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 ServiceInstanceJVMCPUDispatcher implements SourceDispatcher<ServiceInstanceJVMCPU> {
-    
-    @Override public void dispatch(ServiceInstanceJVMCPU source) {
-<#list serviceInstanceJVMCPUIndicators as indicator>
-        do${indicator.metricName}(source);
-</#list>
-    }
-
-<#list serviceInstanceJVMCPUIndicators as indicator>
-    private void do${indicator.metricName}(ServiceInstanceJVMCPU source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-    <#if indicator.filterExpressions??>
-        <#list indicator.filterExpressions as filterExpression>
-        if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-            return;
-        }
-        </#list>
-    </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-    <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-    </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-</#list>
-}
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl
deleted file mode 100644
index 7ffb0b3..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl
+++ /dev/null
@@ -1,66 +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.serviceinstancejvmgc;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceInstanceJVMGCIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list serviceInstanceJVMGCIndicators as indicator>
-        <#if indicator.filterExpressions??>
-import org.apache.skywalking.oap.server.core.analysis.indicator.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 ServiceInstanceJVMGCDispatcher implements SourceDispatcher<ServiceInstanceJVMGC> {
-
-    @Override public void dispatch(ServiceInstanceJVMGC source) {
-<#list serviceInstanceJVMGCIndicators as indicator>
-        do${indicator.metricName}(source);
-</#list>
-    }
-
-<#list serviceInstanceJVMGCIndicators as indicator>
-    private void do${indicator.metricName}(ServiceInstanceJVMGC source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-    <#if indicator.filterExpressions??>
-        <#list indicator.filterExpressions as filterExpression>
-        if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-            return;
-        }
-        </#list>
-    </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-    <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-    </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-</#list>
-}
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl
deleted file mode 100644
index 3df4b88..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl
+++ /dev/null
@@ -1,66 +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.serviceinstancejvmmemory;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceInstanceJVMMemoryIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list serviceInstanceJVMMemoryIndicators as indicator>
-        <#if indicator.filterExpressions??>
-import org.apache.skywalking.oap.server.core.analysis.indicator.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 ServiceInstanceJVMMemoryDispatcher implements SourceDispatcher<ServiceInstanceJVMMemory> {
-
-    @Override public void dispatch(ServiceInstanceJVMMemory source) {
-<#list serviceInstanceJVMMemoryIndicators as indicator>
-        do${indicator.metricName}(source);
-</#list>
-    }
-
-<#list serviceInstanceJVMMemoryIndicators as indicator>
-    private void do${indicator.metricName}(ServiceInstanceJVMMemory source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-    <#if indicator.filterExpressions??>
-        <#list indicator.filterExpressions as filterExpression>
-        if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-            return;
-        }
-        </#list>
-    </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-    <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-    </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-</#list>
-}
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl
deleted file mode 100644
index 505e35e..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl
+++ /dev/null
@@ -1,66 +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.serviceinstancejvmmemorypool;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceInstanceJVMMemoryPoolIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list serviceInstanceJVMMemoryPoolIndicators as indicator>
-        <#if indicator.filterExpressions??>
-import org.apache.skywalking.oap.server.core.analysis.indicator.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 ServiceInstanceJVMMemoryPoolDispatcher implements SourceDispatcher<ServiceInstanceJVMMemoryPool> {
-
-    @Override public void dispatch(ServiceInstanceJVMMemoryPool source) {
-<#list serviceInstanceJVMMemoryPoolIndicators as indicator>
-        do${indicator.metricName}(source);
-</#list>
-    }
-
-<#list serviceInstanceJVMMemoryPoolIndicators as indicator>
-    private void do${indicator.metricName}(ServiceInstanceJVMMemoryPool source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-    <#if indicator.filterExpressions??>
-        <#list indicator.filterExpressions as filterExpression>
-        if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-            return;
-        }
-        </#list>
-    </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-    <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-    </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-</#list>
-}
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceRelationDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceRelationDispatcherTemplate.ftl
deleted file mode 100644
index c7a485a..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceInstanceRelationDispatcherTemplate.ftl
+++ /dev/null
@@ -1,66 +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.serviceinstancerelation;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceInstanceRelationIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list serviceInstanceRelationIndicators as indicator>
-        <#if indicator.filterExpressions??>
-import org.apache.skywalking.oap.server.core.analysis.indicator.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 ServiceInstanceRelationDispatcher implements SourceDispatcher<ServiceInstanceRelation> {
-
-    @Override public void dispatch(ServiceInstanceRelation source) {
-<#list serviceInstanceRelationIndicators as indicator>
-        do${indicator.metricName}(source);
-</#list>
-    }
-
-<#list serviceInstanceRelationIndicators as indicator>
-    private void do${indicator.metricName}(ServiceInstanceRelation source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-    <#if indicator.filterExpressions??>
-        <#list indicator.filterExpressions as filterExpression>
-        if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-            return;
-        }
-        </#list>
-    </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-    <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-    </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-</#list>
-}
diff --git a/oap-server/generate-tool/src/main/resources/code-templates/ServiceRelationDispatcherTemplate.ftl b/oap-server/generate-tool/src/main/resources/code-templates/ServiceRelationDispatcherTemplate.ftl
deleted file mode 100644
index 42fd47e..0000000
--- a/oap-server/generate-tool/src/main/resources/code-templates/ServiceRelationDispatcherTemplate.ftl
+++ /dev/null
@@ -1,66 +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.servicerelation;
-
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceRelationIndicators?size>0)>
-import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-    <#list serviceRelationIndicators as indicator>
-        <#if indicator.filterExpressions??>
-import org.apache.skywalking.oap.server.core.analysis.indicator.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 ServiceRelationDispatcher implements SourceDispatcher<ServiceRelation> {
-
-    @Override public void dispatch(ServiceRelation source) {
-<#list serviceRelationIndicators as indicator>
-        do${indicator.metricName}(source);
-</#list>
-    }
-
-<#list serviceRelationIndicators as indicator>
-    private void do${indicator.metricName}(ServiceRelation source) {
-        ${indicator.metricName}Indicator indicator = new ${indicator.metricName}Indicator();
-
-    <#if indicator.filterExpressions??>
-        <#list indicator.filterExpressions as filterExpression>
-        if (!new ${filterExpression.expressionObject}().setLeft(${filterExpression.left}).setRight(${filterExpression.right}).match()) {
-            return;
-        }
-        </#list>
-    </#if>
-
-        indicator.setTimeBucket(source.getTimeBucket());
-    <#list indicator.fieldsFromSource as field>
-        indicator.${field.fieldSetter}(source.${field.fieldGetter}());
-    </#list>
-        indicator.${indicator.entryMethod.methodName}(<#list indicator.entryMethod.argsExpressions as arg>${arg}<#if arg_has_next>, </#if></#list>);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-</#list>
-}
diff --git a/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/output/FileGeneratorTest.java b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/output/FileGeneratorTest.java
index cd7847d..1740a1d 100644
--- a/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/output/FileGeneratorTest.java
+++ b/oap-server/generate-tool/src/test/java/org/apache/skywalking/oal/tool/output/FileGeneratorTest.java
@@ -93,7 +93,7 @@ public class FileGeneratorTest {
 
         FileGenerator fileGenerator = new FileGenerator(results, ".");
         StringWriter writer = new StringWriter();
-        fileGenerator.generateServiceDispatcher(writer);
+        fileGenerator.generateDispatcher(result, writer);
         Assert.assertEquals(readExpectedFile("ServiceDispatcherExpected.java"), writer.toString());
 
         //fileGenerator.generateServiceDispatcher(new OutputStreamWriter(System.out));
diff --git a/oap-server/generate-tool/src/test/resources/expectedFiles/IndicatorImplementorExpected.java b/oap-server/generate-tool/src/test/resources/expectedFiles/IndicatorImplementorExpected.java
index 4f825c8..461553b 100644
--- a/oap-server/generate-tool/src/test/resources/expectedFiles/IndicatorImplementorExpected.java
+++ b/oap-server/generate-tool/src/test/resources/expectedFiles/IndicatorImplementorExpected.java
@@ -29,7 +29,6 @@ import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.storage.annotation.*;
 import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
-import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 
 /**
  * This class is auto generated. Please don't change this class manually.