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

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

commit 4f2db733fe1400503be58a4c054a2afdda990a26
Author: Wu Sheng <[email protected]>
AuthorDate: Tue Sep 4 15:42:31 2018 +0800

    Fix all sources and sourceDispatchers.
---
 .../server/core/analysis/DispatcherManager.java    | 12 ++++
 .../generated/endpoint/EndpointAvgIndicator.java   |  1 +
 .../endpoint/EndpointPercentIndicator.java         |  1 +
 .../EndpointRelationAvgIndicator.java}             | 66 ++++++++++++++--------
 .../EndpointRelationDispatcher.java                | 50 ++++++++++++++++
 .../generated/service/ServiceAvgIndicator.java     |  1 +
 .../serviceinstance/ServiceInstanceDispatcher.java | 46 +++++++++++++++
 .../ServiceInstanceRespTimeIndicator.java}         | 28 ++++-----
 .../InstanceJvmCpuIndicator.java                   |  1 +
 .../InstanceJvmYoungGcTimeIndicator.java           |  1 +
 .../InstanceJvmMemoryMaxIndicator.java             |  1 +
 .../InstanceJvmMemoryPoolMaxIndicator.java         |  1 +
 .../ServiceInstanceRelationAvgIndicator.java}      | 58 ++++++++++++-------
 .../ServiceInstanceRelationDispatcher.java         | 48 ++++++++++++++++
 .../ServiceRelationAvgIndicator.java}              | 49 ++++++++--------
 .../servicerelation/ServiceRelationDispatcher.java | 46 +++++++++++++++
 .../oap/server/core/source/EndpointRelation.java   | 10 ++++
 .../oap/server/core/source/ServiceInstance.java    |  1 +
 .../core/source/ServiceInstanceRelation.java       |  2 +
 .../listener/endpoint/MultiScopesSpanListener.java | 11 +++-
 .../parser/listener/endpoint/SourceBuilder.java    | 11 ++++
 21 files changed, 364 insertions(+), 81 deletions(-)

diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java
index b8953c6..0d0b4c0 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java
@@ -20,10 +20,15 @@ package org.apache.skywalking.oap.server.core.analysis;
 
 import java.util.*;
 import 
org.apache.skywalking.oap.server.core.analysis.generated.endpoint.EndpointDispatcher;
+import 
org.apache.skywalking.oap.server.core.analysis.generated.endpointrelation.EndpointRelationDispatcher;
+import 
org.apache.skywalking.oap.server.core.analysis.generated.service.ServiceDispatcher;
+import 
org.apache.skywalking.oap.server.core.analysis.generated.serviceinstance.ServiceInstanceDispatcher;
 import 
org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmcpu.ServiceInstanceJVMCPUDispatcher;
 import 
org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmgc.ServiceInstanceJVMGCDispatcher;
 import 
org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemory.ServiceInstanceJVMMemoryDispatcher;
 import 
org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemorypool.ServiceInstanceJVMMemoryPoolDispatcher;
+import 
org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancerelation.ServiceInstanceRelationDispatcher;
+import 
org.apache.skywalking.oap.server.core.analysis.generated.servicerelation.ServiceRelationDispatcher;
 import org.apache.skywalking.oap.server.core.source.Scope;
 import org.slf4j.*;
 
