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/16 14:50:19 UTC

[incubator-skywalking] branch real-metric-script created (now f5b1354)

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

wusheng pushed a change to branch real-metric-script
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git.


      at f5b1354  New generated indicators for real backend system.

This branch includes the following new commits:

     new f5b1354  New generated indicators for real backend system.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-skywalking] 01/01: New generated indicators for real backend system.

Posted by wu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f5b13544249baf25bcd881068cee8f4a45ed472d
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Sun Sep 16 22:50:07 2018 +0800

    New generated indicators for real backend system.
---
 .../generated/all/AllHeatmapIndicator.java         |  17 +-
 .../analysis/generated/all/AllP50Indicator.java    |   6 +-
 .../analysis/generated/all/AllP75Indicator.java    |   6 +-
 .../analysis/generated/all/AllP90Indicator.java    |   6 +-
 .../analysis/generated/all/AllP95Indicator.java    |   6 +-
 .../analysis/generated/all/AllP99Indicator.java    |   6 +-
 .../generated/endpoint/EndpointDispatcher.java     |  71 +++++++-
 ...entIndicator.java => EndpointP50Indicator.java} |  71 ++++----
 ...entIndicator.java => EndpointP75Indicator.java} |  71 ++++----
 ...entIndicator.java => EndpointP90Indicator.java} |  71 ++++----
 ...entIndicator.java => EndpointP95Indicator.java} |  71 ++++----
 ...entIndicator.java => EndpointP99Indicator.java} |  71 ++++----
 ...entIndicator.java => EndpointSlaIndicator.java} |  22 +--
 ...ator.java => EndpointRelationCpmIndicator.java} |  44 ++---
 .../EndpointRelationDispatcher.java                |  27 ++-
 ...java => EndpointRelationRespTimeIndicator.java} |  22 +--
 ...sSumIndicator.java => ServiceCpmIndicator.java} |  22 +--
 .../generated/service/ServiceDispatcher.java       |  72 +++++++-
 .../ServiceP50Indicator.java}                      |  43 +++--
 .../ServiceP75Indicator.java}                      |  43 +++--
 .../ServiceP90Indicator.java}                      |  43 +++--
 .../ServiceP95Indicator.java}                      |  43 +++--
 .../ServiceP99Indicator.java}                      |  43 +++--
 ...ndicator.java => ServiceRespTimeIndicator.java} |  22 +--
 ...eAvgIndicator.java => ServiceSlaIndicator.java} |  64 +++----
 .../ServiceInstanceCpmIndicator.java}              |  32 ++--
 .../serviceinstance/ServiceInstanceDispatcher.java |  11 ++
 .../ServiceInstanceRespTimeIndicator.java          |   4 +-
 .../InstanceJvmOldGcCountIndicator.java}           |  32 ++--
 .../InstanceJvmOldGcTimeIndicator.java}            |  24 +--
 .../InstanceJvmYoungGcCountIndicator.java}         |  32 ++--
 .../ServiceInstanceJVMGCDispatcher.java            |  42 +++++
 .../InstanceJvmMemoryHeapIndicator.java}           |  24 +--
 ....java => InstanceJvmMemoryNoheapIndicator.java} |  22 +--
 .../ServiceInstanceJVMMemoryDispatcher.java        |  24 ++-
 .../ServiceInstanceJVMMemoryPoolDispatcher.java    |  12 --
 .../ServiceInstanceRelationAvgIndicator.java       | 189 ---------------------
 .../ServiceInstanceRelationDispatcher.java         |  13 --
 .../ServiceRelationClientCallSlaIndicator.java}    |  50 ++----
 ...java => ServiceRelationClientCpmIndicator.java} |  22 +--
 ...=> ServiceRelationClientRespTimeIndicator.java} |  22 +--
 .../servicerelation/ServiceRelationDispatcher.java |  60 ++++++-
 .../ServiceRelationServerCallSlaIndicator.java}    |  50 ++----
 ...java => ServiceRelationServerCpmIndicator.java} |  22 +--
 ...=> ServiceRelationServerRespTimeIndicator.java} |  22 +--
 .../{SumIndicator.java => CPMIndicator.java}       |  17 +-
 .../{SumIndicator.java => CountIndicator.java}     |   6 +-
 .../core/analysis/indicator/SumIndicator.java      |  15 +-
 .../src/main/resources/official_analysis.oal       | 142 ++++++++--------
 ...mIndicatorTest.java => CountIndicatorTest.java} |  10 +-
 50 files changed, 1000 insertions(+), 882 deletions(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllHeatmapIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllHeatmapIndicator.java
index e0ab631..3f4cabd 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllHeatmapIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllHeatmapIndicator.java
@@ -19,14 +19,15 @@
 package org.apache.skywalking.oap.server.core.analysis.generated.all;
 
 import java.util.*;
-import org.apache.skywalking.oap.server.core.alarm.*;
+import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
+import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
 import org.apache.skywalking.oap.server.core.analysis.indicator.*;
 import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
 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.source.Scope;
+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.storage.annotation.StorageEntity;
+import org.apache.skywalking.oap.server.core.source.Scope;
 
 /**
  * This class is auto generated. Please don't change this class manually.
@@ -38,6 +39,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.StorageEntity;
 @StorageEntity(name = "all_heatmap", builder = AllHeatmapIndicator.Builder.class)
 public class AllHeatmapIndicator extends ThermodynamicIndicator implements AlarmSupported {
 
+
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
         return splitJointId;
@@ -49,6 +51,7 @@ public class AllHeatmapIndicator extends ThermodynamicIndicator implements Alarm
         return result;
     }
 
+
     @Override public int remoteHashCode() {
         int result = 17;
         return result;
@@ -75,6 +78,7 @@ public class AllHeatmapIndicator extends ThermodynamicIndicator implements Alarm
 
         remoteBuilder.setDataLongs(0, getTimeBucket());
 
+
         remoteBuilder.setDataIntegers(0, getStep());
         remoteBuilder.setDataIntegers(1, getNumOfSteps());
         getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
@@ -86,10 +90,11 @@ public class AllHeatmapIndicator extends ThermodynamicIndicator implements Alarm
 
         setTimeBucket(remoteData.getDataLongs(0));
 
+
         setStep(remoteData.getDataIntegers(0));
         setNumOfSteps(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -97,7 +102,7 @@ public class AllHeatmapIndicator extends ThermodynamicIndicator implements Alarm
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_heatmap", Scope.All);
+        return new AlarmMeta("all_heatmap", Scope.All);
     }
 
     @Override
@@ -148,7 +153,7 @@ public class AllHeatmapIndicator extends ThermodynamicIndicator implements Alarm
             AllHeatmapIndicator indicator = new AllHeatmapIndicator();
             indicator.setStep(((Number)dbMap.get("step")).intValue());
             indicator.setNumOfSteps(((Number)dbMap.get("num_of_steps")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP50Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP50Indicator.java
index 1bc9abe..f0d80dc 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP50Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP50Indicator.java
@@ -94,7 +94,7 @@ public class AllP50Indicator extends P50Indicator implements AlarmSupported {
         setValue(remoteData.getDataIntegers(0));
         setPrecision(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -102,7 +102,7 @@ public class AllP50Indicator extends P50Indicator implements AlarmSupported {
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_p50", Scope.All);
+        return new AlarmMeta("all_p50", Scope.All);
     }
 
     @Override
@@ -153,7 +153,7 @@ public class AllP50Indicator extends P50Indicator implements AlarmSupported {
             AllP50Indicator indicator = new AllP50Indicator();
             indicator.setValue(((Number)dbMap.get("value")).intValue());
             indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP75Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP75Indicator.java
index fbcedcb..dbe8c4e 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP75Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP75Indicator.java
@@ -94,7 +94,7 @@ public class AllP75Indicator extends P75Indicator implements AlarmSupported {
         setValue(remoteData.getDataIntegers(0));
         setPrecision(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -102,7 +102,7 @@ public class AllP75Indicator extends P75Indicator implements AlarmSupported {
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_p75", Scope.All);
+        return new AlarmMeta("all_p75", Scope.All);
     }
 
     @Override
@@ -153,7 +153,7 @@ public class AllP75Indicator extends P75Indicator implements AlarmSupported {
             AllP75Indicator indicator = new AllP75Indicator();
             indicator.setValue(((Number)dbMap.get("value")).intValue());
             indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP90Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP90Indicator.java
index f2031b1..d1be9c0 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP90Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP90Indicator.java
@@ -94,7 +94,7 @@ public class AllP90Indicator extends P90Indicator implements AlarmSupported {
         setValue(remoteData.getDataIntegers(0));
         setPrecision(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -102,7 +102,7 @@ public class AllP90Indicator extends P90Indicator implements AlarmSupported {
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_p90", Scope.All);
+        return new AlarmMeta("all_p90", Scope.All);
     }
 
     @Override
@@ -153,7 +153,7 @@ public class AllP90Indicator extends P90Indicator implements AlarmSupported {
             AllP90Indicator indicator = new AllP90Indicator();
             indicator.setValue(((Number)dbMap.get("value")).intValue());
             indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
index 64f17a1..1692938 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
@@ -94,7 +94,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         setValue(remoteData.getDataIntegers(0));
         setPrecision(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -102,7 +102,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_p95", Scope.All);
+        return new AlarmMeta("all_p95", Scope.All);
     }
 
     @Override
@@ -153,7 +153,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
             AllP95Indicator indicator = new AllP95Indicator();
             indicator.setValue(((Number)dbMap.get("value")).intValue());
             indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP99Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP99Indicator.java
index 01ce273..1efe9fc 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP99Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP99Indicator.java
@@ -94,7 +94,7 @@ public class AllP99Indicator extends P99Indicator implements AlarmSupported {
         setValue(remoteData.getDataIntegers(0));
         setPrecision(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -102,7 +102,7 @@ public class AllP99Indicator extends P99Indicator implements AlarmSupported {
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_p99", Scope.All);
+        return new AlarmMeta("all_p99", Scope.All);
     }
 
     @Override
@@ -153,7 +153,7 @@ public class AllP99Indicator extends P99Indicator implements AlarmSupported {
             AllP99Indicator indicator = new AllP99Indicator();
             indicator.setValue(((Number)dbMap.get("value")).intValue());
             indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java
index 20c9c7d..f50b21a 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java
@@ -31,7 +31,12 @@ public class EndpointDispatcher implements SourceDispatcher<Endpoint> {
 
     @Override public void dispatch(Endpoint source) {
         doEndpointAvg(source);
-        doEndpointPercent(source);
+        doEndpointSla(source);
+        doEndpointP99(source);
+        doEndpointP95(source);
+        doEndpointP90(source);
+        doEndpointP75(source);
+        doEndpointP50(source);
     }
 
     private void doEndpointAvg(Endpoint source) {
@@ -46,8 +51,8 @@ public class EndpointDispatcher implements SourceDispatcher<Endpoint> {
         IndicatorProcess.INSTANCE.in(indicator);
     }
 
-    private void doEndpointPercent(Endpoint source) {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+    private void doEndpointSla(Endpoint source) {
+        EndpointSlaIndicator indicator = new EndpointSlaIndicator();
 
 
         indicator.setTimeBucket(source.getTimeBucket());
@@ -58,4 +63,64 @@ public class EndpointDispatcher implements SourceDispatcher<Endpoint> {
         IndicatorProcess.INSTANCE.in(indicator);
     }
 
+    private void doEndpointP99(Endpoint source) {
+        EndpointP99Indicator indicator = new EndpointP99Indicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceId(source.getServiceId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getLatency(), 10);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+
+    private void doEndpointP95(Endpoint source) {
+        EndpointP95Indicator indicator = new EndpointP95Indicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceId(source.getServiceId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getLatency(), 10);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+
+    private void doEndpointP90(Endpoint source) {
+        EndpointP90Indicator indicator = new EndpointP90Indicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceId(source.getServiceId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getLatency(), 10);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+
+    private void doEndpointP75(Endpoint source) {
+        EndpointP75Indicator indicator = new EndpointP75Indicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceId(source.getServiceId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getLatency(), 10);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+
+    private void doEndpointP50(Endpoint source) {
+        EndpointP50Indicator indicator = new EndpointP50Indicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceId(source.getServiceId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getLatency(), 10);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+
 }
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/EndpointP50Indicator.java
similarity index 69%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointP50Indicator.java
index 44b98f2..37e92c3 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/EndpointP50Indicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_percent", builder = EndpointPercentIndicator.Builder.class)
-public class EndpointPercentIndicator extends PercentIndicator implements AlarmSupported {
+@StorageEntity(name = "endpoint_p50", builder = EndpointP50Indicator.Builder.class)
+public class EndpointP50Indicator extends P50Indicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
@@ -73,7 +73,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointPercentIndicator indicator = (EndpointPercentIndicator)obj;
+        EndpointP50Indicator indicator = (EndpointP50Indicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -87,14 +87,14 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
         remoteBuilder.setDataStrings(0, getEntityId());
 
-        remoteBuilder.setDataLongs(0, getTotal());
-        remoteBuilder.setDataLongs(1, getMatch());
-        remoteBuilder.setDataLongs(2, getTimeBucket());
+        remoteBuilder.setDataLongs(0, getTimeBucket());
 
 
         remoteBuilder.setDataIntegers(0, getServiceId());
         remoteBuilder.setDataIntegers(1, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(2, getPercentage());
+        remoteBuilder.setDataIntegers(2, getValue());
+        remoteBuilder.setDataIntegers(3, getPrecision());
+        getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
 
         return remoteBuilder;
     }
@@ -102,86 +102,89 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
     @Override public void deserialize(RemoteData remoteData) {
         setEntityId(remoteData.getDataStrings(0));
 
-        setTotal(remoteData.getDataLongs(0));
-        setMatch(remoteData.getDataLongs(1));
-        setTimeBucket(remoteData.getDataLongs(2));
+        setTimeBucket(remoteData.getDataLongs(0));
 
 
         setServiceId(remoteData.getDataIntegers(0));
         setServiceInstanceId(remoteData.getDataIntegers(1));
-        setPercentage(remoteData.getDataIntegers(2));
+        setValue(remoteData.getDataIntegers(2));
+        setPrecision(remoteData.getDataIntegers(3));
 
+        setDetailGroup(new ArrayList<>(30));
+        remoteData.getDataIntLongPairListList().forEach(element -> {
+            getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
+        });
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("endpoint_percent", Scope.Endpoint, entityId);
+        return new AlarmMeta("endpoint_p50", Scope.Endpoint, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP50Indicator indicator = new EndpointP50Indicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toDay() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP50Indicator indicator = new EndpointP50Indicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toMonth() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP50Indicator indicator = new EndpointP50Indicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<EndpointPercentIndicator> {
+    public static class Builder implements StorageBuilder<EndpointP50Indicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointPercentIndicator storageData) {
+        @Override public Map<String, Object> data2Map(EndpointP50Indicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("service_id", storageData.getServiceId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
-            map.put("total", storageData.getTotal());
-            map.put("percentage", storageData.getPercentage());
-            map.put("match", storageData.getMatch());
+            map.put("value", storageData.getValue());
+            map.put("precision", storageData.getPrecision());
+            map.put("detail_group", storageData.getDetailGroup());
             map.put("time_bucket", storageData.getTimeBucket());
             return map;
         }
 
-        @Override public EndpointPercentIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        @Override public EndpointP50Indicator map2Data(Map<String, Object> dbMap) {
+            EndpointP50Indicator indicator = new EndpointP50Indicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
             indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
-            indicator.setTotal(((Number)dbMap.get("total")).longValue());
-            indicator.setPercentage(((Number)dbMap.get("percentage")).intValue());
-            indicator.setMatch(((Number)dbMap.get("match")).longValue());
+            indicator.setValue(((Number)dbMap.get("value")).intValue());
+            indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
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/EndpointP75Indicator.java
similarity index 69%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointP75Indicator.java
index 44b98f2..d2dba63 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/EndpointP75Indicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_percent", builder = EndpointPercentIndicator.Builder.class)
-public class EndpointPercentIndicator extends PercentIndicator implements AlarmSupported {
+@StorageEntity(name = "endpoint_p75", builder = EndpointP75Indicator.Builder.class)
+public class EndpointP75Indicator extends P75Indicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
@@ -73,7 +73,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointPercentIndicator indicator = (EndpointPercentIndicator)obj;
+        EndpointP75Indicator indicator = (EndpointP75Indicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -87,14 +87,14 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
         remoteBuilder.setDataStrings(0, getEntityId());
 
-        remoteBuilder.setDataLongs(0, getTotal());
-        remoteBuilder.setDataLongs(1, getMatch());
-        remoteBuilder.setDataLongs(2, getTimeBucket());
+        remoteBuilder.setDataLongs(0, getTimeBucket());
 
 
         remoteBuilder.setDataIntegers(0, getServiceId());
         remoteBuilder.setDataIntegers(1, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(2, getPercentage());
+        remoteBuilder.setDataIntegers(2, getValue());
+        remoteBuilder.setDataIntegers(3, getPrecision());
+        getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
 
         return remoteBuilder;
     }
@@ -102,86 +102,89 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
     @Override public void deserialize(RemoteData remoteData) {
         setEntityId(remoteData.getDataStrings(0));
 
-        setTotal(remoteData.getDataLongs(0));
-        setMatch(remoteData.getDataLongs(1));
-        setTimeBucket(remoteData.getDataLongs(2));
+        setTimeBucket(remoteData.getDataLongs(0));
 
 
         setServiceId(remoteData.getDataIntegers(0));
         setServiceInstanceId(remoteData.getDataIntegers(1));
-        setPercentage(remoteData.getDataIntegers(2));
+        setValue(remoteData.getDataIntegers(2));
+        setPrecision(remoteData.getDataIntegers(3));
 
+        setDetailGroup(new ArrayList<>(30));
+        remoteData.getDataIntLongPairListList().forEach(element -> {
+            getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
+        });
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("endpoint_percent", Scope.Endpoint, entityId);
+        return new AlarmMeta("endpoint_p75", Scope.Endpoint, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP75Indicator indicator = new EndpointP75Indicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toDay() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP75Indicator indicator = new EndpointP75Indicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toMonth() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP75Indicator indicator = new EndpointP75Indicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<EndpointPercentIndicator> {
+    public static class Builder implements StorageBuilder<EndpointP75Indicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointPercentIndicator storageData) {
+        @Override public Map<String, Object> data2Map(EndpointP75Indicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("service_id", storageData.getServiceId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
-            map.put("total", storageData.getTotal());
-            map.put("percentage", storageData.getPercentage());
-            map.put("match", storageData.getMatch());
+            map.put("value", storageData.getValue());
+            map.put("precision", storageData.getPrecision());
+            map.put("detail_group", storageData.getDetailGroup());
             map.put("time_bucket", storageData.getTimeBucket());
             return map;
         }
 
-        @Override public EndpointPercentIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        @Override public EndpointP75Indicator map2Data(Map<String, Object> dbMap) {
+            EndpointP75Indicator indicator = new EndpointP75Indicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
             indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
-            indicator.setTotal(((Number)dbMap.get("total")).longValue());
-            indicator.setPercentage(((Number)dbMap.get("percentage")).intValue());
-            indicator.setMatch(((Number)dbMap.get("match")).longValue());
+            indicator.setValue(((Number)dbMap.get("value")).intValue());
+            indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
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/EndpointP90Indicator.java
similarity index 69%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointP90Indicator.java
index 44b98f2..04d052d 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/EndpointP90Indicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_percent", builder = EndpointPercentIndicator.Builder.class)
-public class EndpointPercentIndicator extends PercentIndicator implements AlarmSupported {
+@StorageEntity(name = "endpoint_p90", builder = EndpointP90Indicator.Builder.class)
+public class EndpointP90Indicator extends P90Indicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
@@ -73,7 +73,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointPercentIndicator indicator = (EndpointPercentIndicator)obj;
+        EndpointP90Indicator indicator = (EndpointP90Indicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -87,14 +87,14 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
         remoteBuilder.setDataStrings(0, getEntityId());
 
-        remoteBuilder.setDataLongs(0, getTotal());
-        remoteBuilder.setDataLongs(1, getMatch());
-        remoteBuilder.setDataLongs(2, getTimeBucket());
+        remoteBuilder.setDataLongs(0, getTimeBucket());
 
 
         remoteBuilder.setDataIntegers(0, getServiceId());
         remoteBuilder.setDataIntegers(1, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(2, getPercentage());
+        remoteBuilder.setDataIntegers(2, getValue());
+        remoteBuilder.setDataIntegers(3, getPrecision());
+        getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
 
         return remoteBuilder;
     }
@@ -102,86 +102,89 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
     @Override public void deserialize(RemoteData remoteData) {
         setEntityId(remoteData.getDataStrings(0));
 
-        setTotal(remoteData.getDataLongs(0));
-        setMatch(remoteData.getDataLongs(1));
-        setTimeBucket(remoteData.getDataLongs(2));
+        setTimeBucket(remoteData.getDataLongs(0));
 
 
         setServiceId(remoteData.getDataIntegers(0));
         setServiceInstanceId(remoteData.getDataIntegers(1));
-        setPercentage(remoteData.getDataIntegers(2));
+        setValue(remoteData.getDataIntegers(2));
+        setPrecision(remoteData.getDataIntegers(3));
 
+        setDetailGroup(new ArrayList<>(30));
+        remoteData.getDataIntLongPairListList().forEach(element -> {
+            getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
+        });
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("endpoint_percent", Scope.Endpoint, entityId);
+        return new AlarmMeta("endpoint_p90", Scope.Endpoint, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP90Indicator indicator = new EndpointP90Indicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toDay() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP90Indicator indicator = new EndpointP90Indicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toMonth() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP90Indicator indicator = new EndpointP90Indicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<EndpointPercentIndicator> {
+    public static class Builder implements StorageBuilder<EndpointP90Indicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointPercentIndicator storageData) {
+        @Override public Map<String, Object> data2Map(EndpointP90Indicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("service_id", storageData.getServiceId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
-            map.put("total", storageData.getTotal());
-            map.put("percentage", storageData.getPercentage());
-            map.put("match", storageData.getMatch());
+            map.put("value", storageData.getValue());
+            map.put("precision", storageData.getPrecision());
+            map.put("detail_group", storageData.getDetailGroup());
             map.put("time_bucket", storageData.getTimeBucket());
             return map;
         }
 
-        @Override public EndpointPercentIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        @Override public EndpointP90Indicator map2Data(Map<String, Object> dbMap) {
+            EndpointP90Indicator indicator = new EndpointP90Indicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
             indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
-            indicator.setTotal(((Number)dbMap.get("total")).longValue());
-            indicator.setPercentage(((Number)dbMap.get("percentage")).intValue());
-            indicator.setMatch(((Number)dbMap.get("match")).longValue());
+            indicator.setValue(((Number)dbMap.get("value")).intValue());
+            indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
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/EndpointP95Indicator.java
similarity index 69%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointP95Indicator.java
index 44b98f2..a7b4f26 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/EndpointP95Indicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_percent", builder = EndpointPercentIndicator.Builder.class)
-public class EndpointPercentIndicator extends PercentIndicator implements AlarmSupported {
+@StorageEntity(name = "endpoint_p95", builder = EndpointP95Indicator.Builder.class)
+public class EndpointP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
@@ -73,7 +73,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointPercentIndicator indicator = (EndpointPercentIndicator)obj;
+        EndpointP95Indicator indicator = (EndpointP95Indicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -87,14 +87,14 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
         remoteBuilder.setDataStrings(0, getEntityId());
 
-        remoteBuilder.setDataLongs(0, getTotal());
-        remoteBuilder.setDataLongs(1, getMatch());
-        remoteBuilder.setDataLongs(2, getTimeBucket());
+        remoteBuilder.setDataLongs(0, getTimeBucket());
 
 
         remoteBuilder.setDataIntegers(0, getServiceId());
         remoteBuilder.setDataIntegers(1, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(2, getPercentage());
+        remoteBuilder.setDataIntegers(2, getValue());
+        remoteBuilder.setDataIntegers(3, getPrecision());
+        getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
 
         return remoteBuilder;
     }
@@ -102,86 +102,89 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
     @Override public void deserialize(RemoteData remoteData) {
         setEntityId(remoteData.getDataStrings(0));
 
-        setTotal(remoteData.getDataLongs(0));
-        setMatch(remoteData.getDataLongs(1));
-        setTimeBucket(remoteData.getDataLongs(2));
+        setTimeBucket(remoteData.getDataLongs(0));
 
 
         setServiceId(remoteData.getDataIntegers(0));
         setServiceInstanceId(remoteData.getDataIntegers(1));
-        setPercentage(remoteData.getDataIntegers(2));
+        setValue(remoteData.getDataIntegers(2));
+        setPrecision(remoteData.getDataIntegers(3));
 
+        setDetailGroup(new ArrayList<>(30));
+        remoteData.getDataIntLongPairListList().forEach(element -> {
+            getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
+        });
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("endpoint_percent", Scope.Endpoint, entityId);
+        return new AlarmMeta("endpoint_p95", Scope.Endpoint, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP95Indicator indicator = new EndpointP95Indicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toDay() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP95Indicator indicator = new EndpointP95Indicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toMonth() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP95Indicator indicator = new EndpointP95Indicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<EndpointPercentIndicator> {
+    public static class Builder implements StorageBuilder<EndpointP95Indicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointPercentIndicator storageData) {
+        @Override public Map<String, Object> data2Map(EndpointP95Indicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("service_id", storageData.getServiceId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
-            map.put("total", storageData.getTotal());
-            map.put("percentage", storageData.getPercentage());
-            map.put("match", storageData.getMatch());
+            map.put("value", storageData.getValue());
+            map.put("precision", storageData.getPrecision());
+            map.put("detail_group", storageData.getDetailGroup());
             map.put("time_bucket", storageData.getTimeBucket());
             return map;
         }
 
-        @Override public EndpointPercentIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        @Override public EndpointP95Indicator map2Data(Map<String, Object> dbMap) {
+            EndpointP95Indicator indicator = new EndpointP95Indicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
             indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
-            indicator.setTotal(((Number)dbMap.get("total")).longValue());
-            indicator.setPercentage(((Number)dbMap.get("percentage")).intValue());
-            indicator.setMatch(((Number)dbMap.get("match")).longValue());
+            indicator.setValue(((Number)dbMap.get("value")).intValue());
+            indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
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/EndpointP99Indicator.java
similarity index 69%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointP99Indicator.java
index 44b98f2..aa7690b 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/EndpointP99Indicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_percent", builder = EndpointPercentIndicator.Builder.class)
-public class EndpointPercentIndicator extends PercentIndicator implements AlarmSupported {
+@StorageEntity(name = "endpoint_p99", builder = EndpointP99Indicator.Builder.class)
+public class EndpointP99Indicator extends P99Indicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
@@ -73,7 +73,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointPercentIndicator indicator = (EndpointPercentIndicator)obj;
+        EndpointP99Indicator indicator = (EndpointP99Indicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -87,14 +87,14 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
         remoteBuilder.setDataStrings(0, getEntityId());
 
-        remoteBuilder.setDataLongs(0, getTotal());
-        remoteBuilder.setDataLongs(1, getMatch());
-        remoteBuilder.setDataLongs(2, getTimeBucket());
+        remoteBuilder.setDataLongs(0, getTimeBucket());
 
 
         remoteBuilder.setDataIntegers(0, getServiceId());
         remoteBuilder.setDataIntegers(1, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(2, getPercentage());
+        remoteBuilder.setDataIntegers(2, getValue());
+        remoteBuilder.setDataIntegers(3, getPrecision());
+        getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
 
         return remoteBuilder;
     }
@@ -102,86 +102,89 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
     @Override public void deserialize(RemoteData remoteData) {
         setEntityId(remoteData.getDataStrings(0));
 
-        setTotal(remoteData.getDataLongs(0));
-        setMatch(remoteData.getDataLongs(1));
-        setTimeBucket(remoteData.getDataLongs(2));
+        setTimeBucket(remoteData.getDataLongs(0));
 
 
         setServiceId(remoteData.getDataIntegers(0));
         setServiceInstanceId(remoteData.getDataIntegers(1));
-        setPercentage(remoteData.getDataIntegers(2));
+        setValue(remoteData.getDataIntegers(2));
+        setPrecision(remoteData.getDataIntegers(3));
 
+        setDetailGroup(new ArrayList<>(30));
+        remoteData.getDataIntLongPairListList().forEach(element -> {
+            getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
+        });
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("endpoint_percent", Scope.Endpoint, entityId);
+        return new AlarmMeta("endpoint_p99", Scope.Endpoint, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP99Indicator indicator = new EndpointP99Indicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toDay() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP99Indicator indicator = new EndpointP99Indicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toMonth() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointP99Indicator indicator = new EndpointP99Indicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
-        indicator.setTotal(this.getTotal());
-        indicator.setPercentage(this.getPercentage());
-        indicator.setMatch(this.getMatch());
+        indicator.setValue(this.getValue());
+        indicator.setPrecision(this.getPrecision());
+        indicator.setDetailGroup(this.getDetailGroup());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<EndpointPercentIndicator> {
+    public static class Builder implements StorageBuilder<EndpointP99Indicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointPercentIndicator storageData) {
+        @Override public Map<String, Object> data2Map(EndpointP99Indicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("service_id", storageData.getServiceId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
-            map.put("total", storageData.getTotal());
-            map.put("percentage", storageData.getPercentage());
-            map.put("match", storageData.getMatch());
+            map.put("value", storageData.getValue());
+            map.put("precision", storageData.getPrecision());
+            map.put("detail_group", storageData.getDetailGroup());
             map.put("time_bucket", storageData.getTimeBucket());
             return map;
         }
 
-        @Override public EndpointPercentIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        @Override public EndpointP99Indicator map2Data(Map<String, Object> dbMap) {
+            EndpointP99Indicator indicator = new EndpointP99Indicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
             indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
-            indicator.setTotal(((Number)dbMap.get("total")).longValue());
-            indicator.setPercentage(((Number)dbMap.get("percentage")).intValue());
-            indicator.setMatch(((Number)dbMap.get("match")).longValue());
+            indicator.setValue(((Number)dbMap.get("value")).intValue());
+            indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
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/EndpointSlaIndicator.java
similarity index 88%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointSlaIndicator.java
index 44b98f2..71a4138 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/EndpointSlaIndicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_percent", builder = EndpointPercentIndicator.Builder.class)
-public class EndpointPercentIndicator extends PercentIndicator implements AlarmSupported {
+@StorageEntity(name = "endpoint_sla", builder = EndpointSlaIndicator.Builder.class)
+public class EndpointSlaIndicator extends PercentIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
@@ -73,7 +73,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointPercentIndicator indicator = (EndpointPercentIndicator)obj;
+        EndpointSlaIndicator indicator = (EndpointSlaIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -115,12 +115,12 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("endpoint_percent", Scope.Endpoint, entityId);
+        return new AlarmMeta("endpoint_sla", Scope.Endpoint, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointSlaIndicator indicator = new EndpointSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
@@ -134,7 +134,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
 
     @Override
     public Indicator toDay() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointSlaIndicator indicator = new EndpointSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
@@ -148,7 +148,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
 
     @Override
     public Indicator toMonth() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        EndpointSlaIndicator indicator = new EndpointSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
@@ -160,9 +160,9 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<EndpointPercentIndicator> {
+    public static class Builder implements StorageBuilder<EndpointSlaIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointPercentIndicator storageData) {
+        @Override public Map<String, Object> data2Map(EndpointSlaIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("service_id", storageData.getServiceId());
@@ -174,8 +174,8 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
             return map;
         }
 
-        @Override public EndpointPercentIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        @Override public EndpointSlaIndicator map2Data(Map<String, Object> dbMap) {
+            EndpointSlaIndicator indicator = new EndpointSlaIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
             indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationAvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationCpmIndicator.java
similarity index 79%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationAvgIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationCpmIndicator.java
index 28b336d..0b9e95a 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationAvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationCpmIndicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpointrelation_avg", builder = EndpointRelationAvgIndicator.Builder.class)
-public class EndpointRelationAvgIndicator extends LongAvgIndicator implements AlarmSupported {
+@StorageEntity(name = "endpoint_relation_cpm", builder = EndpointRelationCpmIndicator.Builder.class)
+public class EndpointRelationCpmIndicator extends CPMIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
@@ -75,7 +75,7 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointRelationAvgIndicator indicator = (EndpointRelationAvgIndicator)obj;
+        EndpointRelationCpmIndicator indicator = (EndpointRelationCpmIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -89,16 +89,14 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
         remoteBuilder.setDataStrings(0, getEntityId());
 
-        remoteBuilder.setDataLongs(0, getSummation());
-        remoteBuilder.setDataLongs(1, getValue());
-        remoteBuilder.setDataLongs(2, getTimeBucket());
+        remoteBuilder.setDataLongs(0, getValue());
+        remoteBuilder.setDataLongs(1, getTimeBucket());
 
 
         remoteBuilder.setDataIntegers(0, getServiceId());
         remoteBuilder.setDataIntegers(1, getChildServiceId());
         remoteBuilder.setDataIntegers(2, getServiceInstanceId());
         remoteBuilder.setDataIntegers(3, getChildServiceInstanceId());
-        remoteBuilder.setDataIntegers(4, getCount());
 
         return remoteBuilder;
     }
@@ -106,35 +104,31 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
     @Override public void deserialize(RemoteData remoteData) {
         setEntityId(remoteData.getDataStrings(0));
 
-        setSummation(remoteData.getDataLongs(0));
-        setValue(remoteData.getDataLongs(1));
-        setTimeBucket(remoteData.getDataLongs(2));
+        setValue(remoteData.getDataLongs(0));
+        setTimeBucket(remoteData.getDataLongs(1));
 
 
         setServiceId(remoteData.getDataIntegers(0));
         setChildServiceId(remoteData.getDataIntegers(1));
         setServiceInstanceId(remoteData.getDataIntegers(2));
         setChildServiceInstanceId(remoteData.getDataIntegers(3));
-        setCount(remoteData.getDataIntegers(4));
 
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("EndpointRelation_Avg", Scope.EndpointRelation, entityId);
+        return new AlarmMeta("endpoint_relation_cpm", Scope.EndpointRelation, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        EndpointRelationAvgIndicator indicator = new EndpointRelationAvgIndicator();
+        EndpointRelationCpmIndicator indicator = new EndpointRelationCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setChildServiceId(this.getChildServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setChildServiceInstanceId(this.getChildServiceInstanceId());
-        indicator.setSummation(this.getSummation());
-        indicator.setCount(this.getCount());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
@@ -142,15 +136,13 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
 
     @Override
     public Indicator toDay() {
-        EndpointRelationAvgIndicator indicator = new EndpointRelationAvgIndicator();
+        EndpointRelationCpmIndicator indicator = new EndpointRelationCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setChildServiceId(this.getChildServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setChildServiceInstanceId(this.getChildServiceInstanceId());
-        indicator.setSummation(this.getSummation());
-        indicator.setCount(this.getCount());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
@@ -158,45 +150,39 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
 
     @Override
     public Indicator toMonth() {
-        EndpointRelationAvgIndicator indicator = new EndpointRelationAvgIndicator();
+        EndpointRelationCpmIndicator indicator = new EndpointRelationCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
         indicator.setChildServiceId(this.getChildServiceId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setChildServiceInstanceId(this.getChildServiceInstanceId());
-        indicator.setSummation(this.getSummation());
-        indicator.setCount(this.getCount());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<EndpointRelationAvgIndicator> {
+    public static class Builder implements StorageBuilder<EndpointRelationCpmIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointRelationAvgIndicator storageData) {
+        @Override public Map<String, Object> data2Map(EndpointRelationCpmIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             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());
             map.put("time_bucket", storageData.getTimeBucket());
             return map;
         }
 
-        @Override public EndpointRelationAvgIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointRelationAvgIndicator indicator = new EndpointRelationAvgIndicator();
+        @Override public EndpointRelationCpmIndicator map2Data(Map<String, Object> dbMap) {
+            EndpointRelationCpmIndicator indicator = new EndpointRelationCpmIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             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());
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
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
index 399a3c0..223d933 100644
--- 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
@@ -19,7 +19,6 @@
 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.*;
 
 /**
@@ -30,12 +29,32 @@ import org.apache.skywalking.oap.server.core.source.*;
 public class EndpointRelationDispatcher implements SourceDispatcher<EndpointRelation> {
 
     @Override public void dispatch(EndpointRelation source) {
-        doEndpointRelationAvg(source);
+        doEndpointRelationCpm(source);
+        doEndpointRelationRespTime(source);
     }
 
-    private void doEndpointRelationAvg(EndpointRelation source) {
-        EndpointRelationAvgIndicator indicator = new EndpointRelationAvgIndicator();
+    private void doEndpointRelationCpm(EndpointRelation source) {
+        EndpointRelationCpmIndicator indicator = new EndpointRelationCpmIndicator();
 
+        if (!new EqualMatch().setLeft(source.getDetectPoint()).setRight(DetectPoint.SERVER).match()) {
+            return;
+        }
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceId(source.getServiceId());
+        indicator.setChildServiceId(source.getChildServiceId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.setChildServiceInstanceId(source.getChildServiceInstanceId());
+        indicator.combine(1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doEndpointRelationRespTime(EndpointRelation source) {
+        EndpointRelationRespTimeIndicator indicator = new EndpointRelationRespTimeIndicator();
+
+        if (!new EqualMatch().setLeft(source.getDetectPoint()).setRight(DetectPoint.SERVER).match()) {
+            return;
+        }
 
         indicator.setTimeBucket(source.getTimeBucket());
         indicator.setEntityId(source.getEntityId());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationAvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationRespTimeIndicator.java
similarity index 89%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationAvgIndicator.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationRespTimeIndicator.java
index 28b336d..acf26d6 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationAvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpointrelation/EndpointRelationRespTimeIndicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpointrelation_avg", builder = EndpointRelationAvgIndicator.Builder.class)
-public class EndpointRelationAvgIndicator extends LongAvgIndicator implements AlarmSupported {
+@StorageEntity(name = "endpoint_relation_resp_time", builder = EndpointRelationRespTimeIndicator.Builder.class)
+public class EndpointRelationRespTimeIndicator extends LongAvgIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
@@ -75,7 +75,7 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointRelationAvgIndicator indicator = (EndpointRelationAvgIndicator)obj;
+        EndpointRelationRespTimeIndicator indicator = (EndpointRelationRespTimeIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -121,12 +121,12 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("EndpointRelation_Avg", Scope.EndpointRelation, entityId);
+        return new AlarmMeta("endpoint_relation_resp_time", Scope.EndpointRelation, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        EndpointRelationAvgIndicator indicator = new EndpointRelationAvgIndicator();
+        EndpointRelationRespTimeIndicator indicator = new EndpointRelationRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
@@ -142,7 +142,7 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
 
     @Override
     public Indicator toDay() {
-        EndpointRelationAvgIndicator indicator = new EndpointRelationAvgIndicator();
+        EndpointRelationRespTimeIndicator indicator = new EndpointRelationRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
@@ -158,7 +158,7 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
 
     @Override
     public Indicator toMonth() {
-        EndpointRelationAvgIndicator indicator = new EndpointRelationAvgIndicator();
+        EndpointRelationRespTimeIndicator indicator = new EndpointRelationRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceId(this.getServiceId());
@@ -172,9 +172,9 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<EndpointRelationAvgIndicator> {
+    public static class Builder implements StorageBuilder<EndpointRelationRespTimeIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointRelationAvgIndicator storageData) {
+        @Override public Map<String, Object> data2Map(EndpointRelationRespTimeIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("service_id", storageData.getServiceId());
@@ -188,8 +188,8 @@ public class EndpointRelationAvgIndicator extends LongAvgIndicator implements Al
             return map;
         }
 
-        @Override public EndpointRelationAvgIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointRelationAvgIndicator indicator = new EndpointRelationAvgIndicator();
+        @Override public EndpointRelationRespTimeIndicator map2Data(Map<String, Object> dbMap) {
+            EndpointRelationRespTimeIndicator indicator = new EndpointRelationRespTimeIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
             indicator.setChildServiceId(((Number)dbMap.get("child_service_id")).intValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCpmIndicator.java
similarity index 85%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCpmIndicator.java
index 3be09ed..d43da1c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCpmIndicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "service_calls_sum", builder = ServiceCallsSumIndicator.Builder.class)
-public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSupported {
+@StorageEntity(name = "service_cpm", builder = ServiceCpmIndicator.Builder.class)
+public class ServiceCpmIndicator extends CPMIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
 
@@ -71,7 +71,7 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceCallsSumIndicator indicator = (ServiceCallsSumIndicator)obj;
+        ServiceCpmIndicator indicator = (ServiceCpmIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -105,12 +105,12 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("Service_Calls_Sum", Scope.Service, entityId);
+        return new AlarmMeta("service_cpm", Scope.Service, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        ServiceCpmIndicator indicator = new ServiceCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
@@ -120,7 +120,7 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
 
     @Override
     public Indicator toDay() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        ServiceCpmIndicator indicator = new ServiceCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
@@ -130,7 +130,7 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
 
     @Override
     public Indicator toMonth() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        ServiceCpmIndicator indicator = new ServiceCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
@@ -138,9 +138,9 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<ServiceCallsSumIndicator> {
+    public static class Builder implements StorageBuilder<ServiceCpmIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceCallsSumIndicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceCpmIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("value", storageData.getValue());
@@ -148,8 +148,8 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
             return map;
         }
 
-        @Override public ServiceCallsSumIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        @Override public ServiceCpmIndicator map2Data(Map<String, Object> dbMap) {
+            ServiceCpmIndicator indicator = new ServiceCpmIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setValue(((Number)dbMap.get("value")).longValue());
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java
index 2dd2251..22126dd 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java
@@ -30,12 +30,18 @@ import org.apache.skywalking.oap.server.core.source.*;
 public class ServiceDispatcher implements SourceDispatcher<Service> {
 
     @Override public void dispatch(Service source) {
-        doServiceAvg(source);
-        doServiceCallsSum(source);
+        doServiceRespTime(source);
+        doServiceSla(source);
+        doServiceCpm(source);
+        doServiceP99(source);
+        doServiceP95(source);
+        doServiceP90(source);
+        doServiceP75(source);
+        doServiceP50(source);
     }
 
-    private void doServiceAvg(Service source) {
-        ServiceAvgIndicator indicator = new ServiceAvgIndicator();
+    private void doServiceRespTime(Service source) {
+        ServiceRespTimeIndicator indicator = new ServiceRespTimeIndicator();
 
 
         indicator.setTimeBucket(source.getTimeBucket());
@@ -43,8 +49,17 @@ public class ServiceDispatcher implements SourceDispatcher<Service> {
         indicator.combine(source.getLatency(), 1);
         IndicatorProcess.INSTANCE.in(indicator);
     }
-    private void doServiceCallsSum(Service source) {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+    private void doServiceSla(Service source) {
+        ServiceSlaIndicator indicator = new ServiceSlaIndicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.combine(new org.apache.skywalking.oap.server.core.analysis.indicator.expression.EqualMatch(), source.isStatus(), true);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doServiceCpm(Service source) {
+        ServiceCpmIndicator indicator = new ServiceCpmIndicator();
 
 
         indicator.setTimeBucket(source.getTimeBucket());
@@ -52,4 +67,49 @@ public class ServiceDispatcher implements SourceDispatcher<Service> {
         indicator.combine(1);
         IndicatorProcess.INSTANCE.in(indicator);
     }
+    private void doServiceP99(Service source) {
+        ServiceP99Indicator indicator = new ServiceP99Indicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.combine(source.getLatency(), 10);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doServiceP95(Service source) {
+        ServiceP95Indicator indicator = new ServiceP95Indicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.combine(source.getLatency(), 10);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doServiceP90(Service source) {
+        ServiceP90Indicator indicator = new ServiceP90Indicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.combine(source.getLatency(), 10);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doServiceP75(Service source) {
+        ServiceP75Indicator indicator = new ServiceP75Indicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.combine(source.getLatency(), 10);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doServiceP50(Service source) {
+        ServiceP50Indicator indicator = new ServiceP50Indicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.combine(source.getLatency(), 10);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP50Indicator.java
similarity index 73%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP50Indicator.java
index 64f17a1..ff0aebd 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP50Indicator.java
@@ -16,9 +16,11 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.all;
+package org.apache.skywalking.oap.server.core.analysis.generated.service;
 
 import java.util.*;
+import lombok.*;
+import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
 import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
 import org.apache.skywalking.oap.server.core.analysis.indicator.*;
@@ -36,17 +38,20 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "all_p95", builder = AllP95Indicator.Builder.class)
-public class AllP95Indicator extends P95Indicator implements AlarmSupported {
+@StorageEntity(name = "service_p50", builder = ServiceP50Indicator.Builder.class)
+public class ServiceP50Indicator extends P50Indicator implements AlarmSupported {
 
+    @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + entityId;
         return splitJointId;
     }
 
     @Override public int hashCode() {
         int result = 17;
+        result = 31 * result + entityId.hashCode();
         result = 31 * result + (int)getTimeBucket();
         return result;
     }
@@ -54,6 +59,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override public int remoteHashCode() {
         int result = 17;
+        result = 31 * result + entityId.hashCode();
         return result;
     }
 
@@ -65,7 +71,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         if (getClass() != obj.getClass())
             return false;
 
-        AllP95Indicator indicator = (AllP95Indicator)obj;
+        ServiceP50Indicator indicator = (ServiceP50Indicator)obj;
+        if (entityId != indicator.entityId)
+            return false;
 
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
@@ -75,6 +83,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
+        remoteBuilder.setDataStrings(0, getEntityId());
 
         remoteBuilder.setDataLongs(0, getTimeBucket());
 
@@ -87,6 +96,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public void deserialize(RemoteData remoteData) {
+        setEntityId(remoteData.getDataStrings(0));
 
         setTimeBucket(remoteData.getDataLongs(0));
 
@@ -94,7 +104,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         setValue(remoteData.getDataIntegers(0));
         setPrecision(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -102,13 +112,14 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_p95", Scope.All);
+        return new AlarmMeta("service_p50", Scope.Service, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP50Indicator indicator = new ServiceP50Indicator();
         indicator.setTimeBucket(toTimeBucketInHour());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -118,8 +129,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override
     public Indicator toDay() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP50Indicator indicator = new ServiceP50Indicator();
         indicator.setTimeBucket(toTimeBucketInDay());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -129,8 +141,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override
     public Indicator toMonth() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP50Indicator indicator = new ServiceP50Indicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -138,10 +151,11 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<AllP95Indicator> {
+    public static class Builder implements StorageBuilder<ServiceP50Indicator> {
 
-        @Override public Map<String, Object> data2Map(AllP95Indicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceP50Indicator storageData) {
             Map<String, Object> map = new HashMap<>();
+            map.put("entity_id", storageData.getEntityId());
             map.put("value", storageData.getValue());
             map.put("precision", storageData.getPrecision());
             map.put("detail_group", storageData.getDetailGroup());
@@ -149,11 +163,12 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
             return map;
         }
 
-        @Override public AllP95Indicator map2Data(Map<String, Object> dbMap) {
-            AllP95Indicator indicator = new AllP95Indicator();
+        @Override public ServiceP50Indicator map2Data(Map<String, Object> dbMap) {
+            ServiceP50Indicator indicator = new ServiceP50Indicator();
+            indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setValue(((Number)dbMap.get("value")).intValue());
             indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP75Indicator.java
similarity index 73%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP75Indicator.java
index 64f17a1..f67650c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP75Indicator.java
@@ -16,9 +16,11 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.all;
+package org.apache.skywalking.oap.server.core.analysis.generated.service;
 
 import java.util.*;
+import lombok.*;
+import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
 import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
 import org.apache.skywalking.oap.server.core.analysis.indicator.*;
@@ -36,17 +38,20 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "all_p95", builder = AllP95Indicator.Builder.class)
-public class AllP95Indicator extends P95Indicator implements AlarmSupported {
+@StorageEntity(name = "service_p75", builder = ServiceP75Indicator.Builder.class)
+public class ServiceP75Indicator extends P75Indicator implements AlarmSupported {
 
+    @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + entityId;
         return splitJointId;
     }
 
     @Override public int hashCode() {
         int result = 17;
+        result = 31 * result + entityId.hashCode();
         result = 31 * result + (int)getTimeBucket();
         return result;
     }
@@ -54,6 +59,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override public int remoteHashCode() {
         int result = 17;
+        result = 31 * result + entityId.hashCode();
         return result;
     }
 
@@ -65,7 +71,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         if (getClass() != obj.getClass())
             return false;
 
-        AllP95Indicator indicator = (AllP95Indicator)obj;
+        ServiceP75Indicator indicator = (ServiceP75Indicator)obj;
+        if (entityId != indicator.entityId)
+            return false;
 
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
@@ -75,6 +83,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
+        remoteBuilder.setDataStrings(0, getEntityId());
 
         remoteBuilder.setDataLongs(0, getTimeBucket());
 
@@ -87,6 +96,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public void deserialize(RemoteData remoteData) {
+        setEntityId(remoteData.getDataStrings(0));
 
         setTimeBucket(remoteData.getDataLongs(0));
 
@@ -94,7 +104,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         setValue(remoteData.getDataIntegers(0));
         setPrecision(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -102,13 +112,14 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_p95", Scope.All);
+        return new AlarmMeta("service_p75", Scope.Service, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP75Indicator indicator = new ServiceP75Indicator();
         indicator.setTimeBucket(toTimeBucketInHour());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -118,8 +129,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override
     public Indicator toDay() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP75Indicator indicator = new ServiceP75Indicator();
         indicator.setTimeBucket(toTimeBucketInDay());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -129,8 +141,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override
     public Indicator toMonth() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP75Indicator indicator = new ServiceP75Indicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -138,10 +151,11 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<AllP95Indicator> {
+    public static class Builder implements StorageBuilder<ServiceP75Indicator> {
 
-        @Override public Map<String, Object> data2Map(AllP95Indicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceP75Indicator storageData) {
             Map<String, Object> map = new HashMap<>();
+            map.put("entity_id", storageData.getEntityId());
             map.put("value", storageData.getValue());
             map.put("precision", storageData.getPrecision());
             map.put("detail_group", storageData.getDetailGroup());
@@ -149,11 +163,12 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
             return map;
         }
 
-        @Override public AllP95Indicator map2Data(Map<String, Object> dbMap) {
-            AllP95Indicator indicator = new AllP95Indicator();
+        @Override public ServiceP75Indicator map2Data(Map<String, Object> dbMap) {
+            ServiceP75Indicator indicator = new ServiceP75Indicator();
+            indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setValue(((Number)dbMap.get("value")).intValue());
             indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP90Indicator.java
similarity index 73%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP90Indicator.java
index 64f17a1..c46a4d0 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP90Indicator.java
@@ -16,9 +16,11 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.all;
+package org.apache.skywalking.oap.server.core.analysis.generated.service;
 
 import java.util.*;
+import lombok.*;
+import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
 import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
 import org.apache.skywalking.oap.server.core.analysis.indicator.*;
@@ -36,17 +38,20 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "all_p95", builder = AllP95Indicator.Builder.class)
-public class AllP95Indicator extends P95Indicator implements AlarmSupported {
+@StorageEntity(name = "service_p90", builder = ServiceP90Indicator.Builder.class)
+public class ServiceP90Indicator extends P90Indicator implements AlarmSupported {
 
+    @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + entityId;
         return splitJointId;
     }
 
     @Override public int hashCode() {
         int result = 17;
+        result = 31 * result + entityId.hashCode();
         result = 31 * result + (int)getTimeBucket();
         return result;
     }
@@ -54,6 +59,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override public int remoteHashCode() {
         int result = 17;
+        result = 31 * result + entityId.hashCode();
         return result;
     }
 
@@ -65,7 +71,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         if (getClass() != obj.getClass())
             return false;
 
-        AllP95Indicator indicator = (AllP95Indicator)obj;
+        ServiceP90Indicator indicator = (ServiceP90Indicator)obj;
+        if (entityId != indicator.entityId)
+            return false;
 
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
@@ -75,6 +83,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
+        remoteBuilder.setDataStrings(0, getEntityId());
 
         remoteBuilder.setDataLongs(0, getTimeBucket());
 
@@ -87,6 +96,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public void deserialize(RemoteData remoteData) {
+        setEntityId(remoteData.getDataStrings(0));
 
         setTimeBucket(remoteData.getDataLongs(0));
 
@@ -94,7 +104,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         setValue(remoteData.getDataIntegers(0));
         setPrecision(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -102,13 +112,14 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_p95", Scope.All);
+        return new AlarmMeta("service_p90", Scope.Service, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP90Indicator indicator = new ServiceP90Indicator();
         indicator.setTimeBucket(toTimeBucketInHour());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -118,8 +129,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override
     public Indicator toDay() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP90Indicator indicator = new ServiceP90Indicator();
         indicator.setTimeBucket(toTimeBucketInDay());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -129,8 +141,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override
     public Indicator toMonth() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP90Indicator indicator = new ServiceP90Indicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -138,10 +151,11 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<AllP95Indicator> {
+    public static class Builder implements StorageBuilder<ServiceP90Indicator> {
 
-        @Override public Map<String, Object> data2Map(AllP95Indicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceP90Indicator storageData) {
             Map<String, Object> map = new HashMap<>();
+            map.put("entity_id", storageData.getEntityId());
             map.put("value", storageData.getValue());
             map.put("precision", storageData.getPrecision());
             map.put("detail_group", storageData.getDetailGroup());
@@ -149,11 +163,12 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
             return map;
         }
 
-        @Override public AllP95Indicator map2Data(Map<String, Object> dbMap) {
-            AllP95Indicator indicator = new AllP95Indicator();
+        @Override public ServiceP90Indicator map2Data(Map<String, Object> dbMap) {
+            ServiceP90Indicator indicator = new ServiceP90Indicator();
+            indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setValue(((Number)dbMap.get("value")).intValue());
             indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP95Indicator.java
similarity index 73%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP95Indicator.java
index 64f17a1..078d3f3 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP95Indicator.java
@@ -16,9 +16,11 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.all;
+package org.apache.skywalking.oap.server.core.analysis.generated.service;
 
 import java.util.*;
+import lombok.*;
+import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
 import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
 import org.apache.skywalking.oap.server.core.analysis.indicator.*;
@@ -36,17 +38,20 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "all_p95", builder = AllP95Indicator.Builder.class)
-public class AllP95Indicator extends P95Indicator implements AlarmSupported {
+@StorageEntity(name = "service_p95", builder = ServiceP95Indicator.Builder.class)
+public class ServiceP95Indicator extends P95Indicator implements AlarmSupported {
 
+    @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + entityId;
         return splitJointId;
     }
 
     @Override public int hashCode() {
         int result = 17;
+        result = 31 * result + entityId.hashCode();
         result = 31 * result + (int)getTimeBucket();
         return result;
     }
@@ -54,6 +59,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override public int remoteHashCode() {
         int result = 17;
+        result = 31 * result + entityId.hashCode();
         return result;
     }
 
@@ -65,7 +71,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         if (getClass() != obj.getClass())
             return false;
 
-        AllP95Indicator indicator = (AllP95Indicator)obj;
+        ServiceP95Indicator indicator = (ServiceP95Indicator)obj;
+        if (entityId != indicator.entityId)
+            return false;
 
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
@@ -75,6 +83,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
+        remoteBuilder.setDataStrings(0, getEntityId());
 
         remoteBuilder.setDataLongs(0, getTimeBucket());
 
@@ -87,6 +96,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public void deserialize(RemoteData remoteData) {
+        setEntityId(remoteData.getDataStrings(0));
 
         setTimeBucket(remoteData.getDataLongs(0));
 
@@ -94,7 +104,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         setValue(remoteData.getDataIntegers(0));
         setPrecision(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -102,13 +112,14 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_p95", Scope.All);
+        return new AlarmMeta("service_p95", Scope.Service, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP95Indicator indicator = new ServiceP95Indicator();
         indicator.setTimeBucket(toTimeBucketInHour());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -118,8 +129,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override
     public Indicator toDay() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP95Indicator indicator = new ServiceP95Indicator();
         indicator.setTimeBucket(toTimeBucketInDay());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -129,8 +141,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override
     public Indicator toMonth() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP95Indicator indicator = new ServiceP95Indicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -138,10 +151,11 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<AllP95Indicator> {
+    public static class Builder implements StorageBuilder<ServiceP95Indicator> {
 
-        @Override public Map<String, Object> data2Map(AllP95Indicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceP95Indicator storageData) {
             Map<String, Object> map = new HashMap<>();
+            map.put("entity_id", storageData.getEntityId());
             map.put("value", storageData.getValue());
             map.put("precision", storageData.getPrecision());
             map.put("detail_group", storageData.getDetailGroup());
@@ -149,11 +163,12 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
             return map;
         }
 
-        @Override public AllP95Indicator map2Data(Map<String, Object> dbMap) {
-            AllP95Indicator indicator = new AllP95Indicator();
+        @Override public ServiceP95Indicator map2Data(Map<String, Object> dbMap) {
+            ServiceP95Indicator indicator = new ServiceP95Indicator();
+            indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setValue(((Number)dbMap.get("value")).intValue());
             indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP99Indicator.java
similarity index 73%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP99Indicator.java
index 64f17a1..5644ea4 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceP99Indicator.java
@@ -16,9 +16,11 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.all;
+package org.apache.skywalking.oap.server.core.analysis.generated.service;
 
 import java.util.*;
+import lombok.*;
+import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
 import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
 import org.apache.skywalking.oap.server.core.analysis.indicator.*;
@@ -36,17 +38,20 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "all_p95", builder = AllP95Indicator.Builder.class)
-public class AllP95Indicator extends P95Indicator implements AlarmSupported {
+@StorageEntity(name = "service_p99", builder = ServiceP99Indicator.Builder.class)
+public class ServiceP99Indicator extends P99Indicator implements AlarmSupported {
 
+    @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + entityId;
         return splitJointId;
     }
 
     @Override public int hashCode() {
         int result = 17;
+        result = 31 * result + entityId.hashCode();
         result = 31 * result + (int)getTimeBucket();
         return result;
     }
@@ -54,6 +59,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override public int remoteHashCode() {
         int result = 17;
+        result = 31 * result + entityId.hashCode();
         return result;
     }
 
@@ -65,7 +71,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         if (getClass() != obj.getClass())
             return false;
 
-        AllP95Indicator indicator = (AllP95Indicator)obj;
+        ServiceP99Indicator indicator = (ServiceP99Indicator)obj;
+        if (entityId != indicator.entityId)
+            return false;
 
         if (getTimeBucket() != indicator.getTimeBucket())
             return false;
@@ -75,6 +83,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
+        remoteBuilder.setDataStrings(0, getEntityId());
 
         remoteBuilder.setDataLongs(0, getTimeBucket());
 
@@ -87,6 +96,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public void deserialize(RemoteData remoteData) {
+        setEntityId(remoteData.getDataStrings(0));
 
         setTimeBucket(remoteData.getDataLongs(0));
 
@@ -94,7 +104,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         setValue(remoteData.getDataIntegers(0));
         setPrecision(remoteData.getDataIntegers(1));
 
-        setDetailGroup(new IntKeyLongValueArray(30));
+        setDetailGroup(new ArrayList<>(30));
         remoteData.getDataIntLongPairListList().forEach(element -> {
             getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
         });
@@ -102,13 +112,14 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("All_p95", Scope.All);
+        return new AlarmMeta("service_p99", Scope.Service, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP99Indicator indicator = new ServiceP99Indicator();
         indicator.setTimeBucket(toTimeBucketInHour());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -118,8 +129,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override
     public Indicator toDay() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP99Indicator indicator = new ServiceP99Indicator();
         indicator.setTimeBucket(toTimeBucketInDay());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -129,8 +141,9 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
 
     @Override
     public Indicator toMonth() {
-        AllP95Indicator indicator = new AllP95Indicator();
+        ServiceP99Indicator indicator = new ServiceP99Indicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
+        indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
         indicator.setPrecision(this.getPrecision());
         indicator.setDetailGroup(this.getDetailGroup());
@@ -138,10 +151,11 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<AllP95Indicator> {
+    public static class Builder implements StorageBuilder<ServiceP99Indicator> {
 
-        @Override public Map<String, Object> data2Map(AllP95Indicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceP99Indicator storageData) {
             Map<String, Object> map = new HashMap<>();
+            map.put("entity_id", storageData.getEntityId());
             map.put("value", storageData.getValue());
             map.put("precision", storageData.getPrecision());
             map.put("detail_group", storageData.getDetailGroup());
@@ -149,11 +163,12 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported {
             return map;
         }
 
-        @Override public AllP95Indicator map2Data(Map<String, Object> dbMap) {
-            AllP95Indicator indicator = new AllP95Indicator();
+        @Override public ServiceP99Indicator map2Data(Map<String, Object> dbMap) {
+            ServiceP99Indicator indicator = new ServiceP99Indicator();
+            indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setValue(((Number)dbMap.get("value")).intValue());
             indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
-            indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group"));
+            indicator.setDetailGroup((org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray)dbMap.get("detail_group"));
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return 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/ServiceRespTimeIndicator.java
similarity index 86%
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/service/ServiceRespTimeIndicator.java
index 9d87706..b07dc5e 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/ServiceRespTimeIndicator.java
@@ -38,8 +38,8 @@ 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 = "service_resp_time", builder = ServiceRespTimeIndicator.Builder.class)
+public class ServiceRespTimeIndicator extends LongAvgIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
 
@@ -71,7 +71,7 @@ public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSuppor
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceAvgIndicator indicator = (ServiceAvgIndicator)obj;
+        ServiceRespTimeIndicator indicator = (ServiceRespTimeIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -109,12 +109,12 @@ public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSuppor
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("Service_Avg", Scope.Service, entityId);
+        return new AlarmMeta("service_resp_time", Scope.Service, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        ServiceAvgIndicator indicator = new ServiceAvgIndicator();
+        ServiceRespTimeIndicator indicator = new ServiceRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setSummation(this.getSummation());
@@ -126,7 +126,7 @@ public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSuppor
 
     @Override
     public Indicator toDay() {
-        ServiceAvgIndicator indicator = new ServiceAvgIndicator();
+        ServiceRespTimeIndicator indicator = new ServiceRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setSummation(this.getSummation());
@@ -138,7 +138,7 @@ public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSuppor
 
     @Override
     public Indicator toMonth() {
-        ServiceAvgIndicator indicator = new ServiceAvgIndicator();
+        ServiceRespTimeIndicator indicator = new ServiceRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setSummation(this.getSummation());
@@ -148,9 +148,9 @@ public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSuppor
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<ServiceAvgIndicator> {
+    public static class Builder implements StorageBuilder<ServiceRespTimeIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceAvgIndicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceRespTimeIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("summation", storageData.getSummation());
@@ -160,8 +160,8 @@ public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSuppor
             return map;
         }
 
-        @Override public ServiceAvgIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceAvgIndicator indicator = new ServiceAvgIndicator();
+        @Override public ServiceRespTimeIndicator map2Data(Map<String, Object> dbMap) {
+            ServiceRespTimeIndicator indicator = new ServiceRespTimeIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setSummation(((Number)dbMap.get("summation")).longValue());
             indicator.setCount(((Number)dbMap.get("count")).intValue());
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/ServiceSlaIndicator.java
similarity index 72%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceAvgIndicator.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceSlaIndicator.java
index 9d87706..97a55ff 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/ServiceSlaIndicator.java
@@ -38,8 +38,8 @@ 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 = "service_sla", builder = ServiceSlaIndicator.Builder.class)
+public class ServiceSlaIndicator extends PercentIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
 
@@ -71,7 +71,7 @@ public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSuppor
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceAvgIndicator indicator = (ServiceAvgIndicator)obj;
+        ServiceSlaIndicator indicator = (ServiceSlaIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -85,12 +85,12 @@ public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSuppor
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
         remoteBuilder.setDataStrings(0, getEntityId());
 
-        remoteBuilder.setDataLongs(0, getSummation());
-        remoteBuilder.setDataLongs(1, getValue());
+        remoteBuilder.setDataLongs(0, getTotal());
+        remoteBuilder.setDataLongs(1, getMatch());
         remoteBuilder.setDataLongs(2, getTimeBucket());
 
 
-        remoteBuilder.setDataIntegers(0, getCount());
+        remoteBuilder.setDataIntegers(0, getPercentage());
 
         return remoteBuilder;
     }
@@ -98,74 +98,74 @@ public class ServiceAvgIndicator extends LongAvgIndicator implements AlarmSuppor
     @Override public void deserialize(RemoteData remoteData) {
         setEntityId(remoteData.getDataStrings(0));
 
-        setSummation(remoteData.getDataLongs(0));
-        setValue(remoteData.getDataLongs(1));
+        setTotal(remoteData.getDataLongs(0));
+        setMatch(remoteData.getDataLongs(1));
         setTimeBucket(remoteData.getDataLongs(2));
 
 
-        setCount(remoteData.getDataIntegers(0));
+        setPercentage(remoteData.getDataIntegers(0));
 
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("Service_Avg", Scope.Service, entityId);
+        return new AlarmMeta("service_sla", Scope.Service, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        ServiceAvgIndicator indicator = new ServiceAvgIndicator();
+        ServiceSlaIndicator indicator = new ServiceSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
-        indicator.setSummation(this.getSummation());
-        indicator.setCount(this.getCount());
-        indicator.setValue(this.getValue());
+        indicator.setTotal(this.getTotal());
+        indicator.setPercentage(this.getPercentage());
+        indicator.setMatch(this.getMatch());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toDay() {
-        ServiceAvgIndicator indicator = new ServiceAvgIndicator();
+        ServiceSlaIndicator indicator = new ServiceSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
-        indicator.setSummation(this.getSummation());
-        indicator.setCount(this.getCount());
-        indicator.setValue(this.getValue());
+        indicator.setTotal(this.getTotal());
+        indicator.setPercentage(this.getPercentage());
+        indicator.setMatch(this.getMatch());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
     @Override
     public Indicator toMonth() {
-        ServiceAvgIndicator indicator = new ServiceAvgIndicator();
+        ServiceSlaIndicator indicator = new ServiceSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
-        indicator.setSummation(this.getSummation());
-        indicator.setCount(this.getCount());
-        indicator.setValue(this.getValue());
+        indicator.setTotal(this.getTotal());
+        indicator.setPercentage(this.getPercentage());
+        indicator.setMatch(this.getMatch());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<ServiceAvgIndicator> {
+    public static class Builder implements StorageBuilder<ServiceSlaIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceAvgIndicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceSlaIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
-            map.put("summation", storageData.getSummation());
-            map.put("count", storageData.getCount());
-            map.put("value", storageData.getValue());
+            map.put("total", storageData.getTotal());
+            map.put("percentage", storageData.getPercentage());
+            map.put("match", storageData.getMatch());
             map.put("time_bucket", storageData.getTimeBucket());
             return map;
         }
 
-        @Override public ServiceAvgIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceAvgIndicator indicator = new ServiceAvgIndicator();
+        @Override public ServiceSlaIndicator map2Data(Map<String, Object> dbMap) {
+            ServiceSlaIndicator indicator = new ServiceSlaIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
-            indicator.setSummation(((Number)dbMap.get("summation")).longValue());
-            indicator.setCount(((Number)dbMap.get("count")).intValue());
-            indicator.setValue(((Number)dbMap.get("value")).longValue());
+            indicator.setTotal(((Number)dbMap.get("total")).longValue());
+            indicator.setPercentage(((Number)dbMap.get("percentage")).intValue());
+            indicator.setMatch(((Number)dbMap.get("match")).longValue());
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceCpmIndicator.java
similarity index 77%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceCpmIndicator.java
index 3be09ed..5203199 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceCpmIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.service;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstance;
 
 import java.util.*;
 import lombok.*;
@@ -38,10 +38,11 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "service_calls_sum", builder = ServiceCallsSumIndicator.Builder.class)
-public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSupported {
+@StorageEntity(name = "service_instance_cpm", builder = ServiceInstanceCpmIndicator.Builder.class)
+public class ServiceInstanceCpmIndicator extends CPMIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
+    @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
@@ -71,7 +72,7 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceCallsSumIndicator indicator = (ServiceCallsSumIndicator)obj;
+        ServiceInstanceCpmIndicator indicator = (ServiceInstanceCpmIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -89,6 +90,7 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         remoteBuilder.setDataLongs(1, getTimeBucket());
 
 
+        remoteBuilder.setDataIntegers(0, getServiceId());
 
         return remoteBuilder;
     }
@@ -100,19 +102,21 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         setTimeBucket(remoteData.getDataLongs(1));
 
 
+        setServiceId(remoteData.getDataIntegers(0));
 
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("Service_Calls_Sum", Scope.Service, entityId);
+        return new AlarmMeta("service_instance_cpm", Scope.ServiceInstance, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        ServiceInstanceCpmIndicator indicator = new ServiceInstanceCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
+        indicator.setServiceId(this.getServiceId());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
@@ -120,9 +124,10 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
 
     @Override
     public Indicator toDay() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        ServiceInstanceCpmIndicator indicator = new ServiceInstanceCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
+        indicator.setServiceId(this.getServiceId());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
@@ -130,27 +135,30 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
 
     @Override
     public Indicator toMonth() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        ServiceInstanceCpmIndicator indicator = new ServiceInstanceCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
+        indicator.setServiceId(this.getServiceId());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<ServiceCallsSumIndicator> {
+    public static class Builder implements StorageBuilder<ServiceInstanceCpmIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceCallsSumIndicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceInstanceCpmIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
+            map.put("service_id", storageData.getServiceId());
             map.put("value", storageData.getValue());
             map.put("time_bucket", storageData.getTimeBucket());
             return map;
         }
 
-        @Override public ServiceCallsSumIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        @Override public ServiceInstanceCpmIndicator map2Data(Map<String, Object> dbMap) {
+            ServiceInstanceCpmIndicator indicator = new ServiceInstanceCpmIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
+            indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
             indicator.setValue(((Number)dbMap.get("value")).longValue());
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
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
index baddcc6..91b32f5 100644
--- 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
@@ -31,6 +31,7 @@ public class ServiceInstanceDispatcher implements SourceDispatcher<ServiceInstan
     
     @Override public void dispatch(ServiceInstance source) {
         doServiceInstanceRespTime(source);
+        doServiceInstanceCpm(source);
     }
 
     private void doServiceInstanceRespTime(ServiceInstance source) {
@@ -43,4 +44,14 @@ public class ServiceInstanceDispatcher implements SourceDispatcher<ServiceInstan
         indicator.combine(source.getLatency(), 1);
         IndicatorProcess.INSTANCE.in(indicator);
     }
+    private void doServiceInstanceCpm(ServiceInstance source) {
+        ServiceInstanceCpmIndicator indicator = new ServiceInstanceCpmIndicator();
+
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceId(source.getServiceId());
+        indicator.combine(1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceRespTimeIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceRespTimeIndicator.java
index 6b2c390..5a69084 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceRespTimeIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstance/ServiceInstanceRespTimeIndicator.java
@@ -38,7 +38,7 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "serviceinstance_resptime", builder = ServiceInstanceRespTimeIndicator.Builder.class)
+@StorageEntity(name = "serviceinstance_resp_time", builder = ServiceInstanceRespTimeIndicator.Builder.class)
 public class ServiceInstanceRespTimeIndicator extends LongAvgIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
@@ -112,7 +112,7 @@ public class ServiceInstanceRespTimeIndicator extends LongAvgIndicator implement
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("ServiceInstance_RespTime", Scope.ServiceInstance, entityId);
+        return new AlarmMeta("serviceInstance_resp_time", Scope.ServiceInstance, entityId);
     }
 
     @Override
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmOldGcCountIndicator.java
similarity index 74%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmOldGcCountIndicator.java
index 3be09ed..0306793 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmOldGcCountIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.service;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmgc;
 
 import java.util.*;
 import lombok.*;
@@ -38,10 +38,11 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "service_calls_sum", builder = ServiceCallsSumIndicator.Builder.class)
-public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSupported {
+@StorageEntity(name = "instance_jvm_old_gc_count", builder = InstanceJvmOldGcCountIndicator.Builder.class)
+public class InstanceJvmOldGcCountIndicator extends SumIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
+    @Setter @Getter @Column(columnName = "service_instance_id")  private int serviceInstanceId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
@@ -71,7 +72,7 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceCallsSumIndicator indicator = (ServiceCallsSumIndicator)obj;
+        InstanceJvmOldGcCountIndicator indicator = (InstanceJvmOldGcCountIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -89,6 +90,7 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         remoteBuilder.setDataLongs(1, getTimeBucket());
 
 
+        remoteBuilder.setDataIntegers(0, getServiceInstanceId());
 
         return remoteBuilder;
     }
@@ -100,19 +102,21 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         setTimeBucket(remoteData.getDataLongs(1));
 
 
+        setServiceInstanceId(remoteData.getDataIntegers(0));
 
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("Service_Calls_Sum", Scope.Service, entityId);
+        return new AlarmMeta("instance_jvm_old_gc_count", Scope.ServiceInstanceJVMGC, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        InstanceJvmOldGcCountIndicator indicator = new InstanceJvmOldGcCountIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
+        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
@@ -120,9 +124,10 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
 
     @Override
     public Indicator toDay() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        InstanceJvmOldGcCountIndicator indicator = new InstanceJvmOldGcCountIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
+        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
@@ -130,27 +135,30 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
 
     @Override
     public Indicator toMonth() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        InstanceJvmOldGcCountIndicator indicator = new InstanceJvmOldGcCountIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
+        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<ServiceCallsSumIndicator> {
+    public static class Builder implements StorageBuilder<InstanceJvmOldGcCountIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceCallsSumIndicator storageData) {
+        @Override public Map<String, Object> data2Map(InstanceJvmOldGcCountIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
+            map.put("service_instance_id", storageData.getServiceInstanceId());
             map.put("value", storageData.getValue());
             map.put("time_bucket", storageData.getTimeBucket());
             return map;
         }
 
-        @Override public ServiceCallsSumIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        @Override public InstanceJvmOldGcCountIndicator map2Data(Map<String, Object> dbMap) {
+            InstanceJvmOldGcCountIndicator indicator = new InstanceJvmOldGcCountIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
+            indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
             indicator.setValue(((Number)dbMap.get("value")).longValue());
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return 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/serviceinstancejvmgc/InstanceJvmOldGcTimeIndicator.java
similarity index 88%
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/serviceinstancejvmgc/InstanceJvmOldGcTimeIndicator.java
index 009e25b..da0a00a 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/serviceinstancejvmgc/InstanceJvmOldGcTimeIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemory;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmgc;
 
 import java.util.*;
 import lombok.*;
@@ -38,8 +38,8 @@ 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 = "instance_jvm_old_gc_time", builder = InstanceJvmOldGcTimeIndicator.Builder.class)
+public class InstanceJvmOldGcTimeIndicator extends LongAvgIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_instance_id")  private int serviceInstanceId;
@@ -72,7 +72,7 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
         if (getClass() != obj.getClass())
             return false;
 
-        InstanceJvmMemoryMaxIndicator indicator = (InstanceJvmMemoryMaxIndicator)obj;
+        InstanceJvmOldGcTimeIndicator indicator = (InstanceJvmOldGcTimeIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -112,12 +112,12 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("instance_jvm_memory_max", Scope.ServiceInstanceJVMMemory, entityId);
+        return new AlarmMeta("instance_jvm_old_gc_time", Scope.ServiceInstanceJVMGC, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
+        InstanceJvmOldGcTimeIndicator indicator = new InstanceJvmOldGcTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
@@ -130,7 +130,7 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
 
     @Override
     public Indicator toDay() {
-        InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
+        InstanceJvmOldGcTimeIndicator indicator = new InstanceJvmOldGcTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
@@ -143,7 +143,7 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
 
     @Override
     public Indicator toMonth() {
-        InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
+        InstanceJvmOldGcTimeIndicator indicator = new InstanceJvmOldGcTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
@@ -154,9 +154,9 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<InstanceJvmMemoryMaxIndicator> {
+    public static class Builder implements StorageBuilder<InstanceJvmOldGcTimeIndicator> {
 
-        @Override public Map<String, Object> data2Map(InstanceJvmMemoryMaxIndicator storageData) {
+        @Override public Map<String, Object> data2Map(InstanceJvmOldGcTimeIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
@@ -167,8 +167,8 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
             return map;
         }
 
-        @Override public InstanceJvmMemoryMaxIndicator map2Data(Map<String, Object> dbMap) {
-            InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
+        @Override public InstanceJvmOldGcTimeIndicator map2Data(Map<String, Object> dbMap) {
+            InstanceJvmOldGcTimeIndicator indicator = new InstanceJvmOldGcTimeIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
             indicator.setSummation(((Number)dbMap.get("summation")).longValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmYoungGcCountIndicator.java
similarity index 73%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmYoungGcCountIndicator.java
index 3be09ed..8d53cbf 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceCallsSumIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmYoungGcCountIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.service;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmgc;
 
 import java.util.*;
 import lombok.*;
@@ -38,10 +38,11 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "service_calls_sum", builder = ServiceCallsSumIndicator.Builder.class)
-public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSupported {
+@StorageEntity(name = "instance_jvm_young_gc_count", builder = InstanceJvmYoungGcCountIndicator.Builder.class)
+public class InstanceJvmYoungGcCountIndicator extends SumIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
+    @Setter @Getter @Column(columnName = "service_instance_id")  private int serviceInstanceId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
@@ -71,7 +72,7 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceCallsSumIndicator indicator = (ServiceCallsSumIndicator)obj;
+        InstanceJvmYoungGcCountIndicator indicator = (InstanceJvmYoungGcCountIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -89,6 +90,7 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         remoteBuilder.setDataLongs(1, getTimeBucket());
 
 
+        remoteBuilder.setDataIntegers(0, getServiceInstanceId());
 
         return remoteBuilder;
     }
@@ -100,19 +102,21 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
         setTimeBucket(remoteData.getDataLongs(1));
 
 
+        setServiceInstanceId(remoteData.getDataIntegers(0));
 
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("Service_Calls_Sum", Scope.Service, entityId);
+        return new AlarmMeta("instance_jvm_young_gc_count", Scope.ServiceInstanceJVMGC, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        InstanceJvmYoungGcCountIndicator indicator = new InstanceJvmYoungGcCountIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
+        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
@@ -120,9 +124,10 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
 
     @Override
     public Indicator toDay() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        InstanceJvmYoungGcCountIndicator indicator = new InstanceJvmYoungGcCountIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
+        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
@@ -130,27 +135,30 @@ public class ServiceCallsSumIndicator extends SumIndicator implements AlarmSuppo
 
     @Override
     public Indicator toMonth() {
-        ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        InstanceJvmYoungGcCountIndicator indicator = new InstanceJvmYoungGcCountIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
+        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setValue(this.getValue());
         indicator.setTimeBucket(this.getTimeBucket());
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<ServiceCallsSumIndicator> {
+    public static class Builder implements StorageBuilder<InstanceJvmYoungGcCountIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceCallsSumIndicator storageData) {
+        @Override public Map<String, Object> data2Map(InstanceJvmYoungGcCountIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
+            map.put("service_instance_id", storageData.getServiceInstanceId());
             map.put("value", storageData.getValue());
             map.put("time_bucket", storageData.getTimeBucket());
             return map;
         }
 
-        @Override public ServiceCallsSumIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceCallsSumIndicator indicator = new ServiceCallsSumIndicator();
+        @Override public InstanceJvmYoungGcCountIndicator map2Data(Map<String, Object> dbMap) {
+            InstanceJvmYoungGcCountIndicator indicator = new InstanceJvmYoungGcCountIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
+            indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
             indicator.setValue(((Number)dbMap.get("value")).longValue());
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/ServiceInstanceJVMGCDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/ServiceInstanceJVMGCDispatcher.java
index 2ec3bce..d99291d 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/ServiceInstanceJVMGCDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/ServiceInstanceJVMGCDispatcher.java
@@ -32,6 +32,9 @@ public class ServiceInstanceJVMGCDispatcher implements SourceDispatcher<ServiceI
 
     @Override public void dispatch(ServiceInstanceJVMGC source) {
         doInstanceJvmYoungGcTime(source);
+        doInstanceJvmOldGcTime(source);
+        doInstanceJvmYoungGcCount(source);
+        doInstanceJvmOldGcCount(source);
     }
 
     private void doInstanceJvmYoungGcTime(ServiceInstanceJVMGC source) {
@@ -47,4 +50,43 @@ public class ServiceInstanceJVMGCDispatcher implements SourceDispatcher<ServiceI
         indicator.combine(source.getTime(), 1);
         IndicatorProcess.INSTANCE.in(indicator);
     }
+    private void doInstanceJvmOldGcTime(ServiceInstanceJVMGC source) {
+        InstanceJvmOldGcTimeIndicator indicator = new InstanceJvmOldGcTimeIndicator();
+
+        if (!new EqualMatch().setLeft(source.getPhrase()).setRight(GCPhrase.OLD).match()) {
+            return;
+        }
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getTime(), 1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doInstanceJvmYoungGcCount(ServiceInstanceJVMGC source) {
+        InstanceJvmYoungGcCountIndicator indicator = new InstanceJvmYoungGcCountIndicator();
+
+        if (!new EqualMatch().setLeft(source.getPhrase()).setRight(GCPhrase.NEW).match()) {
+            return;
+        }
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getCount());
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doInstanceJvmOldGcCount(ServiceInstanceJVMGC source) {
+        InstanceJvmOldGcCountIndicator indicator = new InstanceJvmOldGcCountIndicator();
+
+        if (!new EqualMatch().setLeft(source.getPhrase()).setRight(GCPhrase.OLD).match()) {
+            return;
+        }
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getCount());
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
 }
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/serviceinstancejvmmemory/InstanceJvmMemoryHeapIndicator.java
similarity index 86%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/InstanceJvmMemoryPoolMaxIndicator.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryHeapIndicator.java
index babf8d7..8ec556f 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/serviceinstancejvmmemory/InstanceJvmMemoryHeapIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemorypool;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemory;
 
 import java.util.*;
 import lombok.*;
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "instance_jvm_memory_pool_max", builder = InstanceJvmMemoryPoolMaxIndicator.Builder.class)
-public class InstanceJvmMemoryPoolMaxIndicator extends LongAvgIndicator implements AlarmSupported {
+@StorageEntity(name = "instance_jvm_memory_heap", builder = InstanceJvmMemoryHeapIndicator.Builder.class)
+public class InstanceJvmMemoryHeapIndicator extends LongAvgIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_instance_id")  private int serviceInstanceId;
@@ -72,7 +72,7 @@ public class InstanceJvmMemoryPoolMaxIndicator extends LongAvgIndicator implemen
         if (getClass() != obj.getClass())
             return false;
 
-        InstanceJvmMemoryPoolMaxIndicator indicator = (InstanceJvmMemoryPoolMaxIndicator)obj;
+        InstanceJvmMemoryHeapIndicator indicator = (InstanceJvmMemoryHeapIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -112,12 +112,12 @@ public class InstanceJvmMemoryPoolMaxIndicator extends LongAvgIndicator implemen
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("instance_jvm_memory_pool_max", Scope.ServiceInstanceJVMMemoryPool, entityId);
+        return new AlarmMeta("instance_jvm_memory_heap", Scope.ServiceInstanceJVMMemory, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        InstanceJvmMemoryPoolMaxIndicator indicator = new InstanceJvmMemoryPoolMaxIndicator();
+        InstanceJvmMemoryHeapIndicator indicator = new InstanceJvmMemoryHeapIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
@@ -130,7 +130,7 @@ public class InstanceJvmMemoryPoolMaxIndicator extends LongAvgIndicator implemen
 
     @Override
     public Indicator toDay() {
-        InstanceJvmMemoryPoolMaxIndicator indicator = new InstanceJvmMemoryPoolMaxIndicator();
+        InstanceJvmMemoryHeapIndicator indicator = new InstanceJvmMemoryHeapIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
@@ -143,7 +143,7 @@ public class InstanceJvmMemoryPoolMaxIndicator extends LongAvgIndicator implemen
 
     @Override
     public Indicator toMonth() {
-        InstanceJvmMemoryPoolMaxIndicator indicator = new InstanceJvmMemoryPoolMaxIndicator();
+        InstanceJvmMemoryHeapIndicator indicator = new InstanceJvmMemoryHeapIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
@@ -154,9 +154,9 @@ public class InstanceJvmMemoryPoolMaxIndicator extends LongAvgIndicator implemen
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<InstanceJvmMemoryPoolMaxIndicator> {
+    public static class Builder implements StorageBuilder<InstanceJvmMemoryHeapIndicator> {
 
-        @Override public Map<String, Object> data2Map(InstanceJvmMemoryPoolMaxIndicator storageData) {
+        @Override public Map<String, Object> data2Map(InstanceJvmMemoryHeapIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
@@ -167,8 +167,8 @@ public class InstanceJvmMemoryPoolMaxIndicator extends LongAvgIndicator implemen
             return map;
         }
 
-        @Override public InstanceJvmMemoryPoolMaxIndicator map2Data(Map<String, Object> dbMap) {
-            InstanceJvmMemoryPoolMaxIndicator indicator = new InstanceJvmMemoryPoolMaxIndicator();
+        @Override public InstanceJvmMemoryHeapIndicator map2Data(Map<String, Object> dbMap) {
+            InstanceJvmMemoryHeapIndicator indicator = new InstanceJvmMemoryHeapIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
             indicator.setSummation(((Number)dbMap.get("summation")).longValue());
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/InstanceJvmMemoryNoheapIndicator.java
similarity index 87%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryNoheapIndicator.java
index 009e25b..a42619f 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/InstanceJvmMemoryNoheapIndicator.java
@@ -38,8 +38,8 @@ 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 = "instance_jvm_memory_noheap", builder = InstanceJvmMemoryNoheapIndicator.Builder.class)
+public class InstanceJvmMemoryNoheapIndicator extends LongAvgIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
     @Setter @Getter @Column(columnName = "service_instance_id")  private int serviceInstanceId;
@@ -72,7 +72,7 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
         if (getClass() != obj.getClass())
             return false;
 
-        InstanceJvmMemoryMaxIndicator indicator = (InstanceJvmMemoryMaxIndicator)obj;
+        InstanceJvmMemoryNoheapIndicator indicator = (InstanceJvmMemoryNoheapIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -112,12 +112,12 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("instance_jvm_memory_max", Scope.ServiceInstanceJVMMemory, entityId);
+        return new AlarmMeta("instance_jvm_memory_noheap", Scope.ServiceInstanceJVMMemory, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
+        InstanceJvmMemoryNoheapIndicator indicator = new InstanceJvmMemoryNoheapIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
@@ -130,7 +130,7 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
 
     @Override
     public Indicator toDay() {
-        InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
+        InstanceJvmMemoryNoheapIndicator indicator = new InstanceJvmMemoryNoheapIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
@@ -143,7 +143,7 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
 
     @Override
     public Indicator toMonth() {
-        InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
+        InstanceJvmMemoryNoheapIndicator indicator = new InstanceJvmMemoryNoheapIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setServiceInstanceId(this.getServiceInstanceId());
@@ -154,9 +154,9 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<InstanceJvmMemoryMaxIndicator> {
+    public static class Builder implements StorageBuilder<InstanceJvmMemoryNoheapIndicator> {
 
-        @Override public Map<String, Object> data2Map(InstanceJvmMemoryMaxIndicator storageData) {
+        @Override public Map<String, Object> data2Map(InstanceJvmMemoryNoheapIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("entity_id", storageData.getEntityId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
@@ -167,8 +167,8 @@ public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator implements A
             return map;
         }
 
-        @Override public InstanceJvmMemoryMaxIndicator map2Data(Map<String, Object> dbMap) {
-            InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
+        @Override public InstanceJvmMemoryNoheapIndicator map2Data(Map<String, Object> dbMap) {
+            InstanceJvmMemoryNoheapIndicator indicator = new InstanceJvmMemoryNoheapIndicator();
             indicator.setEntityId((String)dbMap.get("entity_id"));
             indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
             indicator.setSummation(((Number)dbMap.get("summation")).longValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/ServiceInstanceJVMMemoryDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/ServiceInstanceJVMMemoryDispatcher.java
index d73bf03..0269e76 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/ServiceInstanceJVMMemoryDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/ServiceInstanceJVMMemoryDispatcher.java
@@ -20,6 +20,7 @@ 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.analysis.indicator.expression.*;
 import org.apache.skywalking.oap.server.core.source.*;
 
 /**
@@ -30,12 +31,29 @@ import org.apache.skywalking.oap.server.core.source.*;
 public class ServiceInstanceJVMMemoryDispatcher implements SourceDispatcher<ServiceInstanceJVMMemory> {
 
     @Override public void dispatch(ServiceInstanceJVMMemory source) {
-        doInstanceJvmMemoryMax(source);
+        doInstanceJvmMemoryHeap(source);
+        doInstanceJvmMemoryNoheap(source);
     }
 
-    private void doInstanceJvmMemoryMax(ServiceInstanceJVMMemory source) {
-        InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
+    private void doInstanceJvmMemoryHeap(ServiceInstanceJVMMemory source) {
+        InstanceJvmMemoryHeapIndicator indicator = new InstanceJvmMemoryHeapIndicator();
 
+        if (!new EqualMatch().setLeft(source.isIsHeap()).setRight(true).match()) {
+            return;
+        }
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getMax(), 1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doInstanceJvmMemoryNoheap(ServiceInstanceJVMMemory source) {
+        InstanceJvmMemoryNoheapIndicator indicator = new InstanceJvmMemoryNoheapIndicator();
+
+        if (!new EqualMatch().setLeft(source.isIsHeap()).setRight(false).match()) {
+            return;
+        }
 
         indicator.setTimeBucket(source.getTimeBucket());
         indicator.setEntityId(source.getEntityId());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/ServiceInstanceJVMMemoryPoolDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/ServiceInstanceJVMMemoryPoolDispatcher.java
index 8c5ecc2..409f135 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/ServiceInstanceJVMMemoryPoolDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/ServiceInstanceJVMMemoryPoolDispatcher.java
@@ -19,7 +19,6 @@
 package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemorypool;
 
 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.*;
 
 /**
@@ -30,17 +29,6 @@ import org.apache.skywalking.oap.server.core.source.*;
 public class ServiceInstanceJVMMemoryPoolDispatcher implements SourceDispatcher<ServiceInstanceJVMMemoryPool> {
 
     @Override public void dispatch(ServiceInstanceJVMMemoryPool source) {
-        doInstanceJvmMemoryPoolMax(source);
     }
 
-    private void doInstanceJvmMemoryPoolMax(ServiceInstanceJVMMemoryPool source) {
-        InstanceJvmMemoryPoolMaxIndicator indicator = new InstanceJvmMemoryPoolMaxIndicator();
-
-
-        indicator.setTimeBucket(source.getTimeBucket());
-        indicator.setEntityId(source.getEntityId());
-        indicator.setServiceInstanceId(source.getServiceInstanceId());
-        indicator.combine(source.getMax(), 1);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancerelation/ServiceInstanceRelationAvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancerelation/ServiceInstanceRelationAvgIndicator.java
deleted file mode 100644
index 981ad60..0000000
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancerelation/ServiceInstanceRelationAvgIndicator.java
+++ /dev/null
@@ -1,189 +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 java.util.*;
-import lombok.*;
-import org.apache.skywalking.oap.server.core.Const;
-import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
-import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
-import org.apache.skywalking.oap.server.core.analysis.indicator.*;
-import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
-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.Scope;
-
-/**
- * This class is auto generated. Please don't change this class manually.
- *
- * @author Observability Analysis Language code generator
- */
-@IndicatorType
-@StreamData
-@StorageEntity(name = "serviceinstancerelation_avg", builder = ServiceInstanceRelationAvgIndicator.Builder.class)
-public class ServiceInstanceRelationAvgIndicator extends LongAvgIndicator implements AlarmSupported {
-
-    @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
-    @Setter @Getter @Column(columnName = "source_service_id")  private int sourceServiceId;
-    @Setter @Getter @Column(columnName = "destServiceId")  private int destServiceId;
-
-    @Override public String id() {
-        String splitJointId = String.valueOf(getTimeBucket());
-        splitJointId += Const.ID_SPLIT + entityId;
-        return splitJointId;
-    }
-
-    @Override public int hashCode() {
-        int result = 17;
-        result = 31 * result + entityId.hashCode();
-        result = 31 * result + (int)getTimeBucket();
-        return result;
-    }
-
-
-    @Override public int remoteHashCode() {
-        int result = 17;
-        result = 31 * result + entityId.hashCode();
-        return result;
-    }
-
-    @Override public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-
-        ServiceInstanceRelationAvgIndicator indicator = (ServiceInstanceRelationAvgIndicator)obj;
-        if (entityId != indicator.entityId)
-            return false;
-
-        if (getTimeBucket() != indicator.getTimeBucket())
-            return false;
-
-        return true;
-    }
-
-    @Override public RemoteData.Builder serialize() {
-        RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
-        remoteBuilder.setDataStrings(0, getEntityId());
-
-        remoteBuilder.setDataLongs(0, getSummation());
-        remoteBuilder.setDataLongs(1, getValue());
-        remoteBuilder.setDataLongs(2, getTimeBucket());
-
-
-        remoteBuilder.setDataIntegers(0, getSourceServiceId());
-        remoteBuilder.setDataIntegers(1, getDestServiceId());
-        remoteBuilder.setDataIntegers(2, getCount());
-
-        return remoteBuilder;
-    }
-
-    @Override public void deserialize(RemoteData remoteData) {
-        setEntityId(remoteData.getDataStrings(0));
-
-        setSummation(remoteData.getDataLongs(0));
-        setValue(remoteData.getDataLongs(1));
-        setTimeBucket(remoteData.getDataLongs(2));
-
-
-        setSourceServiceId(remoteData.getDataIntegers(0));
-        setDestServiceId(remoteData.getDataIntegers(1));
-        setCount(remoteData.getDataIntegers(2));
-
-
-    }
-
-    @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("ServiceInstanceRelation_Avg", Scope.ServiceInstanceRelation, entityId);
-    }
-
-    @Override
-    public Indicator toHour() {
-        ServiceInstanceRelationAvgIndicator indicator = new ServiceInstanceRelationAvgIndicator();
-        indicator.setTimeBucket(toTimeBucketInHour());
-        indicator.setEntityId(this.getEntityId());
-        indicator.setSourceServiceId(this.getSourceServiceId());
-        indicator.setDestServiceId(this.getDestServiceId());
-        indicator.setSummation(this.getSummation());
-        indicator.setCount(this.getCount());
-        indicator.setValue(this.getValue());
-        indicator.setTimeBucket(this.getTimeBucket());
-        return indicator;
-    }
-
-    @Override
-    public Indicator toDay() {
-        ServiceInstanceRelationAvgIndicator indicator = new ServiceInstanceRelationAvgIndicator();
-        indicator.setTimeBucket(toTimeBucketInDay());
-        indicator.setEntityId(this.getEntityId());
-        indicator.setSourceServiceId(this.getSourceServiceId());
-        indicator.setDestServiceId(this.getDestServiceId());
-        indicator.setSummation(this.getSummation());
-        indicator.setCount(this.getCount());
-        indicator.setValue(this.getValue());
-        indicator.setTimeBucket(this.getTimeBucket());
-        return indicator;
-    }
-
-    @Override
-    public Indicator toMonth() {
-        ServiceInstanceRelationAvgIndicator indicator = new ServiceInstanceRelationAvgIndicator();
-        indicator.setTimeBucket(toTimeBucketInMonth());
-        indicator.setEntityId(this.getEntityId());
-        indicator.setSourceServiceId(this.getSourceServiceId());
-        indicator.setDestServiceId(this.getDestServiceId());
-        indicator.setSummation(this.getSummation());
-        indicator.setCount(this.getCount());
-        indicator.setValue(this.getValue());
-        indicator.setTimeBucket(this.getTimeBucket());
-        return indicator;
-    }
-
-    public static class Builder implements StorageBuilder<ServiceInstanceRelationAvgIndicator> {
-
-        @Override public Map<String, Object> data2Map(ServiceInstanceRelationAvgIndicator storageData) {
-            Map<String, Object> map = new HashMap<>();
-            map.put("entity_id", storageData.getEntityId());
-            map.put("source_service_id", storageData.getSourceServiceId());
-            map.put("destServiceId", storageData.getDestServiceId());
-            map.put("summation", storageData.getSummation());
-            map.put("count", storageData.getCount());
-            map.put("value", storageData.getValue());
-            map.put("time_bucket", storageData.getTimeBucket());
-            return map;
-        }
-
-        @Override public ServiceInstanceRelationAvgIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceInstanceRelationAvgIndicator indicator = new ServiceInstanceRelationAvgIndicator();
-            indicator.setEntityId((String)dbMap.get("entity_id"));
-            indicator.setSourceServiceId(((Number)dbMap.get("source_service_id")).intValue());
-            indicator.setDestServiceId(((Number)dbMap.get("destServiceId")).intValue());
-            indicator.setSummation(((Number)dbMap.get("summation")).longValue());
-            indicator.setCount(((Number)dbMap.get("count")).intValue());
-            indicator.setValue(((Number)dbMap.get("value")).longValue());
-            indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
-            return indicator;
-        }
-    }
-}
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
index b2022af..15af664 100644
--- 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
@@ -19,7 +19,6 @@
 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.*;
 
 /**
@@ -30,18 +29,6 @@ import org.apache.skywalking.oap.server.core.source.*;
 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.setEntityId(source.getEntityId());
-        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/analysis/generated/endpoint/EndpointPercentIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientCallSlaIndicator.java
similarity index 69%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientCallSlaIndicator.java
index 44b98f2..4dfc6aa 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/servicerelation/ServiceRelationClientCallSlaIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
+package org.apache.skywalking.oap.server.core.analysis.generated.servicerelation;
 
 import java.util.*;
 import lombok.*;
@@ -38,12 +38,10 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_percent", builder = EndpointPercentIndicator.Builder.class)
-public class EndpointPercentIndicator extends PercentIndicator implements AlarmSupported {
+@StorageEntity(name = "service_relation_client_call_sla", builder = ServiceRelationClientCallSlaIndicator.Builder.class)
+public class ServiceRelationClientCallSlaIndicator extends PercentIndicator implements AlarmSupported {
 
-    @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
-    @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
-    @Setter @Getter @Column(columnName = "service_instance_id")  private int serviceInstanceId;
+    @Setter @Getter @Column(columnName = "source_service_id") @IDColumn private String entityId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
@@ -73,7 +71,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointPercentIndicator indicator = (EndpointPercentIndicator)obj;
+        ServiceRelationClientCallSlaIndicator indicator = (ServiceRelationClientCallSlaIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -92,9 +90,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         remoteBuilder.setDataLongs(2, getTimeBucket());
 
 
-        remoteBuilder.setDataIntegers(0, getServiceId());
-        remoteBuilder.setDataIntegers(1, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(2, getPercentage());
+        remoteBuilder.setDataIntegers(0, getPercentage());
 
         return remoteBuilder;
     }
@@ -107,24 +103,20 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         setTimeBucket(remoteData.getDataLongs(2));
 
 
-        setServiceId(remoteData.getDataIntegers(0));
-        setServiceInstanceId(remoteData.getDataIntegers(1));
-        setPercentage(remoteData.getDataIntegers(2));
+        setPercentage(remoteData.getDataIntegers(0));
 
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("endpoint_percent", Scope.Endpoint, entityId);
+        return new AlarmMeta("service_relation_client_call_sla", Scope.ServiceRelation, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        ServiceRelationClientCallSlaIndicator indicator = new ServiceRelationClientCallSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
-        indicator.setServiceId(this.getServiceId());
-        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setTotal(this.getTotal());
         indicator.setPercentage(this.getPercentage());
         indicator.setMatch(this.getMatch());
@@ -134,11 +126,9 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
 
     @Override
     public Indicator toDay() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        ServiceRelationClientCallSlaIndicator indicator = new ServiceRelationClientCallSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
-        indicator.setServiceId(this.getServiceId());
-        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setTotal(this.getTotal());
         indicator.setPercentage(this.getPercentage());
         indicator.setMatch(this.getMatch());
@@ -148,11 +138,9 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
 
     @Override
     public Indicator toMonth() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        ServiceRelationClientCallSlaIndicator indicator = new ServiceRelationClientCallSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
-        indicator.setServiceId(this.getServiceId());
-        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setTotal(this.getTotal());
         indicator.setPercentage(this.getPercentage());
         indicator.setMatch(this.getMatch());
@@ -160,13 +148,11 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<EndpointPercentIndicator> {
+    public static class Builder implements StorageBuilder<ServiceRelationClientCallSlaIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointPercentIndicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceRelationClientCallSlaIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
-            map.put("entity_id", storageData.getEntityId());
-            map.put("service_id", storageData.getServiceId());
-            map.put("service_instance_id", storageData.getServiceInstanceId());
+            map.put("source_service_id", storageData.getEntityId());
             map.put("total", storageData.getTotal());
             map.put("percentage", storageData.getPercentage());
             map.put("match", storageData.getMatch());
@@ -174,11 +160,9 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
             return map;
         }
 
-        @Override public EndpointPercentIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointPercentIndicator indicator = new EndpointPercentIndicator();
-            indicator.setEntityId((String)dbMap.get("entity_id"));
-            indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
-            indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
+        @Override public ServiceRelationClientCallSlaIndicator map2Data(Map<String, Object> dbMap) {
+            ServiceRelationClientCallSlaIndicator indicator = new ServiceRelationClientCallSlaIndicator();
+            indicator.setEntityId((String)dbMap.get("source_service_id"));
             indicator.setTotal(((Number)dbMap.get("total")).longValue());
             indicator.setPercentage(((Number)dbMap.get("percentage")).intValue());
             indicator.setMatch(((Number)dbMap.get("match")).longValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationServerCallsSumIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientCpmIndicator.java
similarity index 82%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationServerCallsSumIndicator.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientCpmIndicator.java
index f288b7b..e583f42 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationServerCallsSumIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientCpmIndicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "service_relation_server_calls_sum", builder = ServiceRelationServerCallsSumIndicator.Builder.class)
-public class ServiceRelationServerCallsSumIndicator extends SumIndicator implements AlarmSupported {
+@StorageEntity(name = "service_relation_client_cpm", builder = ServiceRelationClientCpmIndicator.Builder.class)
+public class ServiceRelationClientCpmIndicator extends CPMIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "source_service_id") @IDColumn private String entityId;
 
@@ -71,7 +71,7 @@ public class ServiceRelationServerCallsSumIndicator extends SumIndicator impleme
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceRelationServerCallsSumIndicator indicator = (ServiceRelationServerCallsSumIndicator)obj;
+        ServiceRelationClientCpmIndicator indicator = (ServiceRelationClientCpmIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -105,12 +105,12 @@ public class ServiceRelationServerCallsSumIndicator extends SumIndicator impleme
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("Service_Relation_Server_Calls_Sum", Scope.ServiceRelation, entityId);
+        return new AlarmMeta("service_relation_client_cpm", Scope.ServiceRelation, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        ServiceRelationServerCallsSumIndicator indicator = new ServiceRelationServerCallsSumIndicator();
+        ServiceRelationClientCpmIndicator indicator = new ServiceRelationClientCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
@@ -120,7 +120,7 @@ public class ServiceRelationServerCallsSumIndicator extends SumIndicator impleme
 
     @Override
     public Indicator toDay() {
-        ServiceRelationServerCallsSumIndicator indicator = new ServiceRelationServerCallsSumIndicator();
+        ServiceRelationClientCpmIndicator indicator = new ServiceRelationClientCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
@@ -130,7 +130,7 @@ public class ServiceRelationServerCallsSumIndicator extends SumIndicator impleme
 
     @Override
     public Indicator toMonth() {
-        ServiceRelationServerCallsSumIndicator indicator = new ServiceRelationServerCallsSumIndicator();
+        ServiceRelationClientCpmIndicator indicator = new ServiceRelationClientCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
@@ -138,9 +138,9 @@ public class ServiceRelationServerCallsSumIndicator extends SumIndicator impleme
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<ServiceRelationServerCallsSumIndicator> {
+    public static class Builder implements StorageBuilder<ServiceRelationClientCpmIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceRelationServerCallsSumIndicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceRelationClientCpmIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("source_service_id", storageData.getEntityId());
             map.put("value", storageData.getValue());
@@ -148,8 +148,8 @@ public class ServiceRelationServerCallsSumIndicator extends SumIndicator impleme
             return map;
         }
 
-        @Override public ServiceRelationServerCallsSumIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceRelationServerCallsSumIndicator indicator = new ServiceRelationServerCallsSumIndicator();
+        @Override public ServiceRelationClientCpmIndicator map2Data(Map<String, Object> dbMap) {
+            ServiceRelationClientCpmIndicator indicator = new ServiceRelationClientCpmIndicator();
             indicator.setEntityId((String)dbMap.get("source_service_id"));
             indicator.setValue(((Number)dbMap.get("value")).longValue());
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationAvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientRespTimeIndicator.java
similarity index 84%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationAvgIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientRespTimeIndicator.java
index 2ec2856..b0c5bb8 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationAvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientRespTimeIndicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "servicerelation_avg", builder = ServiceRelationAvgIndicator.Builder.class)
-public class ServiceRelationAvgIndicator extends LongAvgIndicator implements AlarmSupported {
+@StorageEntity(name = "service_relation_client_resp_time", builder = ServiceRelationClientRespTimeIndicator.Builder.class)
+public class ServiceRelationClientRespTimeIndicator extends LongAvgIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "source_service_id") @IDColumn private String entityId;
 
@@ -71,7 +71,7 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceRelationAvgIndicator indicator = (ServiceRelationAvgIndicator)obj;
+        ServiceRelationClientRespTimeIndicator indicator = (ServiceRelationClientRespTimeIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -109,12 +109,12 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("ServiceRelation_Avg", Scope.ServiceRelation, entityId);
+        return new AlarmMeta("service_relation_client_resp_time", Scope.ServiceRelation, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        ServiceRelationAvgIndicator indicator = new ServiceRelationAvgIndicator();
+        ServiceRelationClientRespTimeIndicator indicator = new ServiceRelationClientRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setSummation(this.getSummation());
@@ -126,7 +126,7 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
 
     @Override
     public Indicator toDay() {
-        ServiceRelationAvgIndicator indicator = new ServiceRelationAvgIndicator();
+        ServiceRelationClientRespTimeIndicator indicator = new ServiceRelationClientRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setSummation(this.getSummation());
@@ -138,7 +138,7 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
 
     @Override
     public Indicator toMonth() {
-        ServiceRelationAvgIndicator indicator = new ServiceRelationAvgIndicator();
+        ServiceRelationClientRespTimeIndicator indicator = new ServiceRelationClientRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setSummation(this.getSummation());
@@ -148,9 +148,9 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<ServiceRelationAvgIndicator> {
+    public static class Builder implements StorageBuilder<ServiceRelationClientRespTimeIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceRelationAvgIndicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceRelationClientRespTimeIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("source_service_id", storageData.getEntityId());
             map.put("summation", storageData.getSummation());
@@ -160,8 +160,8 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
             return map;
         }
 
-        @Override public ServiceRelationAvgIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceRelationAvgIndicator indicator = new ServiceRelationAvgIndicator();
+        @Override public ServiceRelationClientRespTimeIndicator map2Data(Map<String, Object> dbMap) {
+            ServiceRelationClientRespTimeIndicator indicator = new ServiceRelationClientRespTimeIndicator();
             indicator.setEntityId((String)dbMap.get("source_service_id"));
             indicator.setSummation(((Number)dbMap.get("summation")).longValue());
             indicator.setCount(((Number)dbMap.get("count")).intValue());
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
index ee505f1..b61c06a 100644
--- 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
@@ -31,13 +31,16 @@ import org.apache.skywalking.oap.server.core.source.*;
 public class ServiceRelationDispatcher implements SourceDispatcher<ServiceRelation> {
 
     @Override public void dispatch(ServiceRelation source) {
-        doServiceRelationClientCallsSum(source);
-        doServiceRelationServerCallsSum(source);
-        doServiceRelationAvg(source);
+        doServiceRelationClientCpm(source);
+        doServiceRelationServerCpm(source);
+        doServiceRelationClientCallSla(source);
+        doServiceRelationServerCallSla(source);
+        doServiceRelationClientRespTime(source);
+        doServiceRelationServerRespTime(source);
     }
 
-    private void doServiceRelationClientCallsSum(ServiceRelation source) {
-        ServiceRelationClientCallsSumIndicator indicator = new ServiceRelationClientCallsSumIndicator();
+    private void doServiceRelationClientCpm(ServiceRelation source) {
+        ServiceRelationClientCpmIndicator indicator = new ServiceRelationClientCpmIndicator();
 
         if (!new EqualMatch().setLeft(source.getDetectPoint()).setRight(DetectPoint.CLIENT).match()) {
             return;
@@ -48,8 +51,8 @@ public class ServiceRelationDispatcher implements SourceDispatcher<ServiceRelati
         indicator.combine(1);
         IndicatorProcess.INSTANCE.in(indicator);
     }
-    private void doServiceRelationServerCallsSum(ServiceRelation source) {
-        ServiceRelationServerCallsSumIndicator indicator = new ServiceRelationServerCallsSumIndicator();
+    private void doServiceRelationServerCpm(ServiceRelation source) {
+        ServiceRelationServerCpmIndicator indicator = new ServiceRelationServerCpmIndicator();
 
         if (!new EqualMatch().setLeft(source.getDetectPoint()).setRight(DetectPoint.SERVER).match()) {
             return;
@@ -60,9 +63,48 @@ public class ServiceRelationDispatcher implements SourceDispatcher<ServiceRelati
         indicator.combine(1);
         IndicatorProcess.INSTANCE.in(indicator);
     }
-    private void doServiceRelationAvg(ServiceRelation source) {
-        ServiceRelationAvgIndicator indicator = new ServiceRelationAvgIndicator();
+    private void doServiceRelationClientCallSla(ServiceRelation source) {
+        ServiceRelationClientCallSlaIndicator indicator = new ServiceRelationClientCallSlaIndicator();
 
+        if (!new EqualMatch().setLeft(source.getDetectPoint()).setRight(DetectPoint.CLIENT).match()) {
+            return;
+        }
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.combine(new org.apache.skywalking.oap.server.core.analysis.indicator.expression.EqualMatch(), source.isStatus(), true);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doServiceRelationServerCallSla(ServiceRelation source) {
+        ServiceRelationServerCallSlaIndicator indicator = new ServiceRelationServerCallSlaIndicator();
+
+        if (!new EqualMatch().setLeft(source.getDetectPoint()).setRight(DetectPoint.SERVER).match()) {
+            return;
+        }
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.combine(new org.apache.skywalking.oap.server.core.analysis.indicator.expression.EqualMatch(), source.isStatus(), true);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doServiceRelationClientRespTime(ServiceRelation source) {
+        ServiceRelationClientRespTimeIndicator indicator = new ServiceRelationClientRespTimeIndicator();
+
+        if (!new EqualMatch().setLeft(source.getDetectPoint()).setRight(DetectPoint.CLIENT).match()) {
+            return;
+        }
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setEntityId(source.getEntityId());
+        indicator.combine(source.getLatency(), 1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
+    private void doServiceRelationServerRespTime(ServiceRelation source) {
+        ServiceRelationServerRespTimeIndicator indicator = new ServiceRelationServerRespTimeIndicator();
+
+        if (!new EqualMatch().setLeft(source.getDetectPoint()).setRight(DetectPoint.SERVER).match()) {
+            return;
+        }
 
         indicator.setTimeBucket(source.getTimeBucket());
         indicator.setEntityId(source.getEntityId());
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/servicerelation/ServiceRelationServerCallSlaIndicator.java
similarity index 69%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationServerCallSlaIndicator.java
index 44b98f2..a3cd1b6 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/servicerelation/ServiceRelationServerCallSlaIndicator.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
+package org.apache.skywalking.oap.server.core.analysis.generated.servicerelation;
 
 import java.util.*;
 import lombok.*;
@@ -38,12 +38,10 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_percent", builder = EndpointPercentIndicator.Builder.class)
-public class EndpointPercentIndicator extends PercentIndicator implements AlarmSupported {
+@StorageEntity(name = "service_relation_server_call_sla", builder = ServiceRelationServerCallSlaIndicator.Builder.class)
+public class ServiceRelationServerCallSlaIndicator extends PercentIndicator implements AlarmSupported {
 
-    @Setter @Getter @Column(columnName = "entity_id") @IDColumn private String entityId;
-    @Setter @Getter @Column(columnName = "service_id")  private int serviceId;
-    @Setter @Getter @Column(columnName = "service_instance_id")  private int serviceInstanceId;
+    @Setter @Getter @Column(columnName = "source_service_id") @IDColumn private String entityId;
 
     @Override public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
@@ -73,7 +71,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointPercentIndicator indicator = (EndpointPercentIndicator)obj;
+        ServiceRelationServerCallSlaIndicator indicator = (ServiceRelationServerCallSlaIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -92,9 +90,7 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         remoteBuilder.setDataLongs(2, getTimeBucket());
 
 
-        remoteBuilder.setDataIntegers(0, getServiceId());
-        remoteBuilder.setDataIntegers(1, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(2, getPercentage());
+        remoteBuilder.setDataIntegers(0, getPercentage());
 
         return remoteBuilder;
     }
@@ -107,24 +103,20 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         setTimeBucket(remoteData.getDataLongs(2));
 
 
-        setServiceId(remoteData.getDataIntegers(0));
-        setServiceInstanceId(remoteData.getDataIntegers(1));
-        setPercentage(remoteData.getDataIntegers(2));
+        setPercentage(remoteData.getDataIntegers(0));
 
 
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("endpoint_percent", Scope.Endpoint, entityId);
+        return new AlarmMeta("service_relation_server_call_sla", Scope.ServiceRelation, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        ServiceRelationServerCallSlaIndicator indicator = new ServiceRelationServerCallSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
-        indicator.setServiceId(this.getServiceId());
-        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setTotal(this.getTotal());
         indicator.setPercentage(this.getPercentage());
         indicator.setMatch(this.getMatch());
@@ -134,11 +126,9 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
 
     @Override
     public Indicator toDay() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        ServiceRelationServerCallSlaIndicator indicator = new ServiceRelationServerCallSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
-        indicator.setServiceId(this.getServiceId());
-        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setTotal(this.getTotal());
         indicator.setPercentage(this.getPercentage());
         indicator.setMatch(this.getMatch());
@@ -148,11 +138,9 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
 
     @Override
     public Indicator toMonth() {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+        ServiceRelationServerCallSlaIndicator indicator = new ServiceRelationServerCallSlaIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
-        indicator.setServiceId(this.getServiceId());
-        indicator.setServiceInstanceId(this.getServiceInstanceId());
         indicator.setTotal(this.getTotal());
         indicator.setPercentage(this.getPercentage());
         indicator.setMatch(this.getMatch());
@@ -160,13 +148,11 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<EndpointPercentIndicator> {
+    public static class Builder implements StorageBuilder<ServiceRelationServerCallSlaIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointPercentIndicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceRelationServerCallSlaIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
-            map.put("entity_id", storageData.getEntityId());
-            map.put("service_id", storageData.getServiceId());
-            map.put("service_instance_id", storageData.getServiceInstanceId());
+            map.put("source_service_id", storageData.getEntityId());
             map.put("total", storageData.getTotal());
             map.put("percentage", storageData.getPercentage());
             map.put("match", storageData.getMatch());
@@ -174,11 +160,9 @@ public class EndpointPercentIndicator extends PercentIndicator implements AlarmS
             return map;
         }
 
-        @Override public EndpointPercentIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointPercentIndicator indicator = new EndpointPercentIndicator();
-            indicator.setEntityId((String)dbMap.get("entity_id"));
-            indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
-            indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
+        @Override public ServiceRelationServerCallSlaIndicator map2Data(Map<String, Object> dbMap) {
+            ServiceRelationServerCallSlaIndicator indicator = new ServiceRelationServerCallSlaIndicator();
+            indicator.setEntityId((String)dbMap.get("source_service_id"));
             indicator.setTotal(((Number)dbMap.get("total")).longValue());
             indicator.setPercentage(((Number)dbMap.get("percentage")).intValue());
             indicator.setMatch(((Number)dbMap.get("match")).longValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientCallsSumIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationServerCpmIndicator.java
similarity index 82%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientCallsSumIndicator.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationServerCpmIndicator.java
index b71e7b8..20b2a2d 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationClientCallsSumIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationServerCpmIndicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "service_relation_client_calls_sum", builder = ServiceRelationClientCallsSumIndicator.Builder.class)
-public class ServiceRelationClientCallsSumIndicator extends SumIndicator implements AlarmSupported {
+@StorageEntity(name = "service_relation_server_cpm", builder = ServiceRelationServerCpmIndicator.Builder.class)
+public class ServiceRelationServerCpmIndicator extends CPMIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "source_service_id") @IDColumn private String entityId;
 
@@ -71,7 +71,7 @@ public class ServiceRelationClientCallsSumIndicator extends SumIndicator impleme
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceRelationClientCallsSumIndicator indicator = (ServiceRelationClientCallsSumIndicator)obj;
+        ServiceRelationServerCpmIndicator indicator = (ServiceRelationServerCpmIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -105,12 +105,12 @@ public class ServiceRelationClientCallsSumIndicator extends SumIndicator impleme
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("Service_Relation_Client_Calls_Sum", Scope.ServiceRelation, entityId);
+        return new AlarmMeta("service_relation_server_cpm", Scope.ServiceRelation, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        ServiceRelationClientCallsSumIndicator indicator = new ServiceRelationClientCallsSumIndicator();
+        ServiceRelationServerCpmIndicator indicator = new ServiceRelationServerCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
@@ -120,7 +120,7 @@ public class ServiceRelationClientCallsSumIndicator extends SumIndicator impleme
 
     @Override
     public Indicator toDay() {
-        ServiceRelationClientCallsSumIndicator indicator = new ServiceRelationClientCallsSumIndicator();
+        ServiceRelationServerCpmIndicator indicator = new ServiceRelationServerCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
@@ -130,7 +130,7 @@ public class ServiceRelationClientCallsSumIndicator extends SumIndicator impleme
 
     @Override
     public Indicator toMonth() {
-        ServiceRelationClientCallsSumIndicator indicator = new ServiceRelationClientCallsSumIndicator();
+        ServiceRelationServerCpmIndicator indicator = new ServiceRelationServerCpmIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setValue(this.getValue());
@@ -138,9 +138,9 @@ public class ServiceRelationClientCallsSumIndicator extends SumIndicator impleme
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<ServiceRelationClientCallsSumIndicator> {
+    public static class Builder implements StorageBuilder<ServiceRelationServerCpmIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceRelationClientCallsSumIndicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceRelationServerCpmIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("source_service_id", storageData.getEntityId());
             map.put("value", storageData.getValue());
@@ -148,8 +148,8 @@ public class ServiceRelationClientCallsSumIndicator extends SumIndicator impleme
             return map;
         }
 
-        @Override public ServiceRelationClientCallsSumIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceRelationClientCallsSumIndicator indicator = new ServiceRelationClientCallsSumIndicator();
+        @Override public ServiceRelationServerCpmIndicator map2Data(Map<String, Object> dbMap) {
+            ServiceRelationServerCpmIndicator indicator = new ServiceRelationServerCpmIndicator();
             indicator.setEntityId((String)dbMap.get("source_service_id"));
             indicator.setValue(((Number)dbMap.get("value")).longValue());
             indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationAvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationServerRespTimeIndicator.java
similarity index 84%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationAvgIndicator.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationServerRespTimeIndicator.java
index 2ec2856..5f68a46 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationAvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/servicerelation/ServiceRelationServerRespTimeIndicator.java
@@ -38,8 +38,8 @@ import org.apache.skywalking.oap.server.core.source.Scope;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "servicerelation_avg", builder = ServiceRelationAvgIndicator.Builder.class)
-public class ServiceRelationAvgIndicator extends LongAvgIndicator implements AlarmSupported {
+@StorageEntity(name = "service_relation_server_resp_time", builder = ServiceRelationServerRespTimeIndicator.Builder.class)
+public class ServiceRelationServerRespTimeIndicator extends LongAvgIndicator implements AlarmSupported {
 
     @Setter @Getter @Column(columnName = "source_service_id") @IDColumn private String entityId;
 
@@ -71,7 +71,7 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
         if (getClass() != obj.getClass())
             return false;
 
-        ServiceRelationAvgIndicator indicator = (ServiceRelationAvgIndicator)obj;
+        ServiceRelationServerRespTimeIndicator indicator = (ServiceRelationServerRespTimeIndicator)obj;
         if (entityId != indicator.entityId)
             return false;
 
@@ -109,12 +109,12 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("ServiceRelation_Avg", Scope.ServiceRelation, entityId);
+        return new AlarmMeta("service_relation_server_resp_time", Scope.ServiceRelation, entityId);
     }
 
     @Override
     public Indicator toHour() {
-        ServiceRelationAvgIndicator indicator = new ServiceRelationAvgIndicator();
+        ServiceRelationServerRespTimeIndicator indicator = new ServiceRelationServerRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInHour());
         indicator.setEntityId(this.getEntityId());
         indicator.setSummation(this.getSummation());
@@ -126,7 +126,7 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
 
     @Override
     public Indicator toDay() {
-        ServiceRelationAvgIndicator indicator = new ServiceRelationAvgIndicator();
+        ServiceRelationServerRespTimeIndicator indicator = new ServiceRelationServerRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInDay());
         indicator.setEntityId(this.getEntityId());
         indicator.setSummation(this.getSummation());
@@ -138,7 +138,7 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
 
     @Override
     public Indicator toMonth() {
-        ServiceRelationAvgIndicator indicator = new ServiceRelationAvgIndicator();
+        ServiceRelationServerRespTimeIndicator indicator = new ServiceRelationServerRespTimeIndicator();
         indicator.setTimeBucket(toTimeBucketInMonth());
         indicator.setEntityId(this.getEntityId());
         indicator.setSummation(this.getSummation());
@@ -148,9 +148,9 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
         return indicator;
     }
 
-    public static class Builder implements StorageBuilder<ServiceRelationAvgIndicator> {
+    public static class Builder implements StorageBuilder<ServiceRelationServerRespTimeIndicator> {
 
-        @Override public Map<String, Object> data2Map(ServiceRelationAvgIndicator storageData) {
+        @Override public Map<String, Object> data2Map(ServiceRelationServerRespTimeIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("source_service_id", storageData.getEntityId());
             map.put("summation", storageData.getSummation());
@@ -160,8 +160,8 @@ public class ServiceRelationAvgIndicator extends LongAvgIndicator implements Ala
             return map;
         }
 
-        @Override public ServiceRelationAvgIndicator map2Data(Map<String, Object> dbMap) {
-            ServiceRelationAvgIndicator indicator = new ServiceRelationAvgIndicator();
+        @Override public ServiceRelationServerRespTimeIndicator map2Data(Map<String, Object> dbMap) {
+            ServiceRelationServerRespTimeIndicator indicator = new ServiceRelationServerRespTimeIndicator();
             indicator.setEntityId((String)dbMap.get("source_service_id"));
             indicator.setSummation(((Number)dbMap.get("summation")).longValue());
             indicator.setCount(((Number)dbMap.get("count")).intValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/CPMIndicator.java
similarity index 77%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/CPMIndicator.java
index 0883dc1..8032f77 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/CPMIndicator.java
@@ -18,15 +18,18 @@
 
 package org.apache.skywalking.oap.server.core.analysis.indicator;
 
-import lombok.*;
-import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.ConstOne;
+import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Entrance;
+import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorOperator;
 import org.apache.skywalking.oap.server.core.storage.annotation.Column;
 
 /**
- * @author peng-yongsheng
+ * @author wusheng
  */
 @IndicatorOperator
