wu-sheng closed pull request #863: Feature/app code in server
URL: https://github.com/apache/incubator-skywalking/pull/863
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml
index 1b2babe5e..22d24a16a 100644
--- a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml
+++ b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml
@@ -51,6 +51,11 @@
             <artifactId>collector-storage-define</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>collector-cache-define</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
             <artifactId>analysis-worker-model</artifactId>
diff --git 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/AlarmAssertWorker.java
 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/AlarmAssertWorker.java
index 0aeabca1b..244d2ad86 100644
--- 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/AlarmAssertWorker.java
+++ 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/AlarmAssertWorker.java
@@ -49,6 +49,8 @@ public AlarmAssertWorker(ModuleManager moduleManager) {
 
     protected abstract OUTPUT newAlarmObject(String id, INPUT inputMetric);
 
+    protected abstract void generateAlarmContent(OUTPUT alarm, double 
threshold);
+
     protected abstract Double calleeErrorRateThreshold();
 
     protected abstract Double callerErrorRateThreshold();
@@ -64,7 +66,7 @@ private void errorRateAlarmAssert(INPUT inputMetric) {
                 alarm.setAlarmType(AlarmType.ERROR_RATE.getValue());
                 alarm.setLastTimeBucket(inputMetric.getTimeBucket());
                 alarm.setSourceValue(MetricSource.Callee.getValue());
-                alarm.setAlarmContent("");
+                generateAlarmContent(alarm, calleeErrorRateThreshold());
 
                 onNext(alarm);
             }
@@ -75,7 +77,7 @@ private void errorRateAlarmAssert(INPUT inputMetric) {
                 alarm.setAlarmType(AlarmType.ERROR_RATE.getValue());
                 alarm.setLastTimeBucket(inputMetric.getTimeBucket());
                 alarm.setSourceValue(MetricSource.Caller.getValue());
-                alarm.setAlarmContent("");
+                generateAlarmContent(alarm, callerErrorRateThreshold());
 
                 onNext(alarm);
             }
@@ -100,7 +102,7 @@ private void averageResponseTimeAlarmAssert(INPUT 
inputMetric) {
                 alarm.setAlarmType(AlarmType.SLOW_RTT.getValue());
                 alarm.setLastTimeBucket(inputMetric.getTimeBucket());
                 alarm.setSourceValue(MetricSource.Callee.getValue());
-                alarm.setAlarmContent("");
+                generateAlarmContent(alarm, 
calleeAverageResponseTimeThreshold());
 
                 onNext(alarm);
             }
@@ -111,7 +113,7 @@ private void averageResponseTimeAlarmAssert(INPUT 
inputMetric) {
                 alarm.setAlarmType(AlarmType.SLOW_RTT.getValue());
                 alarm.setLastTimeBucket(inputMetric.getTimeBucket());
                 alarm.setSourceValue(MetricSource.Caller.getValue());
-                alarm.setAlarmContent("");
+                generateAlarmContent(alarm, 
callerAverageResponseTimeThreshold());
 
                 onNext(alarm);
             }
diff --git 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/application/ApplicationMetricAlarmAssertWorker.java
 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/application/ApplicationMetricAlarmAssertWorker.java
index 0a2e6d352..c1c92c3d7 100644
--- 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/application/ApplicationMetricAlarmAssertWorker.java
+++ 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/application/ApplicationMetricAlarmAssertWorker.java
@@ -21,12 +21,17 @@
 import 
org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
+import org.apache.skywalking.apm.collector.cache.CacheModule;
+import 
org.apache.skywalking.apm.collector.cache.service.ApplicationCacheService;
 import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
 import 
org.apache.skywalking.apm.collector.configuration.service.IApplicationAlarmRuleConfig;
 import org.apache.skywalking.apm.collector.core.module.ModuleManager;
 import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.table.MetricSource;
+import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
 import 
org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarm;
 import 
org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetric;
+import org.apache.skywalking.apm.collector.storage.table.register.Application;
 
 /**
  * @author peng-yongsheng
@@ -34,10 +39,12 @@
 public class ApplicationMetricAlarmAssertWorker extends 
AlarmAssertWorker<ApplicationMetric, ApplicationAlarm> {
 
     private final IApplicationAlarmRuleConfig applicationAlarmRuleConfig;
+    private final ApplicationCacheService applicationCacheService;
 
     public ApplicationMetricAlarmAssertWorker(ModuleManager moduleManager) {
         super(moduleManager);
         this.applicationAlarmRuleConfig = 
moduleManager.find(ConfigurationModule.NAME).getService(IApplicationAlarmRuleConfig.class);
+        this.applicationCacheService = 
moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
     }
 
     @Override public int id() {
@@ -51,6 +58,21 @@ public ApplicationMetricAlarmAssertWorker(ModuleManager 
moduleManager) {
         return applicationAlarm;
     }
 
+    @Override protected void generateAlarmContent(ApplicationAlarm alarm, 
double threshold) {
+        Application application = 
applicationCacheService.getApplicationById(alarm.getApplicationId());
+
+        String clientOrServer = "server";
+        if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
+            clientOrServer = "client";
+        }
+
+        if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("The success rate of " + 
application.getApplicationCode() + ", detected from " + clientOrServer + " 
side, is lower than " + threshold + " rate.");
+        } else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("Response time of " + 
application.getApplicationCode() + ", detected from " + clientOrServer + " 
side, is slower than " + threshold + " ms.");
+        }
+    }
+
     @Override protected Double calleeErrorRateThreshold() {
         return applicationAlarmRuleConfig.calleeErrorRateThreshold();
     }
diff --git 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/application/ApplicationReferenceMetricAlarmAssertWorker.java
 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/application/ApplicationReferenceMetricAlarmAssertWorker.java
index a68912e1f..efdefb008 100644
--- 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/application/ApplicationReferenceMetricAlarmAssertWorker.java
+++ 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/application/ApplicationReferenceMetricAlarmAssertWorker.java
@@ -21,22 +21,29 @@
 import 
org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
+import org.apache.skywalking.apm.collector.cache.CacheModule;
+import 
org.apache.skywalking.apm.collector.cache.service.ApplicationCacheService;
 import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
 import 
org.apache.skywalking.apm.collector.configuration.service.IApplicationReferenceAlarmRuleConfig;
 import org.apache.skywalking.apm.collector.core.module.ModuleManager;
 import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.table.MetricSource;
+import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
 import 
org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationReferenceAlarm;
 import 
org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.register.Application;
 
 /**
  * @author peng-yongsheng
  */
 public class ApplicationReferenceMetricAlarmAssertWorker extends 
AlarmAssertWorker<ApplicationReferenceMetric, ApplicationReferenceAlarm> {
 
+    private final ApplicationCacheService applicationCacheService;
     private final IApplicationReferenceAlarmRuleConfig 
applicationReferenceAlarmRuleConfig;
 
     public ApplicationReferenceMetricAlarmAssertWorker(ModuleManager 
moduleManager) {
         super(moduleManager);
+        this.applicationCacheService = 
moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
         this.applicationReferenceAlarmRuleConfig = 
moduleManager.find(ConfigurationModule.NAME).getService(IApplicationReferenceAlarmRuleConfig.class);
     }
 
@@ -52,6 +59,21 @@ public 
ApplicationReferenceMetricAlarmAssertWorker(ModuleManager moduleManager)
         return applicationReferenceAlarm;
     }
 
+    @Override protected void generateAlarmContent(ApplicationReferenceAlarm 
alarm, double threshold) {
+        Application application = 
applicationCacheService.getApplicationById(alarm.getBehindApplicationId());
+
+        String clientOrServer = "server";
+        if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
+            clientOrServer = "client";
+        }
+
+        if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("The success rate of " + 
application.getApplicationCode() + ", detected from " + clientOrServer + " 
side, is lower than " + threshold + " rate.");
+        } else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("Response time of " + 
application.getApplicationCode() + ", detected from " + clientOrServer + " 
side, is slower than " + threshold + " ms.");
+        }
+    }
+
     @Override protected Double calleeErrorRateThreshold() {
         return applicationReferenceAlarmRuleConfig.calleeErrorRateThreshold();
     }
diff --git 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceMetricAlarmAssertWorker.java
 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceMetricAlarmAssertWorker.java
index 2b02dd7df..a0e9ad1c2 100644
--- 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceMetricAlarmAssertWorker.java
+++ 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceMetricAlarmAssertWorker.java
@@ -18,6 +18,8 @@
 
 package 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.instance;
 
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
@@ -25,18 +27,26 @@
 import 
org.apache.skywalking.apm.collector.configuration.service.IInstanceAlarmRuleConfig;
 import org.apache.skywalking.apm.collector.core.module.ModuleManager;
 import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.StorageModule;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
