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

[incubator-skywalking] branch master updated: Feature/1064 (#1093)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new fc322e1  Feature/1064 (#1093)
fc322e1 is described below

commit fc322e1aadfb709f259608255bbdaa36c2776074
Author: 彭勇升 pengys <80...@qq.com>
AuthorDate: Sat Apr 21 12:39:29 2018 +0800

    Feature/1064 (#1093)
    
    * Sample of DAO javadoc.
    
    #1064
    
    * Part of UI DAO documents commit.
    
    * Describe all DAO in UI module .
    
    #1064
    
    * The class be tested was deleted.
    
    * Fixed compile failure.
    
    * Fixed CI failure cause of special character.
    
    * gte -> gt
    lte -> le
    
    #1064
---
 .../storage/dao/ui/IApplicationAlarmListUIDAO.java | 17 ++++
 .../storage/dao/ui/IApplicationAlarmUIDAO.java     | 21 ++++-
 .../storage/dao/ui/IApplicationComponentUIDAO.java | 19 +++++
 .../storage/dao/ui/IApplicationMappingUIDAO.java   | 24 ++++++
 .../storage/dao/ui/IApplicationMetricUIDAO.java    | 49 +++++++++++
 .../dao/ui/IApplicationReferenceMetricUIDAO.java   | 27 ++++++
 .../collector/storage/dao/ui/ICpuMetricUIDAO.java  | 27 ++++++
 .../collector/storage/dao/ui/IGCMetricUIDAO.java   | 49 +++++++++++
 .../storage/dao/ui/IGlobalTraceUIDAO.java          | 22 +++++
 .../storage/dao/ui/IInstanceAlarmUIDAO.java        | 21 ++++-
 .../storage/dao/ui/IInstanceMetricUIDAO.java       | 62 ++++++++++++++
 .../collector/storage/dao/ui/IInstanceUIDAO.java   | 81 +++++++++++++++++-
 .../storage/dao/ui/IMemoryMetricUIDAO.java         | 57 +++++++++++--
 .../storage/dao/ui/INetworkAddressUIDAO.java       | 24 +++++-
 .../storage/dao/ui/ISegmentDurationUIDAO.java      | 29 +++++++
 .../collector/storage/dao/ui/ISegmentUIDAO.java    | 13 +++
 .../storage/dao/ui/IServiceAlarmUIDAO.java         | 21 ++++-
 .../storage/dao/ui/IServiceMetricUIDAO.java        | 98 +++++++++++++++++++++-
 .../storage/dao/ui/IServiceNameServiceUIDAO.java   | 25 ++++++
 .../dao/ui/IServiceReferenceMetricUIDAO.java       | 49 +++++++++++
 .../storage/es/dao/ui/InstanceEsUIDAO.java         | 41 ---------
 .../storage/es/dao/ui/InstanceMetricEsUIDAO.java   | 25 ++----
 .../storage/es/dao/ui/NetworkAddressEsUIDAO.java   |  4 +-
 .../storage/es/dao/ui/ServiceMetricEsUIDAO.java    |  4 +-
 .../storage/h2/dao/ui/InstanceH2UIDAO.java         | 38 ---------
 .../storage/h2/dao/ui/NetworkAddressH2UIDAO.java   |  4 +-
 .../storage/h2/dao/ui/ServiceMetricH2UIDAO.java    |  2 +-
 .../ui/service/TimeSynchronousService.java         | 47 -----------
 .../collector/ui/service/ServerServiceTest.java    | 29 ++++---
 .../ui/service/TimeSynchronousServiceTest.java     | 55 ------------
 30 files changed, 751 insertions(+), 233 deletions(-)

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 4edbef7..9719e5c 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
@@ -23,10 +23,27 @@ import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.collector.storage.ui.common.Step;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmListTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IApplicationAlarmListUIDAO extends DAO {
 
+    /**
+     * <p>SQL as: select TIME_BUCKET, APPLICATION_ID, count(APPLICATION_ID) from APPLICATION_ALARM_LIST
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * group by TIME_BUCKET, APPLICATION_ID
+     *
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @return not nullable result list
+     */
     List<AlarmTrend> getAlarmedApplicationNum(Step step, long startTimeBucket, long endTimeBucket);
 
     class AlarmTrend {
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 a810fb3..4dbaab4 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
@@ -23,9 +23,28 @@ import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IApplicationAlarmUIDAO extends DAO {
 
-    Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException;
+    /**
+     * <p>SQL as: select APPLICATION_ID, ALARM_CONTENT, LAST_TIME_BUCKET, ALARM_TYPE from APPLICATION_ALARM
+     * where LAST_TIME_BUCKET ge ${startTimeBucket} and LAST_TIME_BUCKET le ${endTimeBucket}
+     * and ALARM_CONTENT like '%{keyword}%'
+     * <p>Note: keyword maybe not given
+     *
+     * @param keyword fuzzy query
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param limit limits the number of rows returned by the query
+     * @param from specified how many rows to skip
+     * @return application alarm items
+     * @throws ParseException alarm time parse exception
+     */
+    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/IApplicationComponentUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationComponentUIDAO.java
index 263ce12..f4abbc2 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationComponentUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationComponentUIDAO.java
@@ -23,10 +23,29 @@ import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.collector.storage.ui.common.Step;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponentTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IApplicationComponentUIDAO extends DAO {
 
+    /**
+     * Returns application components that collected between start time bucket
+     * and end time bucket.
+     *
+     * <p>SQL as: select COMPONENT_ID, APPLICATION_ID from APPLICATION_COMPONENT
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * group by COMPONENT_ID, APPLICATION_ID
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @return not nullable result list
+     */
     List<ApplicationComponent> load(Step step, long startTimeBucket, long endTimeBucket);
 
     class ApplicationComponent {
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMappingUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMappingUIDAO.java
index 1692a2b..dc2c73f 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMappingUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMappingUIDAO.java
@@ -23,9 +23,33 @@ import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.collector.storage.ui.common.Step;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponentTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.application.ApplicationComponentTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IApplicationMappingUIDAO extends DAO {
+
+    /**
+     * Returns application mapping data that collected between start time bucket
+     * and end time bucket. The application id was registered from server side,
+     * mapping application id was register from client side. So, this returned
+     * collection can be use to distinguished the application reference metrics
+     * which aggregated from server side or client side.
+     *
+     * <p>SQL as: select APPLICATION_ID, MAPPING_APPLICATION_ID from APPLICATION_MAPPING
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * group by APPLICATION_ID, MAPPING_APPLICATION_ID
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @return not nullable result list
+     */
     List<ApplicationMapping> load(Step step, long startTimeBucket, long endTimeBucket);
 
     class ApplicationMapping {
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMetricUIDAO.java
index 5aeac58..8807a81 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMetricUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMetricUIDAO.java
@@ -25,12 +25,61 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step;
 import org.apache.skywalking.apm.collector.storage.ui.overview.ApplicationTPS;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetricTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetricTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IApplicationMetricUIDAO extends DAO {
+
+    /**
+     * Returns the top n application throughput between start time bucket
+     * and end time bucket.
+     *
+     * <p>SQL as: select APPLICATION_ID, sum(TRANSACTION_CALLS) / betweenSecond as tps
+     * from APPLICATION_METRIC
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * and SOURCE_VALUE = ${metricSource}
+     * group by APPLICATION_ID
+     * order by tps desc
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     * <p>Note: SQL should be "select APPLICATION_ID, 0 as tps" when betweenSecond
+     * equal 0.
+     *
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param betweenSecond the seconds between start time bucket and end time bucket
+     * @param topN how many rows should return
+     * @param metricSource source of this metric, server side or client side
+     * @return not nullable result list
+     */
     List<ApplicationTPS> getTopNApplicationThroughput(Step step, long startTimeBucket, long endTimeBucket,
         int betweenSecond, int topN, MetricSource metricSource);
 
+    /**
+     * Returns aggregated application metrics that collected between start time bucket
+     * and end time bucket.
+     *
+     * <p>SQL as: select APPLICATION_ID, sum(TRANSACTION_CALLS), sum(TRANSACTION_ERROR_CALLS),
+     * sum(TRANSACTION_DURATION_SUM), sum(TRANSACTION_ERROR_DURATION_SUM),
+     * sum(SATISFIED_COUNT), sum(TOLERATING_COUNT), sum(FRUSTRATED_COUNT)
+     * from APPLICATION_METRIC
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * and SOURCE_VALUE = ${metricSource}
+     * group by APPLICATION_ID
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param metricSource source of this metric, server side or client side
+     * @return not nullable result list
+     */
     List<ApplicationMetric> getApplications(Step step, long startTimeBucket, long endTimeBucket,
         MetricSource metricSource);
 
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationReferenceMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationReferenceMetricUIDAO.java
index ef7e503..c8a7fd5 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationReferenceMetricUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationReferenceMetricUIDAO.java
@@ -24,10 +24,37 @@ import org.apache.skywalking.apm.collector.storage.table.MetricSource;
 import org.apache.skywalking.apm.collector.storage.ui.common.Step;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetricTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetricTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IApplicationReferenceMetricUIDAO extends DAO {
 
+    /**
+     * Returns aggregated application reference metrics that collected between
+     * start time bucket and end time bucket.
+     *
+     * <p>SQL as: select FRONT_APPLICATION_ID, BEHIND_APPLICATION_ID,
+     * sum(TRANSACTION_CALLS), sum(TRANSACTION_ERROR_CALLS), sum(TRANSACTION_DURATION_SUM), sum(TRANSACTION_ERROR_DURATION_SUM)
+     * from APPLICATION_REFERENCE_METRIC
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * and SOURCE_VALUE = ${metricSource}
+     * and ( FRONT_APPLICATION_ID in (${applicationIds}) or BEHIND_APPLICATION_ID in (${applicationIds}) )
+     * group by FRONT_APPLICATION_ID, BEHIND_APPLICATION_ID
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     * <p>Note: ${applicationIds} may not be given
+     *
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param metricSource source of this metric, server side or client side
+     * @param applicationIds source or target application ids,
+     * @return not nullable result list
+     */
     List<ApplicationReferenceMetric> getReferences(Step step, long startTimeBucket, long endTimeBucket,
         MetricSource metricSource, Integer... applicationIds);
 
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ICpuMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ICpuMetricUIDAO.java
index 30c5f4c..8d63f80 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ICpuMetricUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ICpuMetricUIDAO.java
@@ -20,12 +20,39 @@ package org.apache.skywalking.apm.collector.storage.dao.ui;
 
 import java.util.List;
 import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
+import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetricTable;
 import org.apache.skywalking.apm.collector.storage.ui.common.Step;
 import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link CpuMetricTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetricTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface ICpuMetricUIDAO extends DAO {
+
+    /**
+     * CPU Trend describes the trend of CPU in the given duration, which represents by the
+     * DurationPoint list in the `step` Unit.
+     * <p>SQL as: select USAGE_PERCENT, TIMES from CPU_METRIC where ID in (durationPoints),
+     * rule of ID generation is "${durationPoint}_${instanceId}".
+     * <p>The average usage percent formula is "( USAGE_PERCENT * 100 ) / TIMES", in order
+     * to avoid the result includes decimal value, cast the class to {@link Integer}.
+     * <p>Every element in return list must match DurationPoint list, which also means that,
+     * the two list must be in same size, and index match.
+     * <p>If some element of the return list can't be found, the implementor must set 0 as
+     * default value.
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param instanceId the owner id of this cpu metrics
+     * @param step the step which represent time formats
+     * @param durationPoints the time points in the time span
+     * @return every duration points average cpu usage percent metrics.
+     * @see org.apache.skywalking.apm.collector.storage.ui.common.Step
+     */
     List<Integer> getCPUTrend(int instanceId, Step step, List<DurationPoint> durationPoints);
 }
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IGCMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IGCMetricUIDAO.java
index 062ee68..cfde09e 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IGCMetricUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IGCMetricUIDAO.java
@@ -20,14 +20,63 @@ package org.apache.skywalking.apm.collector.storage.dao.ui;
 
 import java.util.List;
 import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
+import org.apache.skywalking.apm.collector.storage.table.jvm.GCMetricTable;
 import org.apache.skywalking.apm.collector.storage.ui.common.Step;
 import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link GCMetricTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.jvm.GCMetricTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IGCMetricUIDAO extends DAO {
+
+    /**
+     * Young GC Trend describes the trend of young generation garbage collection in the given
+     * duration, which represents by the DurationPoint list in the `step` Unit.
+     * <p>SQL as: select COUNT, TIMES from GC_METRIC where ID in (durationPoints), rule of
+     * ID generation is "${durationPoint}_${instanceId}_${gcPhrase}",
+     * {@link org.apache.skywalking.apm.network.proto.GCPhrase#NEW_VALUE}
+     * <p>The average young generation GC count percent formula is "COUNT / TIMES".
+     * <p>Every element in return list must match DurationPoint list, which also means that,
+     * the two list must be in same size, and index match.
+     * <p>If some element of the return list can't be found, the implementor must set 0 as
+     * default value.
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param instanceId the owner id of this GC metrics
+     * @param step the step which represent time formats
+     * @param durationPoints the time points in the time span
+     * @return every duration points average young generation GC count percent metrics.
+     * @see org.apache.skywalking.apm.collector.storage.ui.common.Step
+     * @see org.apache.skywalking.apm.network.proto.GCPhrase
+     */
     List<Integer> getYoungGCTrend(int instanceId, Step step, List<DurationPoint> durationPoints);
 
+    /**
+     * Old GC Trend describes the trend of old generation garbage collection in the given
+     * duration, which represents by the DurationPoint list in the `step` Unit.
+     * <p>SQL as: select COUNT, TIMES from GC_METRIC where ID in (durationPoints), rule of
+     * ID generation is "${durationPoint}_${instanceId}_${gcPhrase}",
+     * {@link org.apache.skywalking.apm.network.proto.GCPhrase#OLD_VALUE}
+     * <p>The average old generation GC count percent formula is "COUNT / TIMES".
+     * <p>Every element in return list must match DurationPoint list, which also means that,
+     * the two list must be in same size, and index match.
+     * <p>If some element of the return list can't be found, the implementor must set 0 as
+     * default value.
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param instanceId the owner id of this GC metrics
+     * @param step the step which represent time formats
+     * @param durationPoints the time points in the time span
+     * @return every duration points average old generation GC count percent metrics.
+     * @see org.apache.skywalking.apm.collector.storage.ui.common.Step
+     * @see org.apache.skywalking.apm.network.proto.GCPhrase
+     */
     List<Integer> getOldGCTrend(int instanceId, Step step, List<DurationPoint> durationPoints);
 }
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IGlobalTraceUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IGlobalTraceUIDAO.java
index 9a95a81..ae9eb22 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IGlobalTraceUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IGlobalTraceUIDAO.java
@@ -22,10 +22,32 @@ import java.util.List;
 import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.global.GlobalTraceTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.global.GlobalTraceTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IGlobalTraceUIDAO extends DAO {
+
+    /**
+     * Returns global trace ids by query operation with given segment id.
+     * Generally, only one global trace id will be found, but found more
+     * than one id when given segment id been in a batch process.
+     * <p>SQL as: select TRACE_ID from GLOBAL_TRACE where SEGMENT_ID = ${segmentId},
+     *
+     * @param segmentId argument to bind to the query
+     * @return not nullable result list containing global trace ids.
+     */
     List<String> getGlobalTraceId(String segmentId);
 
+    /**
+     * Returns segment ids by query operation with given global trace id.
+     * <p>SQL as: select SEGMENT_ID from GLOBAL_TRACE where TRACE_ID = ${globalTraceId},
+     *
+     * @param globalTraceId argument to bind to the query
+     * @return not nullable result list containing segment ids.
+     */
     List<String> getSegmentIds(String globalTraceId);
 }
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 9c7c737..86474ef 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
@@ -23,9 +23,28 @@ import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.alarm.InstanceAlarmTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IInstanceAlarmUIDAO extends DAO {
 
-    Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException;
+    /**
+     * <p>SQL as: select INSTANCE_ID, ALARM_CONTENT, LAST_TIME_BUCKET, ALARM_TYPE from INSTANCE_ALARM
+     * where LAST_TIME_BUCKET ge ${startTimeBucket} and LAST_TIME_BUCKET le ${endTimeBucket}
+     * and ALARM_CONTENT like '%{keyword}%'
+     * <p>Note: keyword maybe not given
+     *
+     * @param keyword fuzzy query
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param limit limits the number of rows returned by the query
+     * @param from specified how many rows to skip
+     * @return instance alarm items
+     * @throws ParseException alarm time parse exception
+     */
+    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/IInstanceMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceMetricUIDAO.java
index 51a8335..6281d6b 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceMetricUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceMetricUIDAO.java
@@ -26,14 +26,76 @@ import org.apache.skywalking.apm.collector.storage.ui.server.AppServerInfo;
 import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetricTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetricTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IInstanceMetricUIDAO extends DAO {
 
+    /**
+     * Returns the top n instance throughput between start time bucket
+     * and end time bucket.
+     *
+     * <p>SQL as: select APPLICATION_ID, sum(TRANSACTION_CALLS) / ${secondBetween} as tps
+     * from INSTANCE_METRIC
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * and SOURCE_VALUE = ${metricSource}
+     * and APPLICATION_ID = ${applicationId}
+     * group by INSTANCE_ID
+     * order by tps desc
+     *
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     * <p>Note: ${applicationId} may not be given
+     *
+     * @param applicationId owner of instances
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param secondBetween the seconds between start time bucket and end time bucket
+     * @param topN how many rows should return
+     * @param metricSource source of this metric, server side or client side
+     * @return not nullable result list
+     */
     List<AppServerInfo> getServerThroughput(int applicationId, Step step, long startTimeBucket, long endTimeBucket,
         int secondBetween, int topN, MetricSource metricSource);
 
+    /**
+     * Server TPS Trend describes the trend of instance throughout in the given duration,
+     * which represents by the DurationPoint list in the `step` Unit.
+     *
+     * <p>SQL as: select TRANSACTION_CALLS from INSTANCE_METRIC where ID in (durationPoints),
+     * rule of ID generation is "${durationPoint}_${instanceId}_${MetricSource.Callee}".
+     *
+     * <p>The formula is "TRANSACTION_CALLS * durationPoint#secondsBetween"
+     *
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param instanceId which instance should be query
+     * @param step the step which represent time formats
+     * @param durationPoints the time points in the time span
+     * @return every duration points average instance throughput metrics.
+     */
     List<Integer> getServerTPSTrend(int instanceId, Step step, List<DurationPoint> durationPoints);
 
+    /**
+     * Response time Trend describes the trend of instance average response time in the given duration,
+     * which represents by the DurationPoint list in the `step` Unit.
+     *
+     * <p>SQL as: select TRANSACTION_DURATION_SUM / TRANSACTION_CALLS from INSTANCE_METRIC where ID in (durationPoints),
+     * rule of ID generation is "${durationPoint}_${instanceId}_${MetricSource.Callee}".
+     *
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param instanceId which instance should be query
+     * @param step the step which represent time formats
+     * @param durationPoints the time points in the time span
+     * @return every duration points average instance response time metrics.
+     */
     List<Integer> getResponseTimeTrend(int instanceId, Step step, List<DurationPoint> durationPoints);
 }
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceUIDAO.java
index 92492e7..8c74fd3 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceUIDAO.java
@@ -19,28 +19,103 @@
 package org.apache.skywalking.apm.collector.storage.dao.ui;
 
 import java.util.List;
+import org.apache.skywalking.apm.collector.core.util.BooleanUtils;
 import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.collector.storage.table.register.Instance;
 import org.apache.skywalking.apm.collector.storage.ui.application.Application;
 import org.apache.skywalking.apm.collector.storage.ui.server.AppServerInfo;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.register.InstanceTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.register.InstanceTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IInstanceUIDAO extends DAO {
-    Long lastHeartBeatTime();
-
-    Long instanceLastHeartBeatTime(long applicationInstanceId);
 
+    /**
+     * Returns applications by query operation with given arguments.
+     * <p>SQL as: select APPLICATION_ID, count(APPLICATION_ID) from INSTANCE
+     * where IS_ADDRESS = {@link BooleanUtils#FALSE} and
+     * (( HEARTBEAT_TIME ge ${endSecondTimeBucket} and REGISTER_TIME le ${endSecondTimeBucket})
+     * or
+     * (REGISTER_TIME le ${endSecondTimeBucket} and HEARTBEAT_TIME ge ${startSecondTimeBucket}))
+     * and APPLICATION_ID in (${applicationIds})
+     * group by APPLICATION_ID
+     * <p>Note: ${applicationIds} may not be given
+     *
+     * @param startSecondTimeBucket start time format pattern is "yyyyMMddHHmmss"
+     * @param endSecondTimeBucket end time format pattern is "yyyyMMddHHmmss"
+     * @param applicationIds owner ids of instances
+     * @return not nullable result list containing application ids and number of instance.
+     */
     List<Application> getApplications(long startSecondTimeBucket, long endSecondTimeBucket, int... applicationIds);
 
+    /**
+     * Returns the detail of instance by given instance id.
+     * <p>SQL as: select * from INSTANCE where INSTANCE_ID = ${instanceId}
+     *
+     * @param instanceId argument to bind to the query
+     * @return the single instance object, may be null if not exist
+     */
     Instance getInstance(int instanceId);
 
+    /**
+     * Returns the detail of instances by given arguments.
+     * <p>SQL as: select * from INSTANCE
+     * where IS_ADDRESS = {@link BooleanUtils#FALSE} and
+     * (( HEARTBEAT_TIME ge ${endSecondTimeBucket} and REGISTER_TIME le ${endSecondTimeBucket})
+     * or
+     * (REGISTER_TIME le ${endSecondTimeBucket} and HEARTBEAT_TIME ge ${startSecondTimeBucket}))
+     * and OS_INFO like '%${keyword}%'
+     * <p>Note: ${keyword} may not be given
+     *
+     * @param keyword any words contains in OS information, use fuzzy search
+     * @param startSecondTimeBucket start time format pattern is "yyyyMMddHHmmss"
+     * @param endSecondTimeBucket end time format pattern is "yyyyMMddHHmmss"
+     * @return not nullable result list containing detail of instances.
+     */
     List<AppServerInfo> searchServer(String keyword, long startSecondTimeBucket, long endSecondTimeBucket);
 
+    /**
+     * Returns the detail of instances by given arguments.
+     * <p>SQL as: select * from INSTANCE where
+     * where IS_ADDRESS = {@link BooleanUtils#FALSE} and
+     * (( HEARTBEAT_TIME ge ${endSecondTimeBucket} and REGISTER_TIME le ${endSecondTimeBucket})
+     * or
+     * (REGISTER_TIME le ${endSecondTimeBucket} and HEARTBEAT_TIME ge ${startSecondTimeBucket}))
+     * and APPLICATION_ID = ${applicationId}
+     *
+     * @param applicationId owner of instances
+     * @param startSecondTimeBucket start time format pattern is "yyyyMMddHHmmss"
+     * @param endSecondTimeBucket end time format pattern is "yyyyMMddHHmmss"
+     * @return not nullable result list containing detail of instances.
+     */
     List<AppServerInfo> getAllServer(int applicationId, long startSecondTimeBucket, long endSecondTimeBucket);
 
+    /**
+     * Returns the earliest register time in all instances which
+     * belonged to the given application id.
+     * <p>SQL as: select REGISTER_TIME from INSTANCE where
+     * and APPLICATION_ID = ${applicationId}
+     * order by REGISTER_TIME asc
+     *
+     * @param applicationId owner of instances
+     * @return the earliest register time
+     */
     long getEarliestRegisterTime(int applicationId);
 
+    /**
+     * Returns the latest heart beat time in all instances which
+     * belonged to the given application id.
+     * <p>SQL as: select HEARTBEAT_TIME from INSTANCE where
+     * and APPLICATION_ID = ${applicationId}
+     * order by HEARTBEAT_TIME desc
+     *
+     * @param applicationId owner of instances
+     * @return the latest heart beat time
+     */
     long getLatestHeartBeatTime(int applicationId);
 }
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IMemoryMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IMemoryMetricUIDAO.java
index e1da59f..e9936f6 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IMemoryMetricUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IMemoryMetricUIDAO.java
@@ -21,15 +21,64 @@ package org.apache.skywalking.apm.collector.storage.dao.ui;
 import java.util.LinkedList;
 import java.util.List;
 import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
+import org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetricTable;
 import org.apache.skywalking.apm.collector.storage.ui.common.Step;
 import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link MemoryMetricTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.jvm.MemoryMetricTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IMemoryMetricUIDAO extends DAO {
+
+    /**
+     * Heap memory Trend describes the trend of Memory in the given duration, which
+     * represents by the DurationPoint list in the `step` Unit.
+     * <p>SQL as: select MAX, USED, TIMES from MEMORY_METRIC where ID in (durationPoints),
+     * rule of ID generation is "${durationPoint}_${instanceId}_${isHeap}".
+     * {@link org.apache.skywalking.apm.collector.core.util.BooleanUtils#TRUE}
+     * <p>The average usage percent formula is "MAX / TIMES" and "USED / TIMES"
+     * <p>Every element in return list must match DurationPoint list, which also means that,
+     * the two list must be in same size, and index match.
+     * <p>If some element of the return list can't be found, the implementor must set 0 as
+     * default value.
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param instanceId the owner id of this memory metrics
+     * @param step the step which represent time formats
+     * @param durationPoints the time points in the time span
+     * @return every duration points average heap memory max and usage percent metrics.
+     * @see org.apache.skywalking.apm.collector.storage.ui.common.Step
+     * @see org.apache.skywalking.apm.collector.core.util.BooleanUtils
+     */
     Trend getHeapMemoryTrend(int instanceId, Step step, List<DurationPoint> durationPoints);
 
+    /**
+     * Non heap memory Trend describes the trend of Memory in the given duration, which
+     * represents by the DurationPoint list in the `step` Unit.
+     * <p>SQL as: select MAX, USED, TIMES from MEMORY_METRIC where ID in (durationPoints),
+     * rule of ID generation is "${durationPoint}_${instanceId}_${isHeap}".
+     * {@link org.apache.skywalking.apm.collector.core.util.BooleanUtils#FALSE}
+     * <p>The average usage percent formula is "MAX / TIMES" and "USED / TIMES"
+     * <p>Every element in return list must match DurationPoint list, which also means that,
+     * the two list must be in same size, and index match.
+     * <p>If some element of the return list can't be found, the implementor must set 0 as
+     * default value.
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param instanceId the owner id of this memory metrics
+     * @param step the step which represent time formats
+     * @param durationPoints the time points in the time span
+     * @return every duration points average non heap memory max and usage percent metrics.
+     * @see org.apache.skywalking.apm.collector.storage.ui.common.Step
+     * @see org.apache.skywalking.apm.collector.core.util.BooleanUtils
+     */
     Trend getNoHeapMemoryTrend(int instanceId, Step step, List<DurationPoint> durationPoints);
 
     class Trend {
@@ -45,16 +94,8 @@ public interface IMemoryMetricUIDAO extends DAO {
             return metrics;
         }
 
-        public void setMetrics(List<Integer> metrics) {
-            this.metrics = metrics;
-        }
-
         public List<Integer> getMaxMetrics() {
             return maxMetrics;
         }
-
-        public void setMaxMetrics(List<Integer> maxMetrics) {
-            this.maxMetrics = maxMetrics;
-        }
     }
 }
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/INetworkAddressUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/INetworkAddressUIDAO.java
index c52dd39..97b8def 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/INetworkAddressUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/INetworkAddressUIDAO.java
@@ -23,10 +23,32 @@ import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.collector.storage.ui.overview.ConjecturalApp;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.register.NetworkAddressTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.register.NetworkAddressTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface INetworkAddressUIDAO extends DAO {
-    int getNumOfSpanLayer(int spanLayer);
 
+    /**
+     * <p>SQL as: select count(NETWORK_ADDRESS) from network_address
+     * where SRC_SPAN_LAYER = ${srcSpanLayer}
+     *
+     * @param srcSpanLayer the source layer of this network address register from
+     * @return count of network address register from the given source span layer
+     */
+    int getNumOfSpanLayer(int srcSpanLayer);
+
+    /**
+     * Returns the conjectural applications and the application count in every server type.
+     *
+     * <p>SQL as: select SERVER_TYPE, count(SERVER_TYPE) from network_address
+     * where SRC_SPAN_LAYER in (SpanLayer.Database_VALUE, SpanLayer.Cache_VALUE, SpanLayer.MQ_VALUE)
+     * group by SERVER_TYPE
+     *
+     * @return not nullable result list
+     */
     List<ConjecturalApp> getConjecturalApps();
 }
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ISegmentDurationUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ISegmentDurationUIDAO.java
index 73a3160..46e8282 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ISegmentDurationUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ISegmentDurationUIDAO.java
@@ -22,9 +22,38 @@ import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.collector.storage.ui.trace.TraceBrief;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.segment.SegmentDurationTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.segment.SegmentDurationTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface ISegmentDurationUIDAO extends DAO {
+
+    /**
+     * <p>SQL as: select SEGMENT_ID, START_TIME, SERVICE_NAME, DURATION, IS_ERROR
+     * from SEGMENT_DURATION
+     * where TIME_BUCKET ge ${startSecondTimeBucket} and TIME_BUCKET le ${endSecondTimeBucket}
+     * and DURATION ge ${minDuration} and DURATION le ${maxDuration}
+     * and SERVICE_NAME like '%${operationName}%'
+     * and SEGMENT_ID in (${segmentIds})
+     * and APPLICATION_ID = ${applicationId}
+     * LIMIT ${limit} OFFSET ${from}
+     *
+     * <p>Note: Every conditions maybe not given except limit and from condition.
+     *
+     * @param startSecondTimeBucket start time format pattern is "yyyyMMddHHmmss"
+     * @param endSecondTimeBucket end time format pattern is "yyyyMMddHHmmss"
+     * @param minDuration a range condition for query, segment duration greater than given value
+     * @param maxDuration a range condition for query, segment duration less than given value
+     * @param operationName the entry span's operation name, provide fuzzy query
+     * @param applicationId owner id of segment
+     * @param limit limits the number of rows returned by the query
+     * @param from specified how many rows to skip
+     * @param segmentIds mutual exclusion on other condition
+     * @return not nullable result list
+     */
     TraceBrief loadTop(long startSecondTimeBucket, long endSecondTimeBucket, long minDuration, long maxDuration,
         String operationName, int applicationId, int limit, int from, String... segmentIds);
 }
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ISegmentUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ISegmentUIDAO.java
index 4dbd597..e290666 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ISegmentUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/ISegmentUIDAO.java
@@ -22,8 +22,21 @@ import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.network.proto.TraceSegmentObject;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.segment.SegmentTable}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.segment.SegmentTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface ISegmentUIDAO extends DAO {
+
+    /**
+     * <p>SQL as: select DATA_BINARY from SEGMENT where SEGMENT_ID = ${segmentId},
+     *
+     * @param segmentId argument to bind to the query
+     * @return detail of segment which deserialize into proto buffer object,
+     * {@link TraceSegmentObject#parseFrom(byte[])}
+     */
     TraceSegmentObject load(String segmentId);
 }
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 3a5e57c..eddbc82 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
@@ -23,9 +23,28 @@ import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.alarm.ServiceAlarmTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IServiceAlarmUIDAO extends DAO {
 
-    Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException;
+    /**
+     * <p>SQL as: select SERVICE_ID, ALARM_CONTENT, LAST_TIME_BUCKET, ALARM_TYPE from SERVICE_ALARM
+     * where LAST_TIME_BUCKET ge ${startTimeBucket} and LAST_TIME_BUCKET le ${endTimeBucket}
+     * and ALARM_CONTENT like '%{keyword}%'
+     * <p>Note: keyword maybe not given
+     *
+     * @param keyword fuzzy query
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param limit limits the number of rows returned by the query
+     * @param from specified how many rows to skip
+     * @return service alarm items
+     * @throws ParseException alarm time parse exception
+     */
+    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/IServiceMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceMetricUIDAO.java
index 94bd6fc..1a7fa20 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceMetricUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceMetricUIDAO.java
@@ -28,18 +28,114 @@ import org.apache.skywalking.apm.collector.storage.ui.service.ServiceMetric;
 import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.service.ServiceMetricTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.service.ServiceMetricTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IServiceMetricUIDAO extends DAO {
+
+    /**
+     * Service Response Time Trend describes the trend of Service metric in the given duration
+     * , which represents by the DurationPoint list in the `step` Unit.
+     *
+     * <p>SQL as: select TRANSACTION_DURATION_SUM / TRANSACTION_CALLS from SERVICE_METRIC
+     * where ID in (${durationPoints})
+     *
+     * <p>rule of ID generation is "${durationPoint}_${serviceId}_${MetricSource.Callee}"
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param serviceId query condition
+     * @param step the step which represent time formats
+     * @param durationPoints the time points in the time span
+     * @return every duration points average response time metrics.
+     */
     List<Integer> getServiceResponseTimeTrend(int serviceId, Step step, List<DurationPoint> durationPoints);
 
+    /**
+     * Service TPS Trend describes the trend of Service metric in the given duration
+     * , which represents by the DurationPoint list in the `step` Unit.
+     *
+     * <p>SQL as: select TRANSACTION_CALLS / ${durationPoint#secondsBetween} from SERVICE_METRIC
+     * where ID in (${durationPoints})
+     *
+     * <p>rule of ID generation is "${durationPoint}_${serviceId}_${MetricSource.Callee}"
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param serviceId query condition
+     * @param step the step which represent time formats
+     * @param durationPoints the time points in the time span
+     * @return every duration points average throughout metrics.
+     */
     List<Integer> getServiceTPSTrend(int serviceId, Step step, List<DurationPoint> durationPoints);
 
+    /**
+     * Service SLA Trend describes the trend of Service SLA metrics in the given duration
+     * , which represents by the DurationPoint list in the `step` Unit.
+     *
+     * <p>SQL as: select (( TRANSACTION_CALLS - TRANSACTION_ERROR_CALLS ) * 10000) / TRANSACTION_CALLS
+     * from SERVICE_METRIC where ID in (${durationPoints})
+     *
+     * <p>rule of ID generation is "${durationPoint}_${serviceId}_${MetricSource.Callee}"
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param serviceId query condition
+     * @param step the step which represent time formats
+     * @param durationPoints the time points in the time span
+     * @return every duration points service SLA metrics.
+     */
     List<Integer> getServiceSLATrend(int serviceId, Step step, List<DurationPoint> durationPoints);
 
-    List<Node> getServicesMetric(Step step, long startTime, long endTime,
+    /**
+     * <p>SQL as: select SERVICE_ID, sum(TRANSACTION_CALLS), sum(TRANSACTION_ERROR_CALLS)
+     * from SERVICE_METRIC
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * and SOURCE_VALUE = ${metricSource} and SERVICE_ID in (${serviceIds})
+     * group by SERVICE_ID
+     *
+     * <p>The SLA formula is "( TRANSACTION_CALLS - TRANSACTION_ERROR_CALLS ) * 10000 ) / TRANSACTION_CALLS"
+     *
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param metricSource source of this metric, server side or client side
+     * @param serviceIds query condition
+     * @return not nullable result list
+     */
+    List<Node> getServicesMetric(Step step, long startTimeBucket, long endTimeBucket,
         MetricSource metricSource, Collection<Integer> serviceIds);
 
+    /**
+     * Returns the top n slow services that collected between start time bucket
+     * and end time bucket.
+     *
+     * <p>SQL as: select SERVICE_ID, TRANSACTION_CALLS, TRANSACTION_AVERAGE_DURATION
+     * from SERVICE_METRIC where ID in (${durationPoints})
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * and SOURCE_VALUE = ${metricSource}
+     * and APPLICATION_ID = ${applicationId}
+     * order by TRANSACTION_AVERAGE_DURATION desc
+     * limit ${topN}
+     *
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param applicationId query condition
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param topN how many rows should return
+     * @param metricSource source of this metric, server side or client side
+     * @return not nullable result list
+     */
     List<ServiceMetric> getSlowService(int applicationId, Step step, long startTimeBucket, long endTimeBucket,
         Integer topN, MetricSource metricSource);
 }
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceNameServiceUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceNameServiceUIDAO.java
index 0d8fe48..62d27d8 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceNameServiceUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceNameServiceUIDAO.java
@@ -23,10 +23,35 @@ import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
 import org.apache.skywalking.apm.collector.storage.ui.service.ServiceInfo;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IServiceNameServiceUIDAO extends DAO {
+
+    /**
+     * Returns count of service name which register by entry span.
+     *
+     * <p>SQL as: select count(SERVICE_NAME) from SERVICE_NAME
+     * where SRC_SPAN_TYPE = SpanType.Entry_VALUE
+     *
+     * @return count of service names
+     */
     int getCount();
 
+    /**
+     * <p>SQL as: select SERVICE_ID, SERVICE_NAME from SERVICE_NAME
+     * where SRC_SPAN_TYPE = SpanType.Entry_VALUE
+     * and SERVICE_NAME like '%{keyword}%'
+     *
+     * <p> Note: keyword might not given
+     *
+     * @param keyword fuzzy query condition
+     * @param topN how many rows should return
+     * @return not nullable result list
+     */
     List<ServiceInfo> searchService(String keyword, int topN);
 }
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceReferenceMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceReferenceMetricUIDAO.java
index ee46023..d42776d 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceReferenceMetricUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceReferenceMetricUIDAO.java
@@ -24,13 +24,62 @@ import org.apache.skywalking.apm.collector.storage.table.MetricSource;
 import org.apache.skywalking.apm.collector.storage.ui.common.Step;
 
 /**
+ * Interface to be implemented for execute database query operation
+ * from {@link org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetricTable#TABLE}.
+ *
  * @author peng-yongsheng
+ * @see org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetricTable
+ * @see org.apache.skywalking.apm.collector.storage.StorageModule
  */
 public interface IServiceReferenceMetricUIDAO extends DAO {
 
+    /**
+     * Returns the service reference metrics which call the given service id
+     * that collected between start time bucket and end time bucket.
+     *
+     * <p>SQL as: select FRONT_SERVICE_ID, sum(TRANSACTION_CALLS), sum(TRANSACTION_ERROR_CALLS),
+     * sum(TRANSACTION_DURATION_SUM), sum(TRANSACTION_ERROR_DURATION_SUM)
+     * from SERVICE_REFERENCE_METRIC
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * and SOURCE_VALUE = ${metricSource}
+     * and BEHIND_SERVICE_ID = ${behindServiceId}
+     * group by FRONT_SERVICE_ID
+     *
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param metricSource source of this metric, server side or client side
+     * @param behindServiceId the callee service id
+     * @return not nullable result list
+     */
     List<ServiceReferenceMetric> getFrontServices(Step step, long startTimeBucket, long endTimeBucket,
         MetricSource metricSource, int behindServiceId);
 
+    /**
+     * Returns the service reference metrics which call from the given service id
+     * that collected between start time bucket and end time bucket.
+     *
+     * <p>SQL as: select FRONT_SERVICE_ID, sum(TRANSACTION_CALLS), sum(TRANSACTION_ERROR_CALLS),
+     * sum(TRANSACTION_DURATION_SUM), sum(TRANSACTION_ERROR_DURATION_SUM)
+     * from SERVICE_REFERENCE_METRIC
+     * where TIME_BUCKET ge ${startTimeBucket} and TIME_BUCKET le ${endTimeBucket}
+     * and SOURCE_VALUE = ${metricSource}
+     * and BEHIND_SERVICE_ID = ${frontServiceId}
+     * group by BEHIND_SERVICE_ID
+     *
+     * <p>Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)}
+     * to generate table name which mixed with step name.
+     *
+     * @param step the step which represent time formats
+     * @param startTimeBucket start time bucket
+     * @param endTimeBucket end time bucket
+     * @param metricSource source of this metric, server side or client side
+     * @param frontServiceId the caller service id
+     * @return not nullable result list
+     */
     List<ServiceReferenceMetric> getBehindServices(Step step, long startTimeBucket, long endTimeBucket,
         MetricSource metricSource, int frontServiceId);
 
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 dd1b8d1..d32405c 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
@@ -23,7 +23,6 @@ import java.util.List;
 import org.apache.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient;
 import org.apache.skywalking.apm.collector.core.util.BooleanUtils;
 import org.apache.skywalking.apm.collector.core.util.StringUtils;
-import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils;
 import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
 import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO;
 import org.apache.skywalking.apm.collector.storage.table.register.Instance;
@@ -35,10 +34,8 @@ import org.elasticsearch.action.get.GetResponse;
 import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.action.search.SearchType;
-import org.elasticsearch.index.query.AbstractQueryBuilder;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.index.query.RangeQueryBuilder;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.aggregations.AggregationBuilders;
 import org.elasticsearch.search.aggregations.bucket.terms.Terms;
@@ -59,44 +56,6 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO {
         super(client);
     }
 
-    @Override public Long lastHeartBeatTime() {
-        long fiveMinuteBefore = System.currentTimeMillis() - 5 * 60 * 1000;
-        fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore);
-        RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(InstanceTable.HEARTBEAT_TIME.getName()).gt(fiveMinuteBefore);
-        return heartBeatTime(rangeQueryBuilder);
-    }
-
-    @Override public Long instanceLastHeartBeatTime(long applicationInstanceId) {
-        long fiveMinuteBefore = System.currentTimeMillis() - 5 * 60 * 1000;
-        fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore);
-
-        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
-        boolQueryBuilder.must(QueryBuilders.rangeQuery(InstanceTable.HEARTBEAT_TIME.getName()).gt(fiveMinuteBefore));
-        boolQueryBuilder.must(QueryBuilders.termQuery(InstanceTable.INSTANCE_ID.getName(), applicationInstanceId));
-        return heartBeatTime(boolQueryBuilder);
-    }
-
-    private Long heartBeatTime(AbstractQueryBuilder queryBuilder) {
-        SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE);
-        searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE);
-        searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
-        searchRequestBuilder.setQuery(queryBuilder);
-        searchRequestBuilder.setSize(1);
-        searchRequestBuilder.setFetchSource(InstanceTable.HEARTBEAT_TIME.getName(), null);
-        searchRequestBuilder.addSort(SortBuilders.fieldSort(InstanceTable.HEARTBEAT_TIME.getName()).sortMode(SortMode.MAX));
-
-        SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
-        SearchHit[] searchHits = searchResponse.getHits().getHits();
-
-        Long heartBeatTime = 0L;
-        for (SearchHit searchHit : searchHits) {
-            heartBeatTime = (Long)searchHit.getSource().get(InstanceTable.HEARTBEAT_TIME.getName());
-            logger.debug("heartBeatTime: {}", heartBeatTime);
-            heartBeatTime = heartBeatTime - 5;
-        }
-        return heartBeatTime;
-    }
-
     @Override public List<Application> getApplications(long startSecondTimeBucket, long endSecondTimeBucket,
         int... applicationIds) {
         logger.debug("application list get, start time: {}, end time: {}", startSecondTimeBucket, endSecondTimeBucket);
diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceMetricEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceMetricEsUIDAO.java
index 64e41ac..20d6d5f 100644
--- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceMetricEsUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceMetricEsUIDAO.java
@@ -18,6 +18,8 @@
 
 package org.apache.skywalking.apm.collector.storage.es.dao.ui;
 
+import java.util.LinkedList;
+import java.util.List;
 import org.apache.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient;
 import org.apache.skywalking.apm.collector.core.util.Const;
 import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceMetricUIDAO;
@@ -42,9 +44,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms;
 import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
 import org.elasticsearch.search.aggregations.metrics.sum.Sum;
 
-import java.util.LinkedList;
-import java.util.List;
-
 /**
  * @author peng-yongsheng
  */
@@ -56,7 +55,7 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO
 
     @Override
     public List<AppServerInfo> getServerThroughput(int applicationId, Step step, long startTimeBucket,
-                                                   long endTimeBucket, int secondBetween, int topN, MetricSource metricSource) {
+        long endTimeBucket, int secondBetween, int topN, MetricSource metricSource) {
         String tableName = TimePyramidTableNameBuilder.build(step, InstanceMetricTable.TABLE);
 
         SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
@@ -84,8 +83,8 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO
         instanceIdTerms.getBuckets().forEach(instanceIdTerm -> {
             int instanceId = instanceIdTerm.getKeyAsNumber().intValue();
             Sum callSum = instanceIdTerm.getAggregations().get(ApplicationMetricTable.TRANSACTION_CALLS.getName());
-            long calls = (long) callSum.getValue();
-            int callsPerSec = (int) (secondBetween == 0 ? 0 : calls / secondBetween);
+            long calls = (long)callSum.getValue();
+            int callsPerSec = (int)(secondBetween == 0 ? 0 : calls / secondBetween);
 
             AppServerInfo appServerInfo = new AppServerInfo();
             appServerInfo.setId(instanceId);
@@ -122,8 +121,8 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO
         for (int i = 0; i < multiGetResponse.getResponses().length; i++) {
             MultiGetItemResponse response = multiGetResponse.getResponses()[i];
             if (response.getResponse().isExists()) {
-                long callTimes = ((Number) response.getResponse().getSource().get(InstanceMetricTable.TRANSACTION_CALLS.getName())).longValue();
-                throughputTrend.add((int) (callTimes / durationPoints.get(i).getSecondsBetween()));
+                long callTimes = ((Number)response.getResponse().getSource().get(InstanceMetricTable.TRANSACTION_CALLS.getName())).longValue();
+                throughputTrend.add((int)(callTimes / durationPoints.get(i).getSecondsBetween()));
             } else {
                 throughputTrend.add(0);
             }
@@ -143,21 +142,13 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO
 
         });
 
-
         List<Integer> responseTimeTrends = new LinkedList<>();
         MultiGetResponse multiGetResponse = prepareMultiGet.get();
         for (MultiGetItemResponse response : multiGetResponse.getResponses()) {
             if (response.getResponse().isExists()) {
                 long callTimes = ((Number)response.getResponse().getSource().get(InstanceMetricTable.TRANSACTION_CALLS.getName())).longValue();
-                long errorCallTimes = ((Number)response.getResponse().getSource().get(InstanceMetricTable.TRANSACTION_ERROR_CALLS.getName())).longValue();
                 long durationSum = ((Number)response.getResponse().getSource().get(InstanceMetricTable.TRANSACTION_DURATION_SUM.getName())).longValue();
-                long errorDurationSum = ((Number)response.getResponse().getSource().get(InstanceMetricTable.BUSINESS_TRANSACTION_ERROR_DURATION_SUM.getName())).longValue();
-                long correctCallTimes = callTimes - errorCallTimes;
-                if (correctCallTimes != 0L) {
-                    responseTimeTrends.add((int)((durationSum - errorDurationSum) / correctCallTimes));
-                } else {
-                    responseTimeTrends.add(0);
-                }
+                responseTimeTrends.add((int)(durationSum / callTimes));
             } else {
                 responseTimeTrends.add(0);
             }
diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/NetworkAddressEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/NetworkAddressEsUIDAO.java
index d098916..711f326 100644
--- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/NetworkAddressEsUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/NetworkAddressEsUIDAO.java
@@ -43,11 +43,11 @@ public class NetworkAddressEsUIDAO extends EsDAO implements INetworkAddressUIDAO
         super(client);
     }
 
-    @Override public int getNumOfSpanLayer(int spanLayer) {
+    @Override public int getNumOfSpanLayer(int srcSpanLayer) {
         SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(NetworkAddressTable.TABLE);
         searchRequestBuilder.setTypes(NetworkAddressTable.TABLE_TYPE);
         searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
-        searchRequestBuilder.setQuery(QueryBuilders.termQuery(NetworkAddressTable.SRC_SPAN_LAYER.getName(), spanLayer));
+        searchRequestBuilder.setQuery(QueryBuilders.termQuery(NetworkAddressTable.SRC_SPAN_LAYER.getName(), srcSpanLayer));
         searchRequestBuilder.setSize(0);
 
         SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceMetricEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceMetricEsUIDAO.java
index 7f1148b..c3560ad 100644
--- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceMetricEsUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceMetricEsUIDAO.java
@@ -139,7 +139,7 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO {
     }
 
     @Override
-    public List<Node> getServicesMetric(Step step, long startTime, long endTime, MetricSource metricSource,
+    public List<Node> getServicesMetric(Step step, long startTimeBucket, long endTimeBucket, MetricSource metricSource,
         Collection<Integer> serviceIds) {
         String tableName = TimePyramidTableNameBuilder.build(step, ServiceMetricTable.TABLE);
 
@@ -148,7 +148,7 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO {
         searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
 
         BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
-        boolQuery.must().add(QueryBuilders.rangeQuery(ServiceMetricTable.TIME_BUCKET.getName()).gte(startTime).lte(endTime));
+        boolQuery.must().add(QueryBuilders.rangeQuery(ServiceMetricTable.TIME_BUCKET.getName()).gte(startTimeBucket).lte(endTimeBucket));
         boolQuery.must().add(QueryBuilders.termsQuery(ServiceMetricTable.SERVICE_ID.getName(), serviceIds));
         boolQuery.must().add(QueryBuilders.termQuery(ServiceMetricTable.SOURCE_VALUE.getName(), metricSource.getValue()));
 
diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceH2UIDAO.java
index 614cf9b..4e96061 100644
--- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceH2UIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceH2UIDAO.java
@@ -25,7 +25,6 @@ import java.util.List;
 import org.apache.skywalking.apm.collector.client.h2.H2Client;
 import org.apache.skywalking.apm.collector.client.h2.H2ClientException;
 import org.apache.skywalking.apm.collector.core.util.BooleanUtils;
-import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils;
 import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder;
 import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
 import org.apache.skywalking.apm.collector.storage.h2.base.dao.H2DAO;
@@ -47,47 +46,10 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO {
         super(client);
     }
 
-    private static final String GET_LAST_HEARTBEAT_TIME_SQL = "select {0} from {1} where {2} > ? limit 1";
-    private static final String GET_INST_LAST_HEARTBEAT_TIME_SQL = "select {0} from {1} where {2} > ? and {3} = ? limit 1";
     private static final String GET_INSTANCE_SQL = "select * from {0} where {1} = ?";
     private static final String GET_APPLICATIONS_SQL = "select {3}, count({0}) as cnt from {1} where {2} >= ? group by {3} limit 100";
 
     @Override
-    public Long lastHeartBeatTime() {
-        H2Client client = getClient();
-        long fiveMinuteBefore = System.currentTimeMillis() - 5 * 60 * 1000;
-        fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore);
-        String sql = SqlBuilder.buildSql(GET_LAST_HEARTBEAT_TIME_SQL, InstanceTable.HEARTBEAT_TIME.getName(), InstanceTable.TABLE, InstanceTable.HEARTBEAT_TIME.getName());
-        Object[] params = new Object[] {fiveMinuteBefore};
-        try (ResultSet rs = client.executeQuery(sql, params)) {
-            if (rs.next()) {
-                return rs.getLong(1);
-            }
-        } catch (SQLException | H2ClientException e) {
-            logger.error(e.getMessage(), e);
-        }
-        return 0L;
-    }
-
-    @Override
-    public Long instanceLastHeartBeatTime(long applicationInstanceId) {
-        H2Client client = getClient();
-        long fiveMinuteBefore = System.currentTimeMillis() - 5 * 60 * 1000;
-        fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore);
-        String sql = SqlBuilder.buildSql(GET_INST_LAST_HEARTBEAT_TIME_SQL, InstanceTable.HEARTBEAT_TIME.getName(), InstanceTable.TABLE,
-            InstanceTable.HEARTBEAT_TIME.getName(), InstanceTable.INSTANCE_ID.getName());
-        Object[] params = new Object[] {fiveMinuteBefore, applicationInstanceId};
-        try (ResultSet rs = client.executeQuery(sql, params)) {
-            if (rs.next()) {
-                return rs.getLong(1);
-            }
-        } catch (SQLException | H2ClientException e) {
-            logger.error(e.getMessage(), e);
-        }
-        return 0L;
-    }
-
-    @Override
     public List<Application> getApplications(long startSecondTimeBucket, long endSecondTimeBucket,
         int... applicationIds) {
         H2Client client = getClient();
diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/NetworkAddressH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/NetworkAddressH2UIDAO.java
index 23a9c9f..9368fc6 100644
--- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/NetworkAddressH2UIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/NetworkAddressH2UIDAO.java
@@ -42,10 +42,10 @@ public class NetworkAddressH2UIDAO extends H2DAO implements INetworkAddressUIDAO
         super(client);
     }
 
-    @Override public int getNumOfSpanLayer(int spanLayer) {
+    @Override public int getNumOfSpanLayer(int srcSpanLayer) {
         String dynamicSql = "select count({0}) as cnt from {1} where {2} = ?";
         String sql = SqlBuilder.buildSql(dynamicSql, NetworkAddressTable.NETWORK_ADDRESS.getName(), NetworkAddressTable.TABLE, NetworkAddressTable.SRC_SPAN_LAYER.getName());
-        Object[] params = new Object[] {spanLayer};
+        Object[] params = new Object[] {srcSpanLayer};
 
         try (ResultSet rs = getClient().executeQuery(sql, params)) {
             if (rs.next()) {
diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceMetricH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceMetricH2UIDAO.java
index 0359221..0ca58b8 100644
--- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceMetricH2UIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceMetricH2UIDAO.java
@@ -109,7 +109,7 @@ public class ServiceMetricH2UIDAO extends H2DAO implements IServiceMetricUIDAO {
         return trends;
     }
 
-    @Override public List<Node> getServicesMetric(Step step, long startTime, long endTime, MetricSource metricSource,
+    @Override public List<Node> getServicesMetric(Step step, long startTimeBucket, long endTimeBucket, MetricSource metricSource,
         Collection<Integer> serviceIds) {
         return null;
     }
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TimeSynchronousService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TimeSynchronousService.java
deleted file mode 100644
index 360e729..0000000
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TimeSynchronousService.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.skywalking.apm.collector.ui.service;
-
-import org.apache.skywalking.apm.collector.core.module.ModuleManager;
-import org.apache.skywalking.apm.collector.storage.StorageModule;
-import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * @author peng-yongsheng
- */
-public class TimeSynchronousService {
-
-    private static final Logger logger = LoggerFactory.getLogger(TimeSynchronousService.class);
-
-    private final IInstanceUIDAO instanceDAO;
-
-    public TimeSynchronousService(ModuleManager moduleManager) {
-        this.instanceDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class);
-    }
-
-    public Long allInstanceLastTime() {
-        return instanceDAO.lastHeartBeatTime();
-    }
-
-    public Long instanceLastTime(int applicationInstanceId) {
-        return instanceDAO.instanceLastHeartBeatTime(applicationInstanceId);
-    }
-}
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/service/ServerServiceTest.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/service/ServerServiceTest.java
index 1930a19..b67653b 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/service/ServerServiceTest.java
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/service/ServerServiceTest.java
@@ -20,11 +20,19 @@ package org.apache.skywalking.apm.collector.ui.service;
 import com.google.gson.Gson;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 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.module.MockModule;
 import org.apache.skywalking.apm.collector.core.module.ModuleManager;
-import org.apache.skywalking.apm.collector.storage.dao.ui.*;
+import org.apache.skywalking.apm.collector.storage.dao.ui.ICpuMetricUIDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IGCMetricUIDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceMetricUIDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
+import org.apache.skywalking.apm.collector.storage.dao.ui.IMemoryMetricUIDAO;
 import org.apache.skywalking.apm.collector.storage.table.register.Application;
 import org.apache.skywalking.apm.collector.storage.table.register.Instance;
 import org.apache.skywalking.apm.collector.storage.ui.common.Duration;
@@ -42,12 +50,10 @@ import org.junit.Test;
 import org.mockito.Mockito;
 import org.mockito.internal.util.reflection.Whitebox;
 
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import static org.mockito.Matchers.*;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.powermock.api.mockito.PowerMockito.when;
 
@@ -71,7 +77,6 @@ public class ServerServiceTest {
     private long startTimeBucket;
     private long endTimeBucket;
 
-
     @Before
     public void setUp() throws Exception {
         ModuleManager moduleManager = mock(ModuleManager.class);
@@ -192,14 +197,14 @@ public class ServerServiceTest {
     public void getMemoryTrend() throws ParseException {
         when(memoryMetricUIDAO.getHeapMemoryTrend(anyInt(), anyObject(), anyObject())).then(invocation -> {
             IMemoryMetricUIDAO.Trend trend = new IMemoryMetricUIDAO.Trend();
-            trend.setMaxMetrics(Collections.singletonList(1));
-            trend.setMetrics(Collections.singletonList(2));
+            trend.getMaxMetrics().addAll(Collections.singletonList(1));
+            trend.getMetrics().addAll(Collections.singletonList(2));
             return trend;
         });
         when(memoryMetricUIDAO.getNoHeapMemoryTrend(anyInt(), anyObject(), anyObject())).then(invocation -> {
             IMemoryMetricUIDAO.Trend trend = new IMemoryMetricUIDAO.Trend();
-            trend.setMaxMetrics(Collections.singletonList(1));
-            trend.setMetrics(Collections.singletonList(2));
+            trend.getMaxMetrics().addAll(Collections.singletonList(1));
+            trend.getMetrics().addAll(Collections.singletonList(2));
             return trend;
         });
         MemoryTrend memoryTrend = serverService.getMemoryTrend(1, duration.getStep(), startTimeBucket, endTimeBucket);
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/service/TimeSynchronousServiceTest.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/service/TimeSynchronousServiceTest.java
deleted file mode 100644
index fcb20ed..0000000
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/service/TimeSynchronousServiceTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.apm.collector.ui.service;
-
-import org.apache.skywalking.apm.collector.core.module.MockModule;
-import org.apache.skywalking.apm.collector.core.module.ModuleManager;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-/**
- * @author lican
- */
-public class TimeSynchronousServiceTest {
-
-    private TimeSynchronousService timeSynchronousService;
-
-    @Before
-    public void setUp() throws Exception {
-        ModuleManager moduleManager = mock(ModuleManager.class);
-        when(moduleManager.find(anyString())).then(invocation -> new MockModule());
-        timeSynchronousService = new TimeSynchronousService(moduleManager);
-    }
-
-    @Test
-    public void allInstanceLastTime() {
-        Long aLong = timeSynchronousService.allInstanceLastTime();
-        Assert.assertEquals((long) aLong, 0L);
-    }
-
-    @Test
-    public void instanceLastTime() {
-        Long aLong = timeSynchronousService.instanceLastTime(-1);
-        Assert.assertEquals((long) aLong, 0L);
-    }
-}
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
wusheng@apache.org.