-public abstract class SumIndicator extends Indicator implements LongValueHolder {
+public abstract class CPMIndicator extends Indicator implements LongValueHolder {
 
     protected static final String VALUE = "value";
 
@@ -38,14 +41,16 @@ public abstract class SumIndicator extends Indicator implements LongValueHolder
     }
 
     @Override public final void combine(Indicator indicator) {
-        SumIndicator sumIndicator = (SumIndicator)indicator;
-        combine(sumIndicator.value);
+        CPMIndicator countIndicator = (CPMIndicator)indicator;
+        combine(countIndicator.value);
     }
 
     @Override public void calculate() {
+
     }
 
     @Override public long getValue() {
         return value;
     }
 }
+
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/CountIndicator.java
similarity index 88%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/CountIndicator.java
index 0883dc1..d9aa44a 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/CountIndicator.java
@@ -26,7 +26,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column;
  * @author peng-yongsheng
  */
 @IndicatorOperator
-public abstract class SumIndicator extends Indicator implements LongValueHolder {
+public abstract class CountIndicator extends Indicator implements LongValueHolder {
 
     protected static final String VALUE = "value";
 
@@ -38,8 +38,8 @@ public abstract class SumIndicator extends Indicator implements LongValueHolder
     }
 
     @Override public final void combine(Indicator indicator) {
-        SumIndicator sumIndicator = (SumIndicator)indicator;
-        combine(sumIndicator.value);
+        CountIndicator countIndicator = (CountIndicator)indicator;
+        combine(countIndicator.value);
     }
 
     @Override public void calculate() {
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicator.java
index 0883dc1..9f062f0 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicator.java
@@ -18,12 +18,15 @@
 
 package org.apache.skywalking.oap.server.core.analysis.indicator;
 
-import lombok.*;
-import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Entrance;
+import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorOperator;
+import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.SourceFrom;
 import org.apache.skywalking.oap.server.core.storage.annotation.Column;
 
 /**
- * @author peng-yongsheng
+ * @author wusheng
  */
 @IndicatorOperator
 public abstract class SumIndicator extends Indicator implements LongValueHolder {
@@ -33,13 +36,13 @@ public abstract class SumIndicator extends Indicator implements LongValueHolder
     @Getter @Setter @Column(columnName = VALUE) private long value;
 
     @Entrance
-    public final void combine(@ConstOne long count) {
+    public final void combine(@SourceFrom long count) {
         this.value += count;
     }
 
     @Override public final void combine(Indicator indicator) {
-        SumIndicator sumIndicator = (SumIndicator)indicator;
-        combine(sumIndicator.value);
+        SumIndicator countIndicator = (SumIndicator)indicator;
+        combine(countIndicator.value);
     }
 
     @Override public void calculate() {
diff --git a/oap-server/server-core/src/main/resources/official_analysis.oal b/oap-server/server-core/src/main/resources/official_analysis.oal
index 9dd405d..054e962 100644
--- a/oap-server/server-core/src/main/resources/official_analysis.oal
+++ b/oap-server/server-core/src/main/resources/official_analysis.oal
@@ -1,78 +1,72 @@
-#
-# 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.
-#
-#
-
-
-// Dashbard
-
-AlarmTrend = from(Alarm).langAvg(); // Mock
-Thermodynamic = from(Trace).histogram(0, 100); // Mock
-
-// Service on Topology
-
-Service_Avg = from(Service.latency).longAvg();
-
-Service_Throughput = from(Service.*).sum();
-
-Service_percent = from(Endpoint.*).percent(status == true);
-
-Service_apdex  = from(Endpoint.*).apdex();  //Mock
-
-ServiceRelation_Avg = from(ServiceRelation.latency).langAvg();
-
-ServiceRelation_Throughput = from(ServiceRelation.*).sum();
-
-
-// ServiceInstance
-ResponseTimeTrend_avg = from(ServiceInstance.latency).longAvg();
-
-ResponseTimeTrend_p99 = from(ServiceInstance.latency).p99();
-
-ResponseTimeTrend_p95 = from(ServiceInstance.latency).p95();
-
-ResponseTimeTrend_p75 = from(ServiceInstance.latency).p75();
-
-ResponseTimeTrend_p50 = from(ServiceInstance.latency).p50();
-
-ThroughputTrend = from(ServiceInstance.*).sum();
-
+/*
+ * 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.
+ *
+ */
+
+// All scope metric
+all_p99 = from(All.latency).p99(10);
+all_p95 = from(All.latency).p95(10);
+all_p90 = from(All.latency).p90(10);
+all_p75 = from(All.latency).p75(10);
+all_p50 = from(All.latency).p50(10);
+all_heatmap = from(All.latency).thermodynamic(100, 20);
+
+// Service scope metric
+service_resp_time = from(Service.latency).longAvg();
+service_sla = from(Service.*).percent(status == true);
+service_cpm = from(Service.*).cpm();
+service_p99 = from(Service.latency).p99(10);
+service_p95 = from(Service.latency).p95(10);
+service_p90 = from(Service.latency).p90(10);
+service_p75 = from(Service.latency).p75(10);
+service_p50 = from(Service.latency).p50(10);
+
+// Service relation scope metric for topology
+service_relation_client_cpm = from(ServiceRelation.*).filter(detectPoint == DetectPoint.CLIENT).cpm();
+service_relation_server_cpm = from(ServiceRelation.*).filter(detectPoint == DetectPoint.SERVER).cpm();
+service_relation_client_call_sla = from(ServiceRelation.*).filter(detectPoint == DetectPoint.CLIENT).percent(status == true);
+service_relation_server_call_sla = from(ServiceRelation.*).filter(detectPoint == DetectPoint.SERVER).percent(status == true);
+service_relation_client_resp_time = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.CLIENT).longAvg();
+service_relation_server_resp_time = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.SERVER).longAvg();
+
+// Service Instance Scope metric
+serviceInstance_resp_time= from(ServiceInstance.latency).longAvg();
+service_instance_cpm = from(ServiceInstance.*).cpm();
+
+// Endpoint scope metric
+endpoint_Avg = from(Endpoint.latency).longAvg();
+endpoint_sla = from(Endpoint.*).percent(status == true);
+endpoint_p99 = from(Endpoint.latency).p99(10);
+endpoint_p95 = from(Endpoint.latency).p95(10);
+endpoint_p90 = from(Endpoint.latency).p90(10);
+endpoint_p75 = from(Endpoint.latency).p75(10);
+endpoint_p50 = from(Endpoint.latency).p50(10);
+
+// Endpoint relation scope metric
+endpoint_relation_cpm = from(EndpointRelation.*).filter(detectPoint == DetectPoint.SERVER).cpm();
+endpoint_relation_resp_time = from(EndpointRelation.rpcLatency).filter(detectPoint == DetectPoint.SERVER).longAvg();
+
+// JVM instance metric
 instance_jvm_cpu = from(ServiceInstanceJVMCPU.usePercent).doubleAvg();
-
-instance_jvm_memory_max = from(ServiceInstanceJVMMemory.max).longAvg();
-
-instance_jvm_memory_pool_max = from(ServiceInstanceJVMMemoryPool.max).longAvg();
-
+instance_jvm_memory_heap = from(ServiceInstanceJVMMemory.max).filter(isHeap == true).longAvg();
+instance_jvm_memory_noheap = from(ServiceInstanceJVMMemory.max).filter(isHeap == false).longAvg();
 instance_jvm_young_gc_time = from(ServiceInstanceJVMGC.time).filter(phrase == GCPhrase.NEW).longAvg();
+instance_jvm_old_gc_time = from(ServiceInstanceJVMGC.time).filter(phrase == GCPhrase.OLD).longAvg();
+instance_jvm_young_gc_count = from(ServiceInstanceJVMGC.count).filter(phrase == GCPhrase.NEW).sum();
+instance_jvm_old_gc_count = from(ServiceInstanceJVMGC.count).filter(phrase == GCPhrase.OLD).sum();
 
-// Endpoint
-endpoint_Avg = from(Endpoint.latency).longAvg();
-
-endpoint_p99 = from(Endpoint.latency).p99();
-
-endpoint_p95 = from(Endpoint.latency).p95();
-
-endpoint_p75 = from(Endpoint.latency).p75();
-
-endpoint_p50 = from(Endpoint.latency).p50();
-
-endpoint_throughput = from(Endpoint.*).sum();
-
-endpoint_percent = from(Endpoint.*).percent(status == true);
-
-EndpointRelation_Avg = from(EndpointRelation.latency).langAvg();
 
-EndpointRelation_Throughput = from(EndpointRelation.*).sum();
+// endpoint_Avg_for_prod_serv = from(Endpoint.latency).filter(name == "/product/service").longAvg();
\ No newline at end of file
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicatorTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/CountIndicatorTest.java
similarity index 88%
rename from oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicatorTest.java
rename to oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/CountIndicatorTest.java
index 0087092..2c43342 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/SumIndicatorTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/CountIndicatorTest.java
@@ -25,10 +25,10 @@ import org.junit.Test;
 /**
  * @author wusheng
  */
-public class SumIndicatorTest {
+public class CountIndicatorTest {
     @Test
     public void testEntranceCombine() {
-        SumIndicatorImpl impl = new SumIndicatorImpl();
+        CountIndicatorImpl impl = new CountIndicatorImpl();
         impl.combine(5);
         impl.combine(6);
         impl.combine(7);
@@ -40,12 +40,12 @@ public class SumIndicatorTest {
 
     @Test
     public void testSelfCombine() {
-        SumIndicatorImpl impl = new SumIndicatorImpl();
+        CountIndicatorImpl impl = new CountIndicatorImpl();
         impl.combine(5);
         impl.combine(6);
         impl.combine(7);
 
-        SumIndicatorImpl impl2 = new SumIndicatorImpl();
+        CountIndicatorImpl impl2 = new CountIndicatorImpl();
         impl2.combine(5);
         impl2.combine(6);
         impl2.combine(7);
@@ -57,7 +57,7 @@ public class SumIndicatorTest {
         Assert.assertEquals(36, impl.getValue());
     }
 
-    public class SumIndicatorImpl extends SumIndicator {
+    public class CountIndicatorImpl extends CountIndicator {
         @Override public String id() {
             return null;
         }