+import org.apache.skywalking.apm.collector.storage.table.MetricSource;
+import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
 import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceAlarm;
 import 
org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetric;
+import org.apache.skywalking.apm.collector.storage.table.register.Instance;
 
 /**
  * @author peng-yongsheng
  */
 public class InstanceMetricAlarmAssertWorker extends 
AlarmAssertWorker<InstanceMetric, InstanceAlarm> {
 
+    private final Gson gson = new Gson();
+    private final IInstanceUIDAO instanceDAO;
     private final IInstanceAlarmRuleConfig instanceAlarmRuleConfig;
 
     public InstanceMetricAlarmAssertWorker(ModuleManager moduleManager) {
         super(moduleManager);
+        this.instanceDAO = 
moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class);
         this.instanceAlarmRuleConfig = 
moduleManager.find(ConfigurationModule.NAME).getService(IInstanceAlarmRuleConfig.class);
     }
 
@@ -52,6 +62,26 @@ public InstanceMetricAlarmAssertWorker(ModuleManager 
moduleManager) {
         return instanceAlarm;
     }
 
+    @Override protected void generateAlarmContent(InstanceAlarm alarm, double 
threshold) {
+        Instance instance = instanceDAO.getInstance(alarm.getInstanceId());
+        JsonObject osInfo = gson.fromJson(instance.getOsInfo(), 
JsonObject.class);
+        String serverName = Const.UNKNOWN;
+        if (osInfo.has("hostName")) {
+            serverName = osInfo.get("hostName").getAsString();
+        }
+
+        String clientOrServer = "server";
+        if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
+            clientOrServer = "client";
+        }
+
+        if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("The success rate of " + serverName + ", 
detected from " + clientOrServer + " side, is lower than " + threshold + " 
rate.");
+        } else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("Response time of " + serverName + ", 
detected from " + clientOrServer + " side, is slower than " + threshold + " 
ms.");
+        }
+    }
+
     @Override protected Double calleeErrorRateThreshold() {
         return instanceAlarmRuleConfig.calleeErrorRateThreshold();
     }
diff --git 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceReferenceMetricAlarmAssertWorker.java
 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceReferenceMetricAlarmAssertWorker.java
index f8e2bf5af..997c93ee8 100644
--- 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceReferenceMetricAlarmAssertWorker.java
+++ 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceReferenceMetricAlarmAssertWorker.java
@@ -18,6 +18,8 @@
 
 package 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.instance;
 
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
@@ -25,18 +27,26 @@
 import 
org.apache.skywalking.apm.collector.configuration.service.IInstanceReferenceAlarmRuleConfig;
 import org.apache.skywalking.apm.collector.core.module.ModuleManager;
 import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.StorageModule;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
+import org.apache.skywalking.apm.collector.storage.table.MetricSource;
+import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
 import 
org.apache.skywalking.apm.collector.storage.table.alarm.InstanceReferenceAlarm;
 import 
org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetric;
+import org.apache.skywalking.apm.collector.storage.table.register.Instance;
 
 /**
  * @author peng-yongsheng
  */
 public class InstanceReferenceMetricAlarmAssertWorker extends 
AlarmAssertWorker<InstanceReferenceMetric, InstanceReferenceAlarm> {
 
+    private Gson gson = new Gson();
+    private final IInstanceUIDAO instanceDAO;
     private final IInstanceReferenceAlarmRuleConfig 
instanceReferenceAlarmRuleConfig;
 
     public InstanceReferenceMetricAlarmAssertWorker(ModuleManager 
moduleManager) {
         super(moduleManager);
+        this.instanceDAO = 
moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class);
         this.instanceReferenceAlarmRuleConfig = 
moduleManager.find(ConfigurationModule.NAME).getService(IInstanceReferenceAlarmRuleConfig.class);
     }
 
@@ -54,6 +64,26 @@ public 
InstanceReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) {
         return instanceReferenceAlarm;
     }
 
+    @Override protected void generateAlarmContent(InstanceReferenceAlarm 
alarm, double threshold) {
+        Instance instance = 
instanceDAO.getInstance(alarm.getBehindInstanceId());
+        JsonObject osInfo = gson.fromJson(instance.getOsInfo(), 
JsonObject.class);
+        String serverName = Const.UNKNOWN;
+        if (osInfo.has("hostName")) {
+            serverName = osInfo.get("hostName").getAsString();
+        }
+
+        String clientOrServer = "server";
+        if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
+            clientOrServer = "client";
+        }
+
+        if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("The success rate of " + serverName + ", 
detected from " + clientOrServer + " side, is lower than " + threshold + ".");
+        } else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("Response time of " + serverName + ", 
detected from " + clientOrServer + " side, is slower than " + threshold + ".");
+        }
+    }
+
     @Override protected Double calleeErrorRateThreshold() {
         return instanceReferenceAlarmRuleConfig.calleeErrorRateThreshold();
     }
diff --git 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceMetricAlarmAssertWorker.java
 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceMetricAlarmAssertWorker.java
index e7a8242cc..e5680d964 100644
--- 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceMetricAlarmAssertWorker.java
+++ 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceMetricAlarmAssertWorker.java
@@ -21,11 +21,16 @@
 import 
org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
+import org.apache.skywalking.apm.collector.cache.CacheModule;
+import 
org.apache.skywalking.apm.collector.cache.service.ServiceNameCacheService;
 import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
 import 
org.apache.skywalking.apm.collector.configuration.service.IServiceAlarmRuleConfig;
 import org.apache.skywalking.apm.collector.core.module.ModuleManager;
 import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.table.MetricSource;
+import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
 import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceAlarm;
+import org.apache.skywalking.apm.collector.storage.table.register.ServiceName;
 import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetric;
 
 /**
@@ -33,10 +38,12 @@
  */
 public class ServiceMetricAlarmAssertWorker extends 
AlarmAssertWorker<ServiceMetric, ServiceAlarm> {
 
+    private final ServiceNameCacheService serviceNameCacheService;
     private final IServiceAlarmRuleConfig serviceAlarmRuleConfig;
 
     public ServiceMetricAlarmAssertWorker(ModuleManager moduleManager) {
         super(moduleManager);
+        this.serviceNameCacheService = 
moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
         this.serviceAlarmRuleConfig = 
moduleManager.find(ConfigurationModule.NAME).getService(IServiceAlarmRuleConfig.class);
     }
 
@@ -53,6 +60,21 @@ public ServiceMetricAlarmAssertWorker(ModuleManager 
moduleManager) {
         return serviceAlarm;
     }
 
+    @Override protected void generateAlarmContent(ServiceAlarm alarm, double 
threshold) {
+        ServiceName serviceName = 
serviceNameCacheService.get(alarm.getServiceId());
+
+        String clientOrServer = "server";
+        if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
+            clientOrServer = "client";
+        }
+
+        if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("The success rate of " + 
serviceName.getServiceName() + ", detected from " + clientOrServer + " side, is 
lower than " + threshold + " rate.");
+        } else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("Response time of " + 
serviceName.getServiceName() + ", detected from " + clientOrServer + " side, is 
slower than " + threshold + " ms.");
+        }
+    }
+
     @Override protected Double calleeErrorRateThreshold() {
         return serviceAlarmRuleConfig.calleeErrorRateThreshold();
     }
diff --git 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceReferenceMetricAlarmAssertWorker.java
 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceReferenceMetricAlarmAssertWorker.java
index a644c01a3..a454b6a53 100644
--- 
a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceReferenceMetricAlarmAssertWorker.java
+++ 
b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceReferenceMetricAlarmAssertWorker.java
@@ -21,26 +21,29 @@
 import 
org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
 import 
org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
+import org.apache.skywalking.apm.collector.cache.CacheModule;
+import 
org.apache.skywalking.apm.collector.cache.service.ServiceNameCacheService;
 import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
 import 
org.apache.skywalking.apm.collector.configuration.service.IServiceReferenceAlarmRuleConfig;
 import org.apache.skywalking.apm.collector.core.module.ModuleManager;
 import org.apache.skywalking.apm.collector.core.util.Const;
+import org.apache.skywalking.apm.collector.storage.table.MetricSource;
+import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
 import 
org.apache.skywalking.apm.collector.storage.table.alarm.ServiceReferenceAlarm;
+import org.apache.skywalking.apm.collector.storage.table.register.ServiceName;
 import 
org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetric;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * @author peng-yongsheng
  */
 public class ServiceReferenceMetricAlarmAssertWorker extends 