@@ -38,8 +43,15 @@ public class DispatcherManager {
 
     public DispatcherManager() {
         this.dispatcherMap = new HashMap<>();
+
+        this.dispatcherMap.put(Scope.Service, new ServiceDispatcher());
+        this.dispatcherMap.put(Scope.ServiceInstance, new 
ServiceInstanceDispatcher());
         this.dispatcherMap.put(Scope.Endpoint, new EndpointDispatcher());
 
+        this.dispatcherMap.put(Scope.ServiceRelation, new 
ServiceRelationDispatcher());
+        this.dispatcherMap.put(Scope.ServiceInstanceRelation, new 
ServiceInstanceRelationDispatcher());
+        this.dispatcherMap.put(Scope.EndpointRelation, new 
EndpointRelationDispatcher());
+
         this.dispatcherMap.put(Scope.ServiceInstanceJVMCPU, new 
ServiceInstanceJVMCPUDispatcher());
         this.dispatcherMap.put(Scope.ServiceInstanceJVMGC, new 
ServiceInstanceJVMGCDispatcher());
         this.dispatcherMap.put(Scope.ServiceInstanceJVMMemory, new 
ServiceInstanceJVMMemoryDispatcher());
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
index 2826b05..9ec7a6d 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
@@ -69,6 +69,7 @@ public class EndpointAvgIndicator extends LongAvgIndicator 
implements AlarmSuppo
         EndpointAvgIndicator indicator = (EndpointAvgIndicator)obj;
         if (id != indicator.id)
             return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
index 43bbf9f..afd5dbf 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
@@ -69,6 +69,7 @@ public class EndpointPercentIndicator extends 
PercentIndicator implements AlarmS
         EndpointPercentIndicator indicator = (EndpointPercentIndicator)obj;
         if (id != indicator.id)
             return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationAvgIndicator.java
similarity index 58%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
copy to 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationAvgIndicator.java
index 2826b05..5b1f424 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationAvgIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
+package 
org.apache.skywalking.oap.server.core.analysis.generated.endpointrelation;
 
 import java.util.*;
 import lombok.*;
@@ -38,22 +38,27 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_avg", builder = 
EndpointAvgIndicator.Builder.class)
-public class EndpointAvgIndicator extends LongAvgIndicator implements 
AlarmSupported {
+@StorageEntity(name = "endpointrelation_avg", builder = 
EndpointRelationAvgIndicator.Builder.class)
+public class EndpointRelationAvgIndicator extends LongAvgIndicator implements 
AlarmSupported {
 
-    @Setter @Getter @Column(columnName = "id") private int id;
+    @Setter @Getter @Column(columnName = "endpoint_id") private int endpointId;
+    @Setter @Getter @Column(columnName = "child_endpoint_id") private int 
childEndpointId;
     @Setter @Getter @Column(columnName = "service_id") private int serviceId;
+    @Setter @Getter @Column(columnName = "child_service_id") private int 
childServiceId;
     @Setter @Getter @Column(columnName = "service_instance_id") private int 
serviceInstanceId;
+    @Setter @Getter @Column(columnName = "child_service_instance_id") private 
int childServiceInstanceId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
-        splitJointId += Const.ID_SPLIT + String.valueOf(id);
+        splitJointId += Const.ID_SPLIT + String.valueOf(endpointId);
+        splitJointId += Const.ID_SPLIT + String.valueOf(childEndpointId);
         return splitJointId;
     }
 
     @Override public int hashCode() {
         int result = 17;
-        result = 31 * result + id;
+        result = 31 * result + endpointId;
+        result = 31 * result + childEndpointId;
         result = 31 * result + (int)getTimeBucket();
         return result;
     }
@@ -66,9 +71,12 @@ public class EndpointAvgIndicator extends LongAvgIndicator 
implements AlarmSuppo
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointAvgIndicator indicator = (EndpointAvgIndicator)obj;
-        if (id != indicator.id)
+        EndpointRelationAvgIndicator indicator = 
(EndpointRelationAvgIndicator)obj;
+        if (endpointId != indicator.endpointId)
             return false;
+        if (childEndpointId != indicator.childEndpointId)
+            return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
@@ -83,10 +91,13 @@ public class EndpointAvgIndicator extends LongAvgIndicator 
implements AlarmSuppo
         remoteBuilder.setDataLongs(2, getTimeBucket());
 
 
-        remoteBuilder.setDataIntegers(0, getId());
-        remoteBuilder.setDataIntegers(1, getServiceId());
-        remoteBuilder.setDataIntegers(2, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(3, getCount());
+        remoteBuilder.setDataIntegers(0, getEndpointId());
+        remoteBuilder.setDataIntegers(1, getChildEndpointId());
+        remoteBuilder.setDataIntegers(2, getServiceId());
+        remoteBuilder.setDataIntegers(3, getChildServiceId());
+        remoteBuilder.setDataIntegers(4, getServiceInstanceId());
+        remoteBuilder.setDataIntegers(5, getChildServiceInstanceId());
+        remoteBuilder.setDataIntegers(6, getCount());
 
         return remoteBuilder;
     }
@@ -98,23 +109,29 @@ public class EndpointAvgIndicator extends LongAvgIndicator 
implements AlarmSuppo
         setTimeBucket(remoteData.getDataLongs(2));
 
 
-        setId(remoteData.getDataIntegers(0));
-        setServiceId(remoteData.getDataIntegers(1));
-        setServiceInstanceId(remoteData.getDataIntegers(2));
-        setCount(remoteData.getDataIntegers(3));
+        setEndpointId(remoteData.getDataIntegers(0));
+        setChildEndpointId(remoteData.getDataIntegers(1));
+        setServiceId(remoteData.getDataIntegers(2));
+        setChildServiceId(remoteData.getDataIntegers(3));
+        setServiceInstanceId(remoteData.getDataIntegers(4));
+        setChildServiceInstanceId(remoteData.getDataIntegers(5));
+        setCount(remoteData.getDataIntegers(6));
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("endpoint_Avg", Scope.Endpoint, id, serviceId, 
serviceInstanceId);
+        return new AlarmMeta("EndpointRelation_Avg", Scope.EndpointRelation, 
endpointId, childEndpointId, serviceId, childServiceId, serviceInstanceId, 
childServiceInstanceId);
     }
 
-    public static class Builder implements 
StorageBuilder<EndpointAvgIndicator> {
+    public static class Builder implements 
StorageBuilder<EndpointRelationAvgIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointAvgIndicator 
storageData) {
+        @Override public Map<String, Object> 
data2Map(EndpointRelationAvgIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
-            map.put("id", storageData.getId());
+            map.put("endpoint_id", storageData.getEndpointId());
+            map.put("child_endpoint_id", storageData.getChildEndpointId());
             map.put("service_id", storageData.getServiceId());
+            map.put("child_service_id", storageData.getChildServiceId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
+            map.put("child_service_instance_id", 
storageData.getChildServiceInstanceId());
             map.put("summation", storageData.getSummation());
             map.put("count", storageData.getCount());
             map.put("value", storageData.getValue());
@@ -122,11 +139,14 @@ public class EndpointAvgIndicator extends 
LongAvgIndicator implements AlarmSuppo
             return map;
         }
 
-        @Override public EndpointAvgIndicator map2Data(Map<String, Object> 
dbMap) {
-            EndpointAvgIndicator indicator = new EndpointAvgIndicator();
-            indicator.setId(((Number)dbMap.get("id")).intValue());
+        @Override public EndpointRelationAvgIndicator map2Data(Map<String, 
Object> dbMap) {
+            EndpointRelationAvgIndicator indicator = new 
EndpointRelationAvgIndicator();
+            
indicator.setEndpointId(((Number)dbMap.get("endpoint_id")).intValue());
+            
indicator.setChildEndpointId(((Number)dbMap.get("child_endpoint_id")).intValue());
             
indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
+            
indicator.setChildServiceId(((Number)dbMap.get("child_service_id")).intValue());
             
indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
+            
indicator.setChildServiceInstanceId(((Number)dbMap.get("child_service_instance_id")).intValue());
             
indicator.setSummation(((Number)dbMap.get("summation")).longValue());
             indicator.setCount(((Number)dbMap.get("count")).intValue());
             indicator.setValue(((Number)dbMap.get("value")).longValue());
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationDispatcher.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationDispatcher.java
new file mode 100644
index 0000000..4d3d1ca
--- /dev/null
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationDispatcher.java
@@ -0,0 +1,50 @@
+/*
+ * 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;
+import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+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) {
+        doEndpointRelationAvg(source);
+    }
+
+    private void doEndpointRelationAvg(EndpointRelation source) {
+        EndpointRelationAvgIndicator indicator = new 
EndpointRelationAvgIndicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEndpointId(source.getEndpointId());
+        indicator.setChildEndpointId(source.getChildEndpointId());
+        indicator.setServiceId(source.getServiceId());
+        indicator.setChildServiceId(source.getChildServiceId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        
indicator.setChildServiceInstanceId(source.getChildServiceInstanceId());
+        indicator.combine(source.getRpcLatency(), 1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+}
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceAvgIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceAvgIndicator.java
index aef5f60..e84c439 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceAvgIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceAvgIndicator.java
@@ -67,6 +67,7 @@ public class ServiceAvgIndicator extends LongAvgIndicator 
implements AlarmSuppor
         ServiceAvgIndicator indicator = (ServiceAvgIndicator)obj;
         if (id != indicator.id)
             return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceDispatcher.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceDispatcher.java
new file mode 100644
index 0000000..471351e
--- /dev/null
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceDispatcher.java
@@ -0,0 +1,46 @@
+/*
+ * 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;
+import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+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) {
+        doServiceInstanceRespTime(source);
+    }
+
+    private void doServiceInstanceRespTime(ServiceInstance source) {
+        ServiceInstanceRespTimeIndicator indicator = new 
ServiceInstanceRespTimeIndicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setId(source.getId());
+        indicator.setServiceId(source.getServiceId());
+        indicator.combine(source.getLatency(), 1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+}
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceRespTimeIndicator.java
similarity index 78%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
copy to 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceRespTimeIndicator.java
index 2826b05..ac68e5b 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceRespTimeIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
+package 
org.apache.skywalking.oap.server.core.analysis.generated.serviceinstance;
 
 import java.util.*;
 import lombok.*;
@@ -38,12 +38,11 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_avg", builder = 
EndpointAvgIndicator.Builder.class)
-public class EndpointAvgIndicator extends LongAvgIndicator implements 
AlarmSupported {
+@StorageEntity(name = "serviceinstance_resptime", builder = 
ServiceInstanceRespTimeIndicator.Builder.class)
+public class ServiceInstanceRespTimeIndicator extends LongAvgIndicator 
implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "id") private int id;
     @Setter @Getter @Column(columnName = "service_id") private int serviceId;
-    @Setter @Getter @Column(columnName = "service_instance_id") private int 
serviceInstanceId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
@@ -66,9 +65,10 @@ public class EndpointAvgIndicator extends LongAvgIndicator 
implements AlarmSuppo
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointAvgIndicator indicator = (EndpointAvgIndicator)obj;
+        ServiceInstanceRespTimeIndicator indicator = 
(ServiceInstanceRespTimeIndicator)obj;
         if (id != indicator.id)
             return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
@@ -85,8 +85,7 @@ public class EndpointAvgIndicator extends LongAvgIndicator 
implements AlarmSuppo
 
         remoteBuilder.setDataIntegers(0, getId());
         remoteBuilder.setDataIntegers(1, getServiceId());
-        remoteBuilder.setDataIntegers(2, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(3, getCount());
+        remoteBuilder.setDataIntegers(2, getCount());
 
         return remoteBuilder;
     }
@@ -100,21 +99,19 @@ public class EndpointAvgIndicator extends LongAvgIndicator 
implements AlarmSuppo
 
         setId(remoteData.getDataIntegers(0));
         setServiceId(remoteData.getDataIntegers(1));
-        setServiceInstanceId(remoteData.getDataIntegers(2));
-        setCount(remoteData.getDataIntegers(3));
+        setCount(remoteData.getDataIntegers(2));
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("endpoint_Avg", Scope.Endpoint, id, serviceId, 
serviceInstanceId);
+        return new AlarmMeta("ServiceInstance_RespTime", 
Scope.ServiceInstance, id, serviceId);
     }
 
-    public static class Builder implements 
StorageBuilder<EndpointAvgIndicator> {
+    public static class Builder implements 
StorageBuilder<ServiceInstanceRespTimeIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointAvgIndicator 
storageData) {
+        @Override public Map<String, Object> 
data2Map(ServiceInstanceRespTimeIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("id", storageData.getId());
             map.put("service_id", storageData.getServiceId());
-            map.put("service_instance_id", storageData.getServiceInstanceId());
             map.put("summation", storageData.getSummation());
             map.put("count", storageData.getCount());
             map.put("value", storageData.getValue());
@@ -122,11 +119,10 @@ public class EndpointAvgIndicator extends 
LongAvgIndicator implements AlarmSuppo
             return map;
         }
 
-        @Override public EndpointAvgIndicator map2Data(Map<String, Object> 
dbMap) {
-            EndpointAvgIndicator indicator = new EndpointAvgIndicator();
+        @Override public ServiceInstanceRespTimeIndicator map2Data(Map<String, 
Object> dbMap) {
+            ServiceInstanceRespTimeIndicator indicator = new 
ServiceInstanceRespTimeIndicator();
             indicator.setId(((Number)dbMap.get("id")).intValue());
             
indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
-            
indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
             
indicator.setSummation(((Number)dbMap.get("summation")).longValue());
             indicator.setCount(((Number)dbMap.get("count")).intValue());
             indicator.setValue(((Number)dbMap.get("value")).longValue());
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmcpu/InstanceJvmCpuIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmcpu/InstanceJvmCpuIndicator.java
index a2e3f9a..409051b 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmcpu/InstanceJvmCpuIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmcpu/InstanceJvmCpuIndicator.java
@@ -68,6 +68,7 @@ public class InstanceJvmCpuIndicator extends 
DoubleAvgIndicator implements Alarm
         InstanceJvmCpuIndicator indicator = (InstanceJvmCpuIndicator)obj;
         if (id != indicator.id)
             return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmYoungGcTimeIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmYoungGcTimeIndicator.java
index 1c20889..ce27456 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmYoungGcTimeIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmYoungGcTimeIndicator.java
@@ -68,6 +68,7 @@ public class InstanceJvmYoungGcTimeIndicator extends 
LongAvgIndicator implements
         InstanceJvmYoungGcTimeIndicator indicator = 
(InstanceJvmYoungGcTimeIndicator)obj;
         if (id != indicator.id)
             return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
index 643fee2..979b972 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
@@ -68,6 +68,7 @@ public class InstanceJvmMemoryMaxIndicator extends 
LongAvgIndicator implements A
         InstanceJvmMemoryMaxIndicator indicator = 
(InstanceJvmMemoryMaxIndicator)obj;
         if (id != indicator.id)
             return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/InstanceJvmMemoryPoolMaxIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/InstanceJvmMemoryPoolMaxIndicator.java
index a92611c..294c707 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/InstanceJvmMemoryPoolMaxIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/InstanceJvmMemoryPoolMaxIndicator.java
@@ -68,6 +68,7 @@ public class InstanceJvmMemoryPoolMaxIndicator extends 
LongAvgIndicator implemen
         InstanceJvmMemoryPoolMaxIndicator indicator = 
(InstanceJvmMemoryPoolMaxIndicator)obj;
         if (id != indicator.id)
             return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceAvgIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancerelation/ServiceInstanceRelationAvgIndicator.java
similarity index 55%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceAvgIndicator.java
copy to 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancerelation/ServiceInstanceRelationAvgIndicator.java
index aef5f60..aea745a 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceAvgIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancerelation/ServiceInstanceRelationAvgIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.service;
+package 
org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancerelation;
 
 import java.util.*;
 import lombok.*;
@@ -38,20 +38,25 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "service_avg", builder = 
ServiceAvgIndicator.Builder.class)
-public class ServiceAvgIndicator extends LongAvgIndicator implements 
AlarmSupported {
+@StorageEntity(name = "serviceinstancerelation_avg", builder = 
ServiceInstanceRelationAvgIndicator.Builder.class)
+public class ServiceInstanceRelationAvgIndicator extends LongAvgIndicator 
implements AlarmSupported {
 
-    @Setter @Getter @Column(columnName = "id") private int id;
+    @Setter @Getter @Column(columnName = "source_service_id") private int 
sourceServiceId;
+    @Setter @Getter @Column(columnName = "dest_service_id") private int 
destServiceId;
+    @Setter @Getter @Column(columnName = "source_service_instance_id") private 
int sourceServiceInstanceId;
+    @Setter @Getter @Column(columnName = "dest_service_instance_id") private 
int destServiceInstanceId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
-        splitJointId += Const.ID_SPLIT + String.valueOf(id);
+        splitJointId += Const.ID_SPLIT + 
String.valueOf(sourceServiceInstanceId);
+        splitJointId += Const.ID_SPLIT + String.valueOf(destServiceInstanceId);
         return splitJointId;
     }
 
     @Override public int hashCode() {
         int result = 17;
-        result = 31 * result + id;
+        result = 31 * result + sourceServiceInstanceId;
+        result = 31 * result + destServiceInstanceId;
         result = 31 * result + (int)getTimeBucket();
         return result;
     }
@@ -64,9 +69,12 @@ public class ServiceAvgIndicator extends LongAvgIndicator 
implements AlarmSuppor
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceAvgIndicator indicator = (ServiceAvgIndicator)obj;
-        if (id != indicator.id)
+        ServiceInstanceRelationAvgIndicator indicator = 
(ServiceInstanceRelationAvgIndicator)obj;
+        if (sourceServiceInstanceId != indicator.sourceServiceInstanceId)
             return false;
+        if (destServiceInstanceId != indicator.destServiceInstanceId)
+            return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
@@ -81,8 +89,11 @@ public class ServiceAvgIndicator extends LongAvgIndicator 
implements AlarmSuppor
         remoteBuilder.setDataLongs(2, getTimeBucket());
 
 
-        remoteBuilder.setDataIntegers(0, getId());
-        remoteBuilder.setDataIntegers(1, getCount());
+        remoteBuilder.setDataIntegers(0, getSourceServiceId());
+        remoteBuilder.setDataIntegers(1, getDestServiceId());
+        remoteBuilder.setDataIntegers(2, getSourceServiceInstanceId());
+        remoteBuilder.setDataIntegers(3, getDestServiceInstanceId());
+        remoteBuilder.setDataIntegers(4, getCount());
 
         return remoteBuilder;
     }
@@ -94,19 +105,25 @@ public class ServiceAvgIndicator extends LongAvgIndicator 
implements AlarmSuppor
         setTimeBucket(remoteData.getDataLongs(2));
 
 
-        setId(remoteData.getDataIntegers(0));
-        setCount(remoteData.getDataIntegers(1));
+        setSourceServiceId(remoteData.getDataIntegers(0));
+        setDestServiceId(remoteData.getDataIntegers(1));
+        setSourceServiceInstanceId(remoteData.getDataIntegers(2));
+        setDestServiceInstanceId(remoteData.getDataIntegers(3));
+        setCount(remoteData.getDataIntegers(4));
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("Service_Avg", Scope.Service, id);
+        return new AlarmMeta("ServiceInstanceRelation_Avg", 
Scope.ServiceInstanceRelation, sourceServiceId, destServiceId, 
sourceServiceInstanceId, destServiceInstanceId);
     }
 
-    public static class Builder implements StorageBuilder<ServiceAvgIndicator> 
{
+    public static class Builder implements 
StorageBuilder<ServiceInstanceRelationAvgIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceAvgIndicator 
storageData) {
+        @Override public Map<String, Object> 
data2Map(ServiceInstanceRelationAvgIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
-            map.put("id", storageData.getId());
+            map.put("source_service_id", storageData.getSourceServiceId());
+            map.put("dest_service_id", storageData.getDestServiceId());
+            map.put("source_service_instance_id", 
storageData.getSourceServiceInstanceId());
+            map.put("dest_service_instance_id", 
storageData.getDestServiceInstanceId());
             map.put("summation", storageData.getSummation());
             map.put("count", storageData.getCount());
             map.put("value", storageData.getValue());
@@ -114,9 +131,12 @@ public class ServiceAvgIndicator extends LongAvgIndicator 
implements AlarmSuppor
             return map;
         }
 
-        @Override public ServiceAvgIndicator map2Data(Map<String, Object> 
dbMap) {
-            ServiceAvgIndicator indicator = new ServiceAvgIndicator();
-            indicator.setId(((Number)dbMap.get("id")).intValue());
+        @Override public ServiceInstanceRelationAvgIndicator 
map2Data(Map<String, Object> dbMap) {
+            ServiceInstanceRelationAvgIndicator indicator = new 
ServiceInstanceRelationAvgIndicator();
+            
indicator.setSourceServiceId(((Number)dbMap.get("source_service_id")).intValue());
+            
indicator.setDestServiceId(((Number)dbMap.get("dest_service_id")).intValue());
+            
indicator.setSourceServiceInstanceId(((Number)dbMap.get("source_service_instance_id")).intValue());
+            
indicator.setDestServiceInstanceId(((Number)dbMap.get("dest_service_instance_id")).intValue());
             
indicator.setSummation(((Number)dbMap.get("summation")).longValue());
             indicator.setCount(((Number)dbMap.get("count")).intValue());
             indicator.setValue(((Number)dbMap.get("value")).longValue());
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancerelation/ServiceInstanceRelationDispatcher.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancerelation/ServiceInstanceRelationDispatcher.java
new file mode 100644
index 0000000..adc6944
--- /dev/null
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancerelation/ServiceInstanceRelationDispatcher.java
@@ -0,0 +1,48 @@
+/*
+ * 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;
+import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+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) {
+        doServiceInstanceRelationAvg(source);
+    }
+
+    private void doServiceInstanceRelationAvg(ServiceInstanceRelation source) {
+        ServiceInstanceRelationAvgIndicator indicator = new 
ServiceInstanceRelationAvgIndicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setSourceServiceId(source.getSourceServiceId());
+        indicator.setDestServiceId(source.getDestServiceId());
+        
indicator.setSourceServiceInstanceId(source.getSourceServiceInstanceId());
+        indicator.setDestServiceInstanceId(source.getDestServiceInstanceId());
+        indicator.combine(source.getLatency(), 1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+}
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationAvgIndicator.java
similarity index 66%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
copy to 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationAvgIndicator.java
index 643fee2..a5e1c36 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationAvgIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package 
org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemory;
+package 
org.apache.skywalking.oap.server.core.analysis.generated.servicerelation;
 
 import java.util.*;
 import lombok.*;
@@ -38,21 +38,23 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "instance_jvm_memory_max", builder = 
InstanceJvmMemoryMaxIndicator.Builder.class)
-public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements 
AlarmSupported {
+@StorageEntity(name = "servicerelation_avg", builder = 
ServiceRelationAvgIndicator.Builder.class)
+public class ServiceRelationAvgIndicator extends LongAvgIndicator implements 
AlarmSupported {
 
-    @Setter @Getter @Column(columnName = "id") private int id;
-    @Setter @Getter @Column(columnName = "service_instance_id") private int 
serviceInstanceId;
+    @Setter @Getter @Column(columnName = "source_service_id") private int 
sourceServiceId;
+    @Setter @Getter @Column(columnName = "dest_service_id") private int 
destServiceId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
-        splitJointId += Const.ID_SPLIT + String.valueOf(id);
+        splitJointId += Const.ID_SPLIT + String.valueOf(sourceServiceId);
+        splitJointId += Const.ID_SPLIT + String.valueOf(destServiceId);
         return splitJointId;
     }
 
     @Override public int hashCode() {
         int result = 17;
-        result = 31 * result + id;
+        result = 31 * result + sourceServiceId;
+        result = 31 * result + destServiceId;
         result = 31 * result + (int)getTimeBucket();
         return result;
     }
@@ -65,9 +67,12 @@ public class InstanceJvmMemoryMaxIndicator extends 
LongAvgIndicator implements A
         if (getClass() != obj.getClass())
             return false;
 
-        InstanceJvmMemoryMaxIndicator indicator = 
(InstanceJvmMemoryMaxIndicator)obj;
-        if (id != indicator.id)
+        ServiceRelationAvgIndicator indicator = 
(ServiceRelationAvgIndicator)obj;
+        if (sourceServiceId != indicator.sourceServiceId)
             return false;
+        if (destServiceId != indicator.destServiceId)
+            return false;
+
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
 
@@ -82,8 +87,8 @@ public class InstanceJvmMemoryMaxIndicator extends 
LongAvgIndicator implements A
         remoteBuilder.setDataLongs(2, getTimeBucket());
 
 
-        remoteBuilder.setDataIntegers(0, getId());
-        remoteBuilder.setDataIntegers(1, getServiceInstanceId());
+        remoteBuilder.setDataIntegers(0, getSourceServiceId());
+        remoteBuilder.setDataIntegers(1, getDestServiceId());
         remoteBuilder.setDataIntegers(2, getCount());
 
         return remoteBuilder;
@@ -96,21 +101,21 @@ public class InstanceJvmMemoryMaxIndicator extends 
LongAvgIndicator implements A
         setTimeBucket(remoteData.getDataLongs(2));
 
 
-        setId(remoteData.getDataIntegers(0));
-        setServiceInstanceId(remoteData.getDataIntegers(1));
+        setSourceServiceId(remoteData.getDataIntegers(0));
+        setDestServiceId(remoteData.getDataIntegers(1));
         setCount(remoteData.getDataIntegers(2));
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("instance_jvm_memory_max", 
Scope.ServiceInstanceJVMMemory, id, serviceInstanceId);
+        return new AlarmMeta("ServiceRelation_Avg", Scope.ServiceRelation, 
sourceServiceId, destServiceId);
     }
 
-    public static class Builder implements 
StorageBuilder<InstanceJvmMemoryMaxIndicator> {
+    public static class Builder implements 
StorageBuilder<ServiceRelationAvgIndicator> {
 
-        @Override public Map<String, Object> 
data2Map(InstanceJvmMemoryMaxIndicator storageData) {
+        @Override public Map<String, Object> 
data2Map(ServiceRelationAvgIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
-            map.put("id", storageData.getId());
-            map.put("service_instance_id", storageData.getServiceInstanceId());
+            map.put("source_service_id", storageData.getSourceServiceId());
+            map.put("dest_service_id", storageData.getDestServiceId());
             map.put("summation", storageData.getSummation());
             map.put("count", storageData.getCount());
             map.put("value", storageData.getValue());
@@ -118,10 +123,10 @@ public class InstanceJvmMemoryMaxIndicator extends 
LongAvgIndicator implements A
             return map;
         }
 
-        @Override public InstanceJvmMemoryMaxIndicator map2Data(Map<String, 
Object> dbMap) {
-            InstanceJvmMemoryMaxIndicator indicator = new 
InstanceJvmMemoryMaxIndicator();
-            indicator.setId(((Number)dbMap.get("id")).intValue());
-            
indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
+        @Override public ServiceRelationAvgIndicator map2Data(Map<String, 
Object> dbMap) {
+            ServiceRelationAvgIndicator indicator = new 
ServiceRelationAvgIndicator();
+            
indicator.setSourceServiceId(((Number)dbMap.get("source_service_id")).intValue());
+            
indicator.setDestServiceId(((Number)dbMap.get("dest_service_id")).intValue());
             
indicator.setSummation(((Number)dbMap.get("summation")).longValue());
             indicator.setCount(((Number)dbMap.get("count")).intValue());
             indicator.setValue(((Number)dbMap.get("value")).longValue());
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationDispatcher.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationDispatcher.java
new file mode 100644
index 0000000..1c7a52c
--- /dev/null
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationDispatcher.java
@@ -0,0 +1,46 @@
+/*
+ * 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;
+import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+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) {
+        doServiceRelationAvg(source);
+    }
+
+    private void doServiceRelationAvg(ServiceRelation source) {
+        ServiceRelationAvgIndicator indicator = new 
ServiceRelationAvgIndicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setSourceServiceId(source.getSourceServiceId());
+        indicator.setDestServiceId(source.getDestServiceId());
+        indicator.combine(source.getLatency(), 1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+}
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
index 8c0ed3b..c33277c 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
@@ -31,8 +31,18 @@ public class EndpointRelation extends Source {
 
     @Getter @Setter private int endpointId;
     @Getter @Setter private String endpoint;
+    @Getter @Setter private int serviceId;
+    @Getter @Setter private String serviceName;
+    @Getter @Setter private int serviceInstanceId;
+    @Getter @Setter private String serviceInstanceName;
+
     @Getter @Setter private int childEndpointId;
     @Getter @Setter private String childEndpoint;
+    @Getter @Setter private int childServiceId;
+    @Getter @Setter private String childServiceName;
+    @Getter @Setter private int childServiceInstanceId;
+    @Getter @Setter private String childServiceInstanceName;
+
     @Getter @Setter private int rpcLatency;
     @Getter @Setter private boolean status;
     @Getter @Setter private int responseCode;
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java
index c1705a5..2d111d7 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java
@@ -31,6 +31,7 @@ public class ServiceInstance extends Source {
     }
 
     @Getter @Setter private int id;
+    @Getter @Setter private int serviceId;
     @Getter @Setter private String name;
     @Getter @Setter private String serviceName;
     @Getter @Setter private String endpointName;
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceRelation.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceRelation.java
index 7c51b8e..bd227b3 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceRelation.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceRelation.java
@@ -30,9 +30,11 @@ public class ServiceInstanceRelation extends Source {
     }
 
     @Getter @Setter private int sourceServiceInstanceId;
+    @Getter @Setter private int sourceServiceId;
     @Getter @Setter private String sourceServiceName;
     @Getter @Setter private String sourceServiceInstanceName;
     @Getter @Setter private int destServiceInstanceId;
+    @Getter @Setter private int destServiceId;
     @Getter @Setter private String destServiceName;
     @Getter @Setter private String destServiceInstanceName;
     @Getter @Setter private String endpoint;
diff --git 
a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
 
b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
index 290390f..cbbf576 100644
--- 
a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
+++ 
b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
@@ -31,7 +31,16 @@ import org.slf4j.*;
 import static java.util.Objects.nonNull;
 
 /**
- * @author peng-yongsheng
+ *
+ * Notice, in here, there are following concepts match
+ *
+ *       v5        |   v6
+ *
+ * 1. Application == Service
+ * 2. Server == Service Instance
+ * 3. Service == Endpoint
+ *
+ * @author peng-yongsheng, wusheng
  */
 public class MultiScopesSpanListener implements EntrySpanListener, 
ExitSpanListener {
 
diff --git 
a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/SourceBuilder.java
 
b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/SourceBuilder.java
index c138c5e..e5485fe 100644
--- 
a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/SourceBuilder.java
+++ 
b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/SourceBuilder.java
@@ -80,6 +80,7 @@ class SourceBuilder {
     ServiceInstance toServiceInstance() {
         ServiceInstance serviceInstance = new ServiceInstance();
         serviceInstance.setId(destServiceInstanceId);
+        serviceInstance.setServiceId(destServiceId);
         serviceInstance.setName(destServiceInstanceName);
         serviceInstance.setServiceName(destServiceName);
         serviceInstance.setEndpointName(destEndpointName);
@@ -94,8 +95,10 @@ class SourceBuilder {
     ServiceInstanceRelation toServiceInstanceRelation() {
         ServiceInstanceRelation serviceInstanceRelation = new 
ServiceInstanceRelation();
         
serviceInstanceRelation.setSourceServiceInstanceId(sourceServiceInstanceId);
+        serviceInstanceRelation.setSourceServiceId(sourceServiceId);
         serviceInstanceRelation.setSourceServiceName(sourceServiceName);
         
serviceInstanceRelation.setSourceServiceInstanceName(sourceServiceInstanceName);
+        serviceInstanceRelation.setSourceServiceId(destServiceId);
         
serviceInstanceRelation.setDestServiceInstanceId(destServiceInstanceId);
         serviceInstanceRelation.setDestServiceName(destServiceName);
         
serviceInstanceRelation.setDestServiceInstanceName(destServiceInstanceName);
@@ -129,8 +132,16 @@ class SourceBuilder {
         EndpointRelation endpointRelation = new EndpointRelation();
         endpointRelation.setEndpointId(sourceEndpointId);
         endpointRelation.setEndpoint(sourceEndpointName);
+        endpointRelation.setServiceId(sourceServiceId);
+        endpointRelation.setServiceName(sourceServiceName);
+        endpointRelation.setServiceInstanceId(sourceServiceInstanceId);
+        endpointRelation.setServiceInstanceName(sourceServiceInstanceName);
         endpointRelation.setChildEndpointId(destEndpointId);
         endpointRelation.setChildEndpoint(destEndpointName);
+        endpointRelation.setChildServiceId(destServiceId);
+        endpointRelation.setChildServiceName(destServiceName);
+        endpointRelation.setChildServiceInstanceId(destServiceInstanceId);
+        endpointRelation.setChildServiceInstanceName(destServiceInstanceName);
         endpointRelation.setRpcLatency(latency);
         endpointRelation.setStatus(status);
         endpointRelation.setResponseCode(responseCode);

Reply via email to