You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by wu...@apache.org on 2018/09/04 07:43:56 UTC

[incubator-skywalking-oal-tool] branch master updated: Add all sources and generation.

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 78f5818  Add all sources and generation.
78f5818 is described below

commit 78f581844b2b472f2417d29b810817e52ace51a3
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Tue Sep 4 15:43:50 2018 +0800

    Add all sources and generation.
---
 .../oal/tool/output/DispatcherContext.java         |  3 +
 .../skywalking/oal/tool/output/FileGenerator.java  | 41 ++++++++++++++
 .../oal/tool/parser/SourceColumnsFactory.java      | 19 ++++---
 .../EndpointRelationDispatcherTemplate.ftl         | 65 ++++++++++++++++++++++
 .../code-templates/IndicatorImplementor.ftl        |  3 +-
 .../ServiceInstanceDispatcherTemplate.ftl          | 65 ++++++++++++++++++++++
 .../ServiceInstanceRelationDispatcherTemplate.ftl  | 65 ++++++++++++++++++++++
 .../ServiceRelationDispatcherTemplate.ftl          | 65 ++++++++++++++++++++++
 oal-parser/src/test/resources/oal_test.oal         |  8 +++
 9 files changed, 325 insertions(+), 9 deletions(-)

diff --git a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java
index 3a8a6e2..d8f3dbd 100644
--- a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java
+++ b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/output/DispatcherContext.java
@@ -31,6 +31,9 @@ public class DispatcherContext {
     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<>();
diff --git a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java
index 651057b..7e3a17b 100644
--- a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java
+++ b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/output/FileGenerator.java
@@ -53,10 +53,26 @@ public class FileGenerator {
         createFile(file);
         this.generateServiceDispatcher(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));
@@ -109,10 +125,26 @@ public class FileGenerator {
         configuration.getTemplate("ServiceDispatcherTemplate.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);
     }
@@ -137,12 +169,21 @@ public class FileGenerator {
                 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;
diff --git a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java
index c80949d..fa86f0f 100644
--- a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java
+++ b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java
@@ -63,34 +63,37 @@ public class SourceColumnsFactory {
                 return columnList;
             case "ServiceRelation":
                 columnList = new LinkedList<>();
-                SourceColumn sourceService = new SourceColumn("sourceServiceId", "source_service_id", int.class, false);
+                SourceColumn sourceService = new SourceColumn("sourceServiceId", "source_service_id", int.class, true);
                 columnList.add(sourceService);
-                SourceColumn destService = new SourceColumn("destServiceId", "dest_service_id", int.class, false);
+                SourceColumn destService = new SourceColumn("destServiceId", "dest_service_id", int.class, true);
                 columnList.add(destService);
+                return columnList;
             case "ServiceInstanceRelation":
                 columnList = new LinkedList<>();
                 sourceService = new SourceColumn("sourceServiceId", "source_service_id", int.class, false);
                 columnList.add(sourceService);
                 destService = new SourceColumn("destServiceId", "dest_service_id", int.class, false);
                 columnList.add(destService);
-                SourceColumn sourceServiceInstance = new SourceColumn("sourceServiceInstanceId", "source_service_instance_id", int.class, false);
+                SourceColumn sourceServiceInstance = new SourceColumn("sourceServiceInstanceId", "source_service_instance_id", int.class, true);
                 columnList.add(sourceServiceInstance);
-                SourceColumn destServiceInstance = new SourceColumn("destServiceInstanceId", "dest_service_instance_id", int.class, false);
+                SourceColumn destServiceInstance = new SourceColumn("destServiceInstanceId", "dest_service_instance_id", int.class, true);
                 columnList.add(destServiceInstance);
+                return columnList;
             case "EndpointRelation":
                 columnList = new LinkedList<>();
                 SourceColumn sourceEndpointColumn = new SourceColumn("endpointId", "endpoint_id", int.class, true);
                 columnList.add(sourceEndpointColumn);
                 SourceColumn childEndpointColumne  = new SourceColumn("childEndpointId", "child_endpoint_id", int.class, true);
                 columnList.add(childEndpointColumne);
-                sourceService = new SourceColumn("sourceServiceId", "source_service_id", int.class, false);
+                sourceService = new SourceColumn("serviceId", "service_id", int.class, false);
                 columnList.add(sourceService);
-                destService = new SourceColumn("destServiceId", "dest_service_id", int.class, false);
+                destService = new SourceColumn("childServiceId", "child_service_id", int.class, false);
                 columnList.add(destService);
-                sourceServiceInstance = new SourceColumn("sourceServiceInstanceId", "source_service_instance_id", int.class, false);
+                sourceServiceInstance = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false);
                 columnList.add(sourceServiceInstance);
-                destServiceInstance = new SourceColumn("destServiceInstanceId", "dest_service_instance_id", int.class, false);
+                destServiceInstance = new SourceColumn("childServiceInstanceId", "child_service_instance_id", int.class, false);
                 columnList.add(destServiceInstance);
+                return columnList;
             default:
                 throw new IllegalArgumentException("Illegal source :" + source);
         }
diff --git a/oal-parser/src/main/resources/code-templates/EndpointRelationDispatcherTemplate.ftl b/oal-parser/src/main/resources/code-templates/EndpointRelationDispatcherTemplate.ftl
new file mode 100644
index 0000000..18533d3
--- /dev/null
+++ b/oal-parser/src/main/resources/code-templates/EndpointRelationDispatcherTemplate.ftl
@@ -0,0 +1,65 @@
+/*
+ * 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 (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.*;
+        </#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/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl b/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl
index 4be918b..fcc738a 100644
--- a/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl
+++ b/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl
@@ -78,9 +78,10 @@ public class ${metricName}Indicator extends ${indicatorClassName} implements Ala
 <#list fieldsFromSource as sourceField>
     <#if sourceField.isID()>
         if (${sourceField.fieldName} != indicator.${sourceField.fieldName})
+            return false;
     </#if>
 </#list>
-            return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
diff --git a/oal-parser/src/main/resources/code-templates/ServiceInstanceDispatcherTemplate.ftl b/oal-parser/src/main/resources/code-templates/ServiceInstanceDispatcherTemplate.ftl
new file mode 100644
index 0000000..fb07928
--- /dev/null
+++ b/oal-parser/src/main/resources/code-templates/ServiceInstanceDispatcherTemplate.ftl
@@ -0,0 +1,65 @@
+/*
+ * 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.*;
+        </#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/oal-parser/src/main/resources/code-templates/ServiceInstanceRelationDispatcherTemplate.ftl b/oal-parser/src/main/resources/code-templates/ServiceInstanceRelationDispatcherTemplate.ftl
new file mode 100644
index 0000000..2af225a
--- /dev/null
+++ b/oal-parser/src/main/resources/code-templates/ServiceInstanceRelationDispatcherTemplate.ftl
@@ -0,0 +1,65 @@
+/*
+ * 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.*;
+        </#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/oal-parser/src/main/resources/code-templates/ServiceRelationDispatcherTemplate.ftl b/oal-parser/src/main/resources/code-templates/ServiceRelationDispatcherTemplate.ftl
new file mode 100644
index 0000000..4d7ad66
--- /dev/null
+++ b/oal-parser/src/main/resources/code-templates/ServiceRelationDispatcherTemplate.ftl
@@ -0,0 +1,65 @@
+/*
+ * 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.*;
+        </#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/oal-parser/src/test/resources/oal_test.oal b/oal-parser/src/test/resources/oal_test.oal
index 030a5aa..9d90647 100644
--- a/oal-parser/src/test/resources/oal_test.oal
+++ b/oal-parser/src/test/resources/oal_test.oal
@@ -18,12 +18,20 @@
 
 Service_Avg = from(Service.latency).longAvg();
 
+ServiceInstance_RespTime= from(ServiceInstance.latency).longAvg();
+
 endpoint_Avg = from(Endpoint.latency).longAvg();
 
 // endpoint_Avg_for_prod_serv = from(Endpoint.latency).filter(name == "/product/service").longAvg();
 
 endpoint_percent = from(Endpoint.*).percent(status == true);
 
+ServiceRelation_Avg = from(ServiceRelation.latency).longAvg();
+
+ServiceInstanceRelation_Avg = from(ServiceInstanceRelation.latency).longAvg();
+
+EndpointRelation_Avg = from(EndpointRelation.rpcLatency).longAvg();
+
 instance_jvm_cpu = from(ServiceInstanceJVMCPU.usePercent).doubleAvg();
 
 instance_jvm_memory_max = from(ServiceInstanceJVMMemory.max).longAvg();