AlarmAssertWorker<ServiceReferenceMetric, ServiceReferenceAlarm> {
 
-    private final Logger logger = 
LoggerFactory.getLogger(ServiceReferenceMetricAlarmAssertWorker.class);
-
+    private final ServiceNameCacheService serviceNameCacheService;
     private final IServiceReferenceAlarmRuleConfig 
serviceReferenceAlarmRuleConfig;
 
-    public ServiceReferenceMetricAlarmAssertWorker(ModuleManager 
moduleManager) {
+    ServiceReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) {
         super(moduleManager);
+        this.serviceNameCacheService = 
moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
         this.serviceReferenceAlarmRuleConfig = 
moduleManager.find(ConfigurationModule.NAME).getService(IServiceReferenceAlarmRuleConfig.class);
     }
 
@@ -60,6 +63,21 @@ public ServiceReferenceMetricAlarmAssertWorker(ModuleManager 
moduleManager) {
         return serviceReferenceAlarm;
     }
 
+    @Override protected void generateAlarmContent(ServiceReferenceAlarm alarm, 
double threshold) {
+        ServiceName serviceName = 
serviceNameCacheService.get(alarm.getBehindServiceId());
+
+        String clientOrServer = "server";
+        if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
+            clientOrServer = "client";
+        }
+
+        if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("The success rate of " + 
serviceName.getServiceName() + ", detected from " + clientOrServer + " side, is 
lower than " + threshold + " rate.");
+        } else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
+            alarm.setAlarmContent("Response time of " + 
serviceName.getServiceName() + ", detected from " + clientOrServer + " side, is 
slower than " + threshold + " ms.");
+        }
+    }
+
     @Override protected Double calleeErrorRateThreshold() {
         return serviceReferenceAlarmRuleConfig.calleeErrorRateThreshold();
     }
diff --git 
a/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/register/InstanceRegisterSerialWorker.java
 
b/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/register/InstanceRegisterSerialWorker.java
index e51a4cd50..12f8fd7ba 100644
--- 
a/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/register/InstanceRegisterSerialWorker.java
+++ 
b/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/register/InstanceRegisterSerialWorker.java
@@ -73,6 +73,7 @@ public InstanceRegisterSerialWorker(ModuleManager 
moduleManager) {
                 userInstance.setId(String.valueOf(Const.NONE_INSTANCE_ID));
                 userInstance.setInstanceId(Const.NONE_INSTANCE_ID);
                 userInstance.setApplicationId(Const.NONE_APPLICATION_ID);
+                userInstance.setApplicationCode(Const.USER_CODE);
                 userInstance.setAgentUUID(Const.USER_CODE);
                 userInstance.setHeartBeatTime(System.currentTimeMillis());
                 userInstance.setOsInfo(Const.EMPTY_STRING);
@@ -85,6 +86,7 @@ public InstanceRegisterSerialWorker(ModuleManager 
moduleManager) {
                 newInstance.setId("2");
                 newInstance.setInstanceId(2);
                 newInstance.setApplicationId(instance.getApplicationId());
+                newInstance.setApplicationCode(instance.getApplicationCode());
                 newInstance.setAgentUUID(instance.getAgentUUID());
                 newInstance.setHeartBeatTime(instance.getHeartBeatTime());
                 newInstance.setOsInfo(instance.getOsInfo());
@@ -96,6 +98,7 @@ public InstanceRegisterSerialWorker(ModuleManager 
moduleManager) {
                 newInstance.setId(String.valueOf(max + 1));
                 newInstance.setInstanceId(max + 1);
                 newInstance.setApplicationId(instance.getApplicationId());
+                newInstance.setApplicationCode(instance.getApplicationCode());
                 newInstance.setAgentUUID(instance.getAgentUUID());
                 newInstance.setHeartBeatTime(instance.getHeartBeatTime());
                 newInstance.setOsInfo(instance.getOsInfo());
diff --git 
a/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/service/InstanceIDService.java
 
b/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/service/InstanceIDService.java
index b5c2ee38a..d18914578 100644
--- 
a/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/service/InstanceIDService.java
+++ 
b/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/service/InstanceIDService.java
@@ -21,6 +21,7 @@
 import 
org.apache.skywalking.apm.collector.analysis.register.define.graph.GraphIdDefine;
 import 
org.apache.skywalking.apm.collector.analysis.register.define.service.IInstanceIDService;
 import org.apache.skywalking.apm.collector.cache.CacheModule;
+import 
org.apache.skywalking.apm.collector.cache.service.ApplicationCacheService;
 import org.apache.skywalking.apm.collector.cache.service.InstanceCacheService;
 import org.apache.skywalking.apm.collector.core.graph.Graph;
 import org.apache.skywalking.apm.collector.core.graph.GraphManager;
@@ -45,6 +46,7 @@
     private InstanceCacheService instanceCacheService;
     private Graph<Instance> instanceRegisterGraph;
     private IInstanceRegisterDAO instanceRegisterDAO;
+    private ApplicationCacheService applicationCacheService;
 
     public InstanceIDService(ModuleManager moduleManager) {
         this.moduleManager = moduleManager;
@@ -71,6 +73,13 @@ private IInstanceRegisterDAO getInstanceRegisterDAO() {
         return instanceRegisterDAO;
     }
 
+    private ApplicationCacheService getApplicationCacheService() {
+        if (ObjectUtils.isEmpty(applicationCacheService)) {
+            this.applicationCacheService = 
moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
+        }
+        return applicationCacheService;
+    }
+
     @Override public int getOrCreateByAgentUUID(int applicationId, String 
agentUUID, long registerTime, String osInfo) {
         logger.debug("get or getOrCreate instance id by agent UUID, 
application id: {}, agentUUID: {}, registerTime: {}, osInfo: {}", 
applicationId, agentUUID, registerTime, osInfo);
         int instanceId = 
getInstanceCacheService().getInstanceIdByAgentUUID(applicationId, agentUUID);
@@ -79,6 +88,7 @@ private IInstanceRegisterDAO getInstanceRegisterDAO() {
             Instance instance = new Instance();
             instance.setId("0");
             instance.setApplicationId(applicationId);
+            
instance.setApplicationCode(getApplicationCacheService().getApplicationById(applicationId).getApplicationCode());
             instance.setAgentUUID(agentUUID);
             instance.setRegisterTime(registerTime);
             instance.setHeartBeatTime(registerTime);
@@ -100,6 +110,7 @@ private IInstanceRegisterDAO getInstanceRegisterDAO() {
             Instance instance = new Instance();
             instance.setId("0");
             instance.setApplicationId(applicationId);
+            
instance.setApplicationCode(getApplicationCacheService().getApplicationById(applicationId).getApplicationCode());
             instance.setAgentUUID(Const.EMPTY_STRING);
             instance.setRegisterTime(registerTime);
             instance.setHeartBeatTime(registerTime);
@@ -118,6 +129,7 @@ private IInstanceRegisterDAO getInstanceRegisterDAO() {
         Instance instance = new Instance();
         instance.setId(String.valueOf(instanceId));
         instance.setApplicationId(applicationId);
+        
instance.setApplicationCode(getApplicationCacheService().getApplicationById(applicationId).getApplicationCode());
         instance.setAgentUUID("");
         instance.setRegisterTime(registerTime);
         instance.setHeartBeatTime(registerTime);
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationAlarmListUIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationAlarmListUIDAO.java
index 3cd92773a..4edbef7ef 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationAlarmListUIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationAlarmListUIDAO.java
@@ -27,5 +27,26 @@
  */
 public interface IApplicationAlarmListUIDAO extends DAO {
 
-    List<Integer> getAlarmedApplicationNum(Step step, long start, long end);
+    List<AlarmTrend> getAlarmedApplicationNum(Step step, long startTimeBucket, 
long endTimeBucket);
+
+    class AlarmTrend {
+        private long timeBucket;
+        private int numberOfApplication;
+
+        public long getTimeBucket() {
+            return timeBucket;
+        }
+
+        public void setTimeBucket(long timeBucket) {
+            this.timeBucket = timeBucket;
+        }
+
+        public int getNumberOfApplication() {
+            return numberOfApplication;
+        }
+
+        public void setNumberOfApplication(int numberOfApplication) {
+            this.numberOfApplication = numberOfApplication;
+        }
+    }
 }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationAlarmUIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationAlarmUIDAO.java
index bd0eaf180..a810fb391 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationAlarmUIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationAlarmUIDAO.java
@@ -27,5 +27,5 @@
  */
 public interface IApplicationAlarmUIDAO extends DAO {
 
-    Alarm loadAlarmList(String keyword, long start, long end, int limit, int 
from) throws ParseException;
+    Alarm loadAlarmList(String keyword, long startTimeBucket, long 
endTimeBucket, int limit, int from) throws ParseException;
 }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceAlarmUIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceAlarmUIDAO.java
index 9b219001d..9c7c737d9 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceAlarmUIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceAlarmUIDAO.java
@@ -27,5 +27,5 @@
  */
 public interface IInstanceAlarmUIDAO extends DAO {
 
-    Alarm loadAlarmList(String keyword, long start, long end, int limit, int 
from) throws ParseException;
+    Alarm loadAlarmList(String keyword, long startTimeBucket, long 
endTimeBucket, int limit, int from) throws ParseException;
 }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceAlarmUIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceAlarmUIDAO.java
index 750b33928..3a5e57ceb 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceAlarmUIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceAlarmUIDAO.java
@@ -27,5 +27,5 @@
  */
 public interface IServiceAlarmUIDAO extends DAO {
 
-    Alarm loadAlarmList(String keyword, long start, long end, int limit, int 
from) throws ParseException;
+    Alarm loadAlarmList(String keyword, long startTimeBucket, long 
endTimeBucket, int limit, int from) throws ParseException;
 }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/Instance.java
 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/Instance.java
index cc4ce39a8..8efe7dcff 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/Instance.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/Instance.java
@@ -32,6 +32,7 @@
         new Column(InstanceTable.COLUMN_ID, new NonOperation()),
         new Column(InstanceTable.COLUMN_AGENT_UUID, new CoverOperation()),
         new Column(InstanceTable.COLUMN_OS_INFO, new CoverOperation()),
+        new Column(InstanceTable.COLUMN_APPLICATION_CODE, new 
CoverOperation()),
     };
 
     private static final Column[] LONG_COLUMNS = {
@@ -118,6 +119,14 @@ public void setOsInfo(String osInfo) {
         setDataString(2, osInfo);
     }
 
+    public String getApplicationCode() {
+        return getDataString(3);
+    }
+
+    public void setApplicationCode(String applicationCode) {
+        setDataString(3, applicationCode);
+    }
+
     public int getAddressId() {
         return getDataInteger(2);
     }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/InstanceTable.java
 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/InstanceTable.java
index 10779e762..fcf4d8cb3 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/InstanceTable.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/InstanceTable.java
@@ -26,6 +26,7 @@
 public class InstanceTable extends CommonTable {
     public static final String TABLE = "instance";
     public static final String COLUMN_APPLICATION_ID = "application_id";
+    public static final String COLUMN_APPLICATION_CODE = "application_code";
     public static final String COLUMN_AGENT_UUID = "agent_uuid";
     public static final String COLUMN_REGISTER_TIME = "register_time";
     public static final String COLUMN_INSTANCE_ID = "instance_id";
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/alarm/AlarmItem.java
 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/alarm/AlarmItem.java
index 073a466c6..23e4d3f02 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/alarm/AlarmItem.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/alarm/AlarmItem.java
@@ -22,18 +22,18 @@
  * @author peng-yongsheng
  */
 public class AlarmItem {
-    private String id;
+    private int id;
     private String title;
     private String content;
     private String startTime;
     private AlarmType alarmType;
     private CauseType causeType;
 
-    public String getId() {
+    public int getId() {
         return id;
     }
 
-    public void setId(String id) {
+    public void setId(int id) {
         this.id = id;
     }
 
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/InstanceRegisterEsDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/InstanceRegisterEsDAO.java
index 98bf29c08..074ec584d 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/InstanceRegisterEsDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/InstanceRegisterEsDAO.java
@@ -57,6 +57,7 @@ public InstanceRegisterEsDAO(ElasticSearchClient client) {
         Map<String, Object> source = new HashMap<>();
         source.put(InstanceTable.COLUMN_INSTANCE_ID, instance.getInstanceId());
         source.put(InstanceTable.COLUMN_APPLICATION_ID, 
instance.getApplicationId());
+        source.put(InstanceTable.COLUMN_APPLICATION_CODE, 
instance.getApplicationCode());
         source.put(InstanceTable.COLUMN_AGENT_UUID, instance.getAgentUUID());
         source.put(InstanceTable.COLUMN_REGISTER_TIME, 
TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getRegisterTime()));
         source.put(InstanceTable.COLUMN_HEARTBEAT_TIME, 
TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getHeartBeatTime()));
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationAlarmEsUIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationAlarmEsUIDAO.java
index 907105bf5..aa241e5cd 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationAlarmEsUIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationAlarmEsUIDAO.java
@@ -46,13 +46,14 @@ public ApplicationAlarmEsUIDAO(ElasticSearchClient client) {
     }
 
     @Override
-    public Alarm loadAlarmList(String keyword, long start, long end, int 
limit, int from) throws ParseException {
+    public Alarm loadAlarmList(String keyword, long startTimeBucket, long 
endTimeBucket, int limit,
+        int from) throws ParseException {
         SearchRequestBuilder searchRequestBuilder = 
getClient().prepareSearch(ApplicationAlarmTable.TABLE);
         searchRequestBuilder.setTypes(ApplicationAlarmTable.TABLE_TYPE);
         searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
 
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
-        
boolQueryBuilder.must().add(QueryBuilders.rangeQuery(ApplicationAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(start).lte(end));
+        
boolQueryBuilder.must().add(QueryBuilders.rangeQuery(ApplicationAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
         if (StringUtils.isNotEmpty(keyword)) {
             
boolQueryBuilder.must().add(QueryBuilders.matchQuery(ApplicationAlarmTable.COLUMN_ALARM_CONTENT,
 keyword));
         }
@@ -68,8 +69,7 @@ public Alarm loadAlarmList(String keyword, long start, long 
end, int limit, int
         alarm.setTotal((int)searchResponse.getHits().getTotalHits());
         for (SearchHit searchHit : searchHits) {
             AlarmItem alarmItem = new AlarmItem();
-            alarmItem.setId(searchHit.getId());
-            
alarmItem.setTitle((String)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_ALARM_CONTENT));
+            
alarmItem.setId(((Number)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_APPLICATION_ID)).intValue());
             
alarmItem.setContent((String)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_ALARM_CONTENT));
 
             long lastTimeBucket = 
((Number)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_LAST_TIME_BUCKET)).longValue();
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationAlarmListEsUIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationAlarmListEsUIDAO.java
index 158bb82a7..fcc205233 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationAlarmListEsUIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationAlarmListEsUIDAO.java
@@ -42,12 +42,12 @@ public ApplicationAlarmListEsUIDAO(ElasticSearchClient 
client) {
         super(client);
     }
 
-    @Override public List<Integer> getAlarmedApplicationNum(Step step, long 
start, long end) {
+    @Override public List<AlarmTrend> getAlarmedApplicationNum(Step step, long 
startTimeBucket, long endTimeBucket) {
         String tableName = TimePyramidTableNameBuilder.build(step, 
ApplicationAlarmListTable.TABLE);
         SearchRequestBuilder searchRequestBuilder = 
getClient().prepareSearch(tableName);
         searchRequestBuilder.setTypes(ApplicationAlarmListTable.TABLE_TYPE);
         searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
-        
searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).gte(start).lte(end));
+        
searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
         searchRequestBuilder.setSize(0);
 
         
searchRequestBuilder.addAggregation(AggregationBuilders.terms(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).field(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).size(100)
@@ -57,13 +57,16 @@ public ApplicationAlarmListEsUIDAO(ElasticSearchClient 
client) {
 
         Terms timeBucketTerms = 
searchResponse.getAggregations().get(ApplicationAlarmListTable.COLUMN_TIME_BUCKET);
 
-        List<Integer> alarmApplicationNum = new LinkedList<>();
+        List<AlarmTrend> alarmTrends = new LinkedList<>();
         for (Terms.Bucket timeBucketBucket : timeBucketTerms.getBuckets()) {
             Terms applicationBucketTerms = 
timeBucketBucket.getAggregations().get(ApplicationAlarmListTable.COLUMN_APPLICATION_ID);
-            int num = applicationBucketTerms.getBuckets().size();
-            alarmApplicationNum.add(num);
+
+            AlarmTrend alarmTrend = new AlarmTrend();
+            
alarmTrend.setNumberOfApplication(applicationBucketTerms.getBuckets().size());
+            
alarmTrend.setTimeBucket(timeBucketBucket.getKeyAsNumber().longValue());
+            alarmTrends.add(alarmTrend);
         }
 
-        return alarmApplicationNum;
+        return alarmTrends;
     }
 }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceAlarmEsUIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceAlarmEsUIDAO.java
index 91fe1f797..86bc2c04f 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceAlarmEsUIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceAlarmEsUIDAO.java
@@ -46,13 +46,14 @@ public InstanceAlarmEsUIDAO(ElasticSearchClient client) {
     }
 
     @Override
-    public Alarm loadAlarmList(String keyword, long start, long end, int 
limit, int from) throws ParseException {
+    public Alarm loadAlarmList(String keyword, long startTimeBucket, long 
endTimeBucket, int limit,
+        int from) throws ParseException {
         SearchRequestBuilder searchRequestBuilder = 
getClient().prepareSearch(InstanceAlarmTable.TABLE);
         searchRequestBuilder.setTypes(InstanceAlarmTable.TABLE_TYPE);
         searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
 
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
-        
boolQueryBuilder.must().add(QueryBuilders.rangeQuery(InstanceAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(start).lte(end));
+        
boolQueryBuilder.must().add(QueryBuilders.rangeQuery(InstanceAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
         if (StringUtils.isNotEmpty(keyword)) {
             
boolQueryBuilder.must().add(QueryBuilders.matchQuery(InstanceAlarmTable.COLUMN_ALARM_CONTENT,
 keyword));
         }
@@ -68,7 +69,7 @@ public Alarm loadAlarmList(String keyword, long start, long 
end, int limit, int
         alarm.setTotal((int)searchResponse.getHits().getTotalHits());
         for (SearchHit searchHit : searchHits) {
             AlarmItem alarmItem = new AlarmItem();
-            alarmItem.setId(searchHit.getId());
+            
alarmItem.setId(((Number)searchHit.getSource().get(InstanceAlarmTable.COLUMN_INSTANCE_ID)).intValue());
             
alarmItem.setTitle((String)searchHit.getSource().get(InstanceAlarmTable.COLUMN_ALARM_CONTENT));
             
alarmItem.setContent((String)searchHit.getSource().get(InstanceAlarmTable.COLUMN_ALARM_CONTENT));
 
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java
index 8c0e0c694..8a08047d2 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java
@@ -249,6 +249,7 @@ private Long heartBeatTime(AbstractQueryBuilder 
queryBuilder) {
         for (SearchHit searchHit : searchHits) {
             AppServerInfo appServerInfo = new AppServerInfo();
             
appServerInfo.setId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_INSTANCE_ID)).intValue());
+            
appServerInfo.setApplicationId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_APPLICATION_ID)).intValue());
             
appServerInfo.setOsInfo((String)searchHit.getSource().get(InstanceTable.COLUMN_OS_INFO));
             appServerInfos.add(appServerInfo);
         }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceAlarmEsUIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceAlarmEsUIDAO.java
index b1f85651b..53967169b 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceAlarmEsUIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceAlarmEsUIDAO.java
@@ -46,13 +46,14 @@ public ServiceAlarmEsUIDAO(ElasticSearchClient client) {
     }
 
     @Override
-    public Alarm loadAlarmList(String keyword, long start, long end, int 
limit, int from) throws ParseException {
+    public Alarm loadAlarmList(String keyword, long startTimeBucket, long 
endTimeBucket, int limit,
+        int from) throws ParseException {
         SearchRequestBuilder searchRequestBuilder = 
getClient().prepareSearch(ServiceAlarmTable.TABLE);
         searchRequestBuilder.setTypes(ServiceAlarmTable.TABLE_TYPE);
         searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
 
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
-        
boolQueryBuilder.must().add(QueryBuilders.rangeQuery(ServiceAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(start).lte(end));
+        
boolQueryBuilder.must().add(QueryBuilders.rangeQuery(ServiceAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
         if (StringUtils.isNotEmpty(keyword)) {
             
boolQueryBuilder.must().add(QueryBuilders.matchQuery(ServiceAlarmTable.COLUMN_ALARM_CONTENT,
 keyword));
         }
@@ -68,7 +69,7 @@ public Alarm loadAlarmList(String keyword, long start, long 
end, int limit, int
         alarm.setTotal((int)searchResponse.getHits().getTotalHits());
         for (SearchHit searchHit : searchHits) {
             AlarmItem alarmItem = new AlarmItem();
-            alarmItem.setId(searchHit.getId());
+            
alarmItem.setId(((Number)searchHit.getSource().get(ServiceAlarmTable.COLUMN_SERVICE_ID)).intValue());
             
alarmItem.setTitle((String)searchHit.getSource().get(ServiceAlarmTable.COLUMN_ALARM_CONTENT));
             
alarmItem.setContent((String)searchHit.getSource().get(ServiceAlarmTable.COLUMN_ALARM_CONTENT));
 
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/define/register/InstanceEsTableDefine.java
 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/define/register/InstanceEsTableDefine.java
index e16d08296..ec545715a 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/define/register/InstanceEsTableDefine.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/define/register/InstanceEsTableDefine.java
@@ -37,11 +37,12 @@ public InstanceEsTableDefine() {
 
     @Override public void initialize() {
         addColumn(new 
ElasticSearchColumnDefine(InstanceTable.COLUMN_APPLICATION_ID, 
ElasticSearchColumnDefine.Type.Integer.name()));
+        addColumn(new 
ElasticSearchColumnDefine(InstanceTable.COLUMN_APPLICATION_CODE, 
ElasticSearchColumnDefine.Type.Text.name()));
         addColumn(new 
ElasticSearchColumnDefine(InstanceTable.COLUMN_AGENT_UUID, 
ElasticSearchColumnDefine.Type.Keyword.name()));
         addColumn(new 
ElasticSearchColumnDefine(InstanceTable.COLUMN_REGISTER_TIME, 
ElasticSearchColumnDefine.Type.Long.name()));
         addColumn(new 
ElasticSearchColumnDefine(InstanceTable.COLUMN_INSTANCE_ID, 
ElasticSearchColumnDefine.Type.Integer.name()));
         addColumn(new 
ElasticSearchColumnDefine(InstanceTable.COLUMN_HEARTBEAT_TIME, 
ElasticSearchColumnDefine.Type.Long.name()));
-        addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_OS_INFO, 
ElasticSearchColumnDefine.Type.Keyword.name()));
+        addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_OS_INFO, 
ElasticSearchColumnDefine.Type.Text.name()));
         addColumn(new 
ElasticSearchColumnDefine(InstanceTable.COLUMN_ADDRESS_ID, 
ElasticSearchColumnDefine.Type.Integer.name()));
         addColumn(new 
ElasticSearchColumnDefine(InstanceTable.COLUMN_IS_ADDRESS, 
ElasticSearchColumnDefine.Type.Integer.name()));
     }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/register/InstanceRegisterH2DAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/register/InstanceRegisterH2DAO.java
index e1042f5dc..5f35369ac 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/register/InstanceRegisterH2DAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/register/InstanceRegisterH2DAO.java
@@ -58,6 +58,7 @@ public InstanceRegisterH2DAO(H2Client client) {
         source.put(InstanceTable.COLUMN_ID, instance.getId());
         source.put(InstanceTable.COLUMN_INSTANCE_ID, instance.getInstanceId());
         source.put(InstanceTable.COLUMN_APPLICATION_ID, 
instance.getApplicationId());
+        source.put(InstanceTable.COLUMN_APPLICATION_CODE, 
instance.getApplicationCode());
         source.put(InstanceTable.COLUMN_AGENT_UUID, instance.getAgentUUID());
         source.put(InstanceTable.COLUMN_REGISTER_TIME, 
TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getRegisterTime()));
         source.put(InstanceTable.COLUMN_HEARTBEAT_TIME, 
TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getHeartBeatTime()));
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationAlarmH2UIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationAlarmH2UIDAO.java
index f224fbd0c..75ff76936 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationAlarmH2UIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationAlarmH2UIDAO.java
@@ -34,7 +34,7 @@ public ApplicationAlarmH2UIDAO(H2Client client) {
     }
 
     @Override
-    public Alarm loadAlarmList(String keyword, long start, long end, int 
limit, int from) throws ParseException {
+    public Alarm loadAlarmList(String keyword, long startTimeBucket, long 
endTimeBucket, int limit, int from) throws ParseException {
         return null;
     }
 }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationAlarmListH2UIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationAlarmListH2UIDAO.java
index 598144a2a..73eb9408b 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationAlarmListH2UIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationAlarmListH2UIDAO.java
@@ -33,7 +33,7 @@ public ApplicationAlarmListH2UIDAO(H2Client client) {
         super(client);
     }
 
-    @Override public List<Integer> getAlarmedApplicationNum(Step step, long 
start, long end) {
+    @Override public List<AlarmTrend> getAlarmedApplicationNum(Step step, long 
startTimeBucket, long endTimeBucket) {
         return null;
     }
 }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceAlarmH2UIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceAlarmH2UIDAO.java
index 7f3b71baa..6316978fe 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceAlarmH2UIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceAlarmH2UIDAO.java
@@ -32,7 +32,7 @@ public InstanceAlarmH2UIDAO(H2Client client) {
         super(client);
     }
 
-    @Override public Alarm loadAlarmList(String keyword, long start, long end, 
int limit, int from) {
+    @Override public Alarm loadAlarmList(String keyword, long startTimeBucket, 
long endTimeBucket, int limit, int from) {
         return null;
     }
 }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceAlarmH2UIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceAlarmH2UIDAO.java
index 251e753d3..01b4cf6ea 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceAlarmH2UIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceAlarmH2UIDAO.java
@@ -32,7 +32,7 @@ public ServiceAlarmH2UIDAO(H2Client client) {
         super(client);
     }
 
-    @Override public Alarm loadAlarmList(String keyword, long start, long end, 
int limit, int from) {
+    @Override public Alarm loadAlarmList(String keyword, long startTimeBucket, 
long endTimeBucket, int limit, int from) {
         return null;
     }
 }
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/define/register/InstanceH2TableDefine.java
 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/define/register/InstanceH2TableDefine.java
index 2b763d17f..54789fa01 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/define/register/InstanceH2TableDefine.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/define/register/InstanceH2TableDefine.java
@@ -34,6 +34,7 @@ public InstanceH2TableDefine() {
     @Override public void initialize() {
         addColumn(new H2ColumnDefine(InstanceTable.COLUMN_ID, 
H2ColumnDefine.Type.Varchar.name()));
         addColumn(new H2ColumnDefine(InstanceTable.COLUMN_APPLICATION_ID, 
H2ColumnDefine.Type.Int.name()));
+        addColumn(new H2ColumnDefine(InstanceTable.COLUMN_APPLICATION_CODE, 
H2ColumnDefine.Type.Varchar.name()));
         addColumn(new H2ColumnDefine(InstanceTable.COLUMN_AGENT_UUID, 
H2ColumnDefine.Type.Varchar.name()));
         addColumn(new H2ColumnDefine(InstanceTable.COLUMN_REGISTER_TIME, 
H2ColumnDefine.Type.Bigint.name()));
         addColumn(new H2ColumnDefine(InstanceTable.COLUMN_INSTANCE_ID, 
H2ColumnDefine.Type.Int.name()));
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/AlarmQuery.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/AlarmQuery.java
index 6b1df8d77..678ab69d7 100644
--- 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/AlarmQuery.java
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/AlarmQuery.java
@@ -28,6 +28,7 @@
 import org.apache.skywalking.apm.collector.ui.graphql.Query;
 import org.apache.skywalking.apm.collector.ui.service.AlarmService;
 import org.apache.skywalking.apm.collector.ui.utils.DurationUtils;
+import org.apache.skywalking.apm.collector.ui.utils.PaginationUtils;
 
 /**
  * @author peng-yongsheng
@@ -50,19 +51,18 @@ private AlarmService getAlarmService() {
 
     public Alarm loadAlarmList(String keyword, AlarmType alarmType, Duration 
duration,
         Pagination paging) throws ParseException {
-        long start = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getStart()) / 100;
-        long end = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getEnd()) / 100;
+        long startTimeBucket = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getStart()) / 100;
+        long endTimeBucket = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getEnd()) / 100;
 
-        int limit = paging.getPageSize();
-        int from = paging.getPageSize() * paging.getPageNum();
+        PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(paging);
 
         switch (alarmType) {
             case APPLICATION:
-                return getAlarmService().loadApplicationAlarmList(keyword, 
start, end, limit, from);
+                return getAlarmService().loadApplicationAlarmList(keyword, 
startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
             case SERVER:
-                return getAlarmService().loadInstanceAlarmList(keyword, start, 
end, limit, from);
+                return getAlarmService().loadInstanceAlarmList(keyword, 
startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
             case SERVICE:
-                return getAlarmService().loadServiceAlarmList(keyword, start, 
end, limit, from);
+                return getAlarmService().loadServiceAlarmList(keyword, 
startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
             default:
                 return new Alarm();
         }
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/OverViewLayerQuery.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/OverViewLayerQuery.java
index aceb82c0a..81210b679 100644
--- 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/OverViewLayerQuery.java
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/OverViewLayerQuery.java
@@ -115,17 +115,17 @@ public AlarmTrend getAlarmTrend(Duration duration) throws 
ParseException {
         long startTimeBucket = 
DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
         long endTimeBucket = 
DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
 
-        long start = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getStart());
-        long end = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getEnd());
+        long startSecondTimeBucket = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getStart());
+        long endSecondTimeBucket = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getEnd());
 
-        return getAlarmService().getApplicationAlarmTrend(duration.getStep(), 
startTimeBucket, endTimeBucket, start, end);
+        return getAlarmService().getApplicationAlarmTrend(duration.getStep(), 
startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket);
     }
 
     public ConjecturalAppBrief getConjecturalApps(Duration duration) throws 
ParseException {
-        long start = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getStart());
-        long end = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getEnd());
+        long startSecondTimeBucket = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getStart());
+        long endSecondTimeBucket = 
DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), 
duration.getEnd());
 
-        return getApplicationService().getConjecturalApps(duration.getStep(), 
start, end);
+        return getApplicationService().getConjecturalApps(duration.getStep(), 
startSecondTimeBucket, endSecondTimeBucket);
     }
 
     public List<ServiceMetric> getTopNSlowService(Duration duration, int topN) 
throws ParseException {
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java
index 7ecd6f3ec..62bd60bfa 100644
--- 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java
@@ -18,19 +18,31 @@
 
 package org.apache.skywalking.apm.collector.ui.service;
 
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
 import java.text.ParseException;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import org.apache.skywalking.apm.collector.cache.CacheModule;
+import 
org.apache.skywalking.apm.collector.cache.service.ApplicationCacheService;
+import 
org.apache.skywalking.apm.collector.cache.service.ServiceNameCacheService;
 import org.apache.skywalking.apm.collector.core.module.ModuleManager;
+import org.apache.skywalking.apm.collector.core.util.Const;
 import org.apache.skywalking.apm.collector.storage.StorageModule;
 import 
org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationAlarmListUIDAO;
 import 
org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationAlarmUIDAO;
 import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceAlarmUIDAO;
 import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
 import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceAlarmUIDAO;
+import org.apache.skywalking.apm.collector.storage.table.register.Instance;
+import org.apache.skywalking.apm.collector.storage.table.register.ServiceName;
 import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
 import org.apache.skywalking.apm.collector.storage.ui.application.Application;
 import org.apache.skywalking.apm.collector.storage.ui.common.Step;
 import org.apache.skywalking.apm.collector.storage.ui.overview.AlarmTrend;
+import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
+import org.apache.skywalking.apm.collector.ui.utils.DurationUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,11 +53,16 @@
 
     private final Logger logger = LoggerFactory.getLogger(AlarmService.class);
 
+    private final Gson gson = new Gson();
     private final IInstanceUIDAO instanceDAO;
     private final IApplicationAlarmUIDAO applicationAlarmUIDAO;
     private final IInstanceAlarmUIDAO instanceAlarmUIDAO;
     private final IServiceAlarmUIDAO serviceAlarmUIDAO;
     private final IApplicationAlarmListUIDAO applicationAlarmListUIDAO;
+    private final ApplicationCacheService applicationCacheService;
+    private final ServiceNameCacheService serviceNameCacheService;
+    private static final String RESPONSE_TIME_ALARM = " response time alarm.";
+    private static final String SUCCESS_RATE_ALARM = " success rate alarm.";
 
     public AlarmService(ModuleManager moduleManager) {
         this.instanceDAO = 
moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class);
@@ -53,35 +70,93 @@ public AlarmService(ModuleManager moduleManager) {
         this.instanceAlarmUIDAO = 
moduleManager.find(StorageModule.NAME).getService(IInstanceAlarmUIDAO.class);
         this.serviceAlarmUIDAO = 
moduleManager.find(StorageModule.NAME).getService(IServiceAlarmUIDAO.class);
         this.applicationAlarmListUIDAO = 
moduleManager.find(StorageModule.NAME).getService(IApplicationAlarmListUIDAO.class);
+        this.applicationCacheService = 
moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
+        this.serviceNameCacheService = 
moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
     }
 
-    public Alarm loadApplicationAlarmList(String keyword, long start, long end,
+    public Alarm loadApplicationAlarmList(String keyword, long 
startTimeBucket, long endTimeBucket,
         int limit, int from) throws ParseException {
-        logger.debug("keyword: {}, start: {}, end: {}, limit: {}, from: {}", 
keyword, start, end, limit, from);
-        return applicationAlarmUIDAO.loadAlarmList(keyword, start, end, limit, 
from);
+        logger.debug("keyword: {}, startTimeBucket: {}, endTimeBucket: {}, 
limit: {}, from: {}", keyword, startTimeBucket, endTimeBucket, limit, from);
+        Alarm alarm = applicationAlarmUIDAO.loadAlarmList(keyword, 
startTimeBucket, endTimeBucket, limit, from);
+        alarm.getItems().forEach(item -> {
+            String applicationCode = 
applicationCacheService.getApplicationById(item.getId()).getApplicationCode();
+            switch (item.getCauseType()) {
+                case SLOW_RESPONSE:
+                    item.setTitle("Application " + applicationCode + 
RESPONSE_TIME_ALARM);
+                    break;
+                case LOW_SUCCESS_RATE:
+                    item.setTitle("Application " + applicationCode + 
SUCCESS_RATE_ALARM);
+                    break;
+            }
+        });
+        return alarm;
     }
 
-    public Alarm loadInstanceAlarmList(String keyword, long start, long end,
+    public Alarm loadInstanceAlarmList(String keyword, long startTimeBucket, 
long endTimeBucket,
         int limit, int from) throws ParseException {
-        logger.debug("keyword: {}, start: {}, end: {}, limit: {}, from: {}", 
keyword, start, end, limit, from);
-        return instanceAlarmUIDAO.loadAlarmList(keyword, start, end, limit, 
from);
+        logger.debug("keyword: {}, startTimeBucket: {}, endTimeBucket: {}, 
limit: {}, from: {}", keyword, startTimeBucket, endTimeBucket, limit, from);
+        Alarm alarm = instanceAlarmUIDAO.loadAlarmList(keyword, 
startTimeBucket, endTimeBucket, limit, from);
+        alarm.getItems().forEach(item -> {
+            Instance instance = instanceDAO.getInstance(item.getId());
+            String applicationCode = 
applicationCacheService.getApplicationById(instance.getApplicationId()).getApplicationCode();
+            String serverName = buildServerName(instance.getOsInfo());
+            switch (item.getCauseType()) {
+                case SLOW_RESPONSE:
+                    item.setTitle("Server " + serverName + " of Application " 
+ applicationCode + RESPONSE_TIME_ALARM);
+                    break;
+                case LOW_SUCCESS_RATE:
+                    item.setTitle("Server " + serverName + " of Application  " 
+ applicationCode + SUCCESS_RATE_ALARM);
+                    break;
+            }
+        });
+
+        return alarm;
     }
 
-    public Alarm loadServiceAlarmList(String keyword, long start, long end,
+    public Alarm loadServiceAlarmList(String keyword, long startTimeBucket, 
long endTimeBucket,
         int limit, int from) throws ParseException {
-        logger.debug("keyword: {}, start: {}, end: {}, limit: {}, from: {}", 
keyword, start, end, limit, from);
-        return serviceAlarmUIDAO.loadAlarmList(keyword, start, end, limit, 
from);
+        logger.debug("keyword: {}, startTimeBucket: {}, endTimeBucket: {}, 
limit: {}, from: {}", keyword, startTimeBucket, endTimeBucket, limit, from);
+        Alarm alarm = serviceAlarmUIDAO.loadAlarmList(keyword, 
startTimeBucket, endTimeBucket, limit, from);
+        alarm.getItems().forEach(item -> {
+            ServiceName serviceName = 
serviceNameCacheService.get(item.getId());
+            String applicationCode = 
applicationCacheService.getApplicationById(serviceName.getApplicationId()).getApplicationCode();
+            switch (item.getCauseType()) {
+                case SLOW_RESPONSE:
+                    item.setTitle("Service " + serviceName.getServiceName() + 
" of Application " + applicationCode + RESPONSE_TIME_ALARM);
+                    break;
+                case LOW_SUCCESS_RATE:
+                    item.setTitle("Service " + serviceName.getServiceName() + 
" of Application  " + applicationCode + SUCCESS_RATE_ALARM);
+                    break;
+            }
+        });
+        return alarm;
     }
 
-    public AlarmTrend getApplicationAlarmTrend(Step step, long 
startTimeBucket, long endTimeBucket, long start,
-        long end) throws ParseException {
-        List<Application> applications = instanceDAO.getApplications(start, 
end);
+    public AlarmTrend getApplicationAlarmTrend(Step step, long 
startTimeBucket, long endTimeBucket,
+        long startSecondTimeBucket,
+        long endSecondTimeBucket) throws ParseException {
+        List<Application> applications = 
instanceDAO.getApplications(startSecondTimeBucket, endSecondTimeBucket);
+
+        List<DurationPoint> durationPoints = 
DurationUtils.INSTANCE.getDurationPoints(step, startTimeBucket, endTimeBucket);
+
+        List<IApplicationAlarmListUIDAO.AlarmTrend> alarmTrends = 
applicationAlarmListUIDAO.getAlarmedApplicationNum(step, startTimeBucket, 
endTimeBucket);
+
+        Map<Long, Integer> trendsMap = new HashMap<>();
+        alarmTrends.forEach(alarmTrend -> 
trendsMap.put(alarmTrend.getTimeBucket(), alarmTrend.getNumberOfApplication()));
 
-        List<Integer> applicationNum = 
applicationAlarmListUIDAO.getAlarmedApplicationNum(step, startTimeBucket, 
endTimeBucket);
         AlarmTrend alarmTrend = new AlarmTrend();
-        applicationNum.forEach(num -> {
-            alarmTrend.getNumOfAlarmRate().add((num * 10000) / 
(applications.size()));
+        durationPoints.forEach(durationPoint -> {
+            
alarmTrend.getNumOfAlarmRate().add((trendsMap.getOrDefault(durationPoint.getPoint(),
 0) * 10000) / (applications.size()));
         });
         return alarmTrend;
     }
+
+    private String buildServerName(String osInfoJson) {
+        JsonObject osInfo = gson.fromJson(osInfoJson, JsonObject.class);
+        String serverName = Const.UNKNOWN;
+        if (osInfo.has("hostName")) {
+            serverName = osInfo.get("hostName").getAsString();
+        }
+        return serverName;
+    }
 }
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java
index 3080af6fe..4493781c6 100644
--- 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java
@@ -112,7 +112,7 @@ public ApplicationService(ModuleManager moduleManager) {
         return applicationThroughput;
     }
 
-    public ConjecturalAppBrief getConjecturalApps(Step step, long start, long 
end) throws ParseException {
+    public ConjecturalAppBrief getConjecturalApps(Step step, long 
startSecondTimeBucket, long endSecondTimeBucket) throws ParseException {
         List<ConjecturalApp> conjecturalApps = 
networkAddressUIDAO.getConjecturalApps();
         conjecturalApps.forEach(conjecturalApp -> {
             String name = 
ServerTypeDefine.getInstance().getServerType(conjecturalApp.getId());
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java
index ecb02d2ec..7d4fe4180 100644
--- 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java
@@ -60,7 +60,7 @@ public ApplicationTopologyService(ModuleManager 
moduleManager) {
 
     public Topology getApplicationTopology(Step step, int applicationId, long 
startTimeBucket,
         long endTimeBucket, long startSecondTimeBucket, long 
endSecondTimeBucket) throws ParseException {
-        logger.debug("startTime: {}, endTime: {}", startTimeBucket, 
endTimeBucket);
+        logger.debug("startTimeBucket: {}, endTimeBucket: {}", 
startTimeBucket, endTimeBucket);
         List<IApplicationComponentUIDAO.ApplicationComponent> 
applicationComponents = applicationComponentUIDAO.load(step, startTimeBucket, 
endTimeBucket);
         List<IApplicationMappingUIDAO.ApplicationMapping> applicationMappings 
= applicationMappingUIDAO.load(step, startTimeBucket, endTimeBucket);
 
@@ -82,6 +82,6 @@ public Topology getApplicationTopology(Step step, int 
applicationId, long startT
 
         TopologyBuilder builder = new TopologyBuilder(moduleManager);
 
-        return builder.build(applicationComponents, applicationMappings, 
applicationMetrics, callerReferenceMetric, calleeReferenceMetric, 
startSecondTimeBucket, endSecondTimeBucket);
+        return builder.build(applicationComponents, applicationMappings, 
applicationMetrics, callerReferenceMetric, calleeReferenceMetric, 
startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket);
     }
 }
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ClusterTopologyService.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ClusterTopologyService.java
index 2b215cd10..8e1609c72 100644
--- 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ClusterTopologyService.java
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ClusterTopologyService.java
@@ -72,6 +72,6 @@ public Topology getClusterTopology(Step step, long 
startTimeBucket, long endTime
 
         TopologyBuilder builder = new TopologyBuilder(moduleManager);
 
-        return builder.build(applicationComponents, applicationMappings, 
applicationMetrics, callerReferenceMetric, calleeReferenceMetric, 
startSecondTimeBucket, endSecondTimeBucket);
+        return builder.build(applicationComponents, applicationMappings, 
applicationMetrics, callerReferenceMetric, calleeReferenceMetric, 
startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket);
     }
 }
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java
index f3e7d85cf..93528977a 100644
--- 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java
@@ -146,7 +146,8 @@ public GCTrend getGCTrend(int instanceId, Step step, long 
startTimeBucket,
         return gcTrend;
     }
 
-    public MemoryTrend getMemoryTrend(int instanceId, Step step, long 
startTimeBucket, long endTimeBucket) throws ParseException {
+    public MemoryTrend getMemoryTrend(int instanceId, Step step, long 
startTimeBucket,
+        long endTimeBucket) throws ParseException {
         MemoryTrend memoryTrend = new MemoryTrend();
         List<DurationPoint> durationPoints = 
DurationUtils.INSTANCE.getDurationPoints(step, startTimeBucket, endTimeBucket);
         IMemoryMetricUIDAO.Trend heapMemoryTrend = 
memoryMetricUIDAO.getHeapMemoryTrend(instanceId, step, durationPoints);
@@ -162,9 +163,7 @@ public MemoryTrend getMemoryTrend(int instanceId, Step 
step, long startTimeBucke
 
     private void buildAppServerInfo(List<AppServerInfo> serverInfos) {
         serverInfos.forEach(serverInfo -> {
-            int applicationId = 
instanceCacheService.getApplicationId(serverInfo.getId());
-            serverInfo.setApplicationId(applicationId);
-            
serverInfo.setApplicationCode(applicationCacheService.getApplicationById(applicationId).getApplicationCode());
+            
serverInfo.setApplicationCode(applicationCacheService.getApplicationById(serverInfo.getApplicationId()).getApplicationCode());
             if (StringUtils.isNotEmpty(serverInfo.getOsInfo())) {
                 JsonObject osInfoJson = gson.fromJson(serverInfo.getOsInfo(), 
JsonObject.class);
                 if (osInfoJson.has("osName")) {
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceTopologyService.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceTopologyService.java
index f932d0969..c8f54712b 100644
--- 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceTopologyService.java
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceTopologyService.java
@@ -94,6 +94,7 @@ public Topology getServiceTopology(Step step, int serviceId, 
long startTimeBucke
             } catch (ParseException e) {
                 logger.error(e.getMessage(), e);
             }
+            call.setAlert(false);
             calls.add(call);
         });
 
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java
index fc4deefba..cbd013e2d 100644
--- 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java
@@ -33,6 +33,7 @@
 import 
org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMetricUIDAO;
 import 
org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationReferenceMetricUIDAO;
 import org.apache.skywalking.apm.collector.storage.table.register.Application;
+import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
 import 
org.apache.skywalking.apm.collector.storage.ui.application.ApplicationNode;
 import 
org.apache.skywalking.apm.collector.storage.ui.application.ConjecturalNode;
 import org.apache.skywalking.apm.collector.storage.ui.common.Call;
@@ -55,11 +56,13 @@
     private final ApplicationCacheService applicationCacheService;
     private final ServerService serverService;
     private final SecondBetweenService secondBetweenService;
+    private final AlarmService alarmService;
 
     TopologyBuilder(ModuleManager moduleManager) {
         this.applicationCacheService = 
moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
         this.serverService = new ServerService(moduleManager);
         this.secondBetweenService = new SecondBetweenService(moduleManager);
+        this.alarmService = new AlarmService(moduleManager);
     }
 
     Topology build(List<IApplicationComponentUIDAO.ApplicationComponent> 
applicationComponents,
@@ -67,7 +70,7 @@ Topology 
build(List<IApplicationComponentUIDAO.ApplicationComponent> application
         List<IApplicationMetricUIDAO.ApplicationMetric> applicationMetrics,
         List<IApplicationReferenceMetricUIDAO.ApplicationReferenceMetric> 
callerReferenceMetric,
         List<IApplicationReferenceMetricUIDAO.ApplicationReferenceMetric> 
calleeReferenceMetric,
-        long startSecondTimeBucket, long endSecondTimeBucket) {
+        long startTimeBucket, long endTimeBucket, long startSecondTimeBucket, 
long endSecondTimeBucket) {
         Map<Integer, String> components = 
changeNodeComp2Map(applicationComponents);
         Map<Integer, Integer> mappings = 
changeMapping2Map(applicationMappings);
 
@@ -91,9 +94,29 @@ Topology 
build(List<IApplicationComponentUIDAO.ApplicationComponent> application
             
applicationNode.setAvgResponseTime((applicationMetric.getDurations() - 
applicationMetric.getErrorDurations()) / (applicationMetric.getCalls() - 
applicationMetric.getErrorCalls()));
             
applicationNode.setApdex(ApdexCalculator.INSTANCE.calculate(applicationMetric.getSatisfiedCount(),
 applicationMetric.getToleratingCount(), 
applicationMetric.getFrustratedCount()));
             applicationNode.setAlarm(false);
+            try {
+                Alarm alarm = 
alarmService.loadApplicationAlarmList(Const.EMPTY_STRING, startTimeBucket, 
endTimeBucket, 1, 0);
+                if (alarm.getItems().size() > 0) {
+                    applicationNode.setAlarm(true);
+                }
+            } catch (ParseException e) {
+                logger.error(e.getMessage(), e);
+            }
+
             
applicationNode.setNumOfServer(serverService.getAllServer(applicationId, 
startSecondTimeBucket, endSecondTimeBucket).size());
-            applicationNode.setNumOfServerAlarm(1);
-            applicationNode.setNumOfServiceAlarm(1);
+            try {
+                Alarm alarm = 
alarmService.loadInstanceAlarmList(Const.EMPTY_STRING, startTimeBucket, 
endTimeBucket, 1000, 0);
+                applicationNode.setNumOfServerAlarm(alarm.getItems().size());
+            } catch (ParseException e) {
+                logger.error(e.getMessage(), e);
+            }
+
+            try {
+                Alarm alarm = 
alarmService.loadServiceAlarmList(Const.EMPTY_STRING, startTimeBucket, 
endTimeBucket, 1000, 0);
+                applicationNode.setNumOfServiceAlarm(alarm.getItems().size());
+            } catch (ParseException e) {
+                logger.error(e.getMessage(), e);
+            }
             nodes.add(applicationNode);
         });
 
@@ -117,7 +140,7 @@ Topology 
build(List<IApplicationComponentUIDAO.ApplicationComponent> application
             int actualTargetId = 
mappings.getOrDefault(target.getApplicationId(), target.getApplicationId());
             call.setTarget(actualTargetId);
             
call.setTargetName(applicationCacheService.getApplicationById(actualTargetId).getApplicationCode());
-            call.setAlert(true);
+            call.setAlert(false);
             call.setCallType(components.get(referenceMetric.getTarget()));
             try {
                 call.setCallsPerSec(referenceMetric.getCalls() / 
secondBetweenService.calculate(source.getApplicationId(), 
startSecondTimeBucket, endSecondTimeBucket));
@@ -153,7 +176,7 @@ Topology 
build(List<IApplicationComponentUIDAO.ApplicationComponent> application
             call.setSourceName(source.getApplicationCode());
             call.setTarget(target.getApplicationId());
             call.setTargetName(target.getApplicationCode());
-            call.setAlert(true);
+            call.setAlert(false);
 
             if (source.getApplicationId() == Const.NONE_APPLICATION_ID) {
                 call.setCallType(Const.EMPTY_STRING);
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtils.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtils.java
new file mode 100644
index 000000000..9250b138a
--- /dev/null
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtils.java
@@ -0,0 +1,53 @@
+/*
+ * 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.apm.collector.ui.utils;
+
+import org.apache.skywalking.apm.collector.storage.ui.common.Pagination;
+
+/**
+ * @author peng-yongsheng
+ */
+public enum PaginationUtils {
+    INSTANCE;
+
+    public Page exchange(Pagination paging) {
+        int limit = paging.getPageSize();
+        int from = paging.getPageSize() * (paging.getPageNum() - 1);
+
+        return new Page(from, limit);
+    }
+
+    public class Page {
+        private int from;
+        private int limit;
+
+        Page(int from, int limit) {
+            this.from = from;
+            this.limit = limit;
+        }
+
+        public int getFrom() {
+            return from;
+        }
+
+        public int getLimit() {
+            return limit;
+        }
+    }
+}
diff --git 
a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtilsTestCase.java
 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtilsTestCase.java
new file mode 100644
index 000000000..782d5ff1c
--- /dev/null
+++ 
b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtilsTestCase.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.apm.collector.ui.utils;
+
+import org.apache.skywalking.apm.collector.storage.ui.common.Pagination;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * @author peng-yongsheng
+ */
+public class PaginationUtilsTestCase {
+
+    @Test
+    public void test() {
+        Pagination pagination = new Pagination();
+        pagination.setPageSize(10);
+        pagination.setPageNum(1);
+
+        PaginationUtils.Page page = 
PaginationUtils.INSTANCE.exchange(pagination);
+        Assert.assertEquals(0, page.getFrom());
+        Assert.assertEquals(10, page.getLimit());
+
+        pagination = new Pagination();
+        pagination.setPageSize(10);
+        pagination.setPageNum(2);
+
+        page = PaginationUtils.INSTANCE.exchange(pagination);
+        Assert.assertEquals(10, page.getFrom());
+        Assert.assertEquals(10, page.getLimit());
+    }
+}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to