From fc322e1aadfb709f259608255bbdaa36c2776074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E5=8B=87=E5=8D=87=20pengys?= <8082209@qq.com> Date: Sat, 21 Apr 2018 12:39:29 +0800 Subject: [PATCH] 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 --- .../dao/ui/IApplicationAlarmListUIDAO.java | 17 ++++ .../dao/ui/IApplicationAlarmUIDAO.java | 21 +++- .../dao/ui/IApplicationComponentUIDAO.java | 19 ++++ .../dao/ui/IApplicationMappingUIDAO.java | 24 +++++ .../dao/ui/IApplicationMetricUIDAO.java | 49 ++++++++++ .../ui/IApplicationReferenceMetricUIDAO.java | 27 +++++ .../storage/dao/ui/ICpuMetricUIDAO.java | 27 +++++ .../storage/dao/ui/IGCMetricUIDAO.java | 49 ++++++++++ .../storage/dao/ui/IGlobalTraceUIDAO.java | 22 +++++ .../storage/dao/ui/IInstanceAlarmUIDAO.java | 21 +++- .../storage/dao/ui/IInstanceMetricUIDAO.java | 62 ++++++++++++ .../storage/dao/ui/IInstanceUIDAO.java | 81 ++++++++++++++- .../storage/dao/ui/IMemoryMetricUIDAO.java | 57 +++++++++-- .../storage/dao/ui/INetworkAddressUIDAO.java | 24 ++++- .../storage/dao/ui/ISegmentDurationUIDAO.java | 29 ++++++ .../storage/dao/ui/ISegmentUIDAO.java | 13 +++ .../storage/dao/ui/IServiceAlarmUIDAO.java | 21 +++- .../storage/dao/ui/IServiceMetricUIDAO.java | 98 ++++++++++++++++++- .../dao/ui/IServiceNameServiceUIDAO.java | 25 +++++ .../dao/ui/IServiceReferenceMetricUIDAO.java | 49 ++++++++++ .../storage/es/dao/ui/InstanceEsUIDAO.java | 41 -------- .../es/dao/ui/InstanceMetricEsUIDAO.java | 25 ++--- .../es/dao/ui/NetworkAddressEsUIDAO.java | 4 +- .../es/dao/ui/ServiceMetricEsUIDAO.java | 4 +- .../storage/h2/dao/ui/InstanceH2UIDAO.java | 38 ------- .../h2/dao/ui/NetworkAddressH2UIDAO.java | 4 +- .../h2/dao/ui/ServiceMetricH2UIDAO.java | 2 +- .../ui/service/TimeSynchronousService.java | 47 --------- .../ui/service/ServerServiceTest.java | 29 +++--- .../service/TimeSynchronousServiceTest.java | 55 ----------- 30 files changed, 751 insertions(+), 233 deletions(-) delete mode 100644 apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TimeSynchronousService.java delete mode 100644 apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/service/TimeSynchronousServiceTest.java 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 4edbef7ef..9719e5c48 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 { + /** + *

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 + * + *

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 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 a810fb391..4dbaab49d 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; + /** + *

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}%' + *

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 263ce1229..f4abbc266 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. + * + *

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 + *

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 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 1692a2bc7..dc2c73fbb 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. + * + *

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 + *

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 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 5aeac5813..8807a81b8 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. + * + *

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 + *

Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)} + * to generate table name which mixed with step name. + *

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 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. + * + *

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 + *

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 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 ef7e50344..c8a7fd59f 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. + * + *

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 + *

Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)} + * to generate table name which mixed with step name. + *

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 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 30c5f4ce3..8d63f809b 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. + *

SQL as: select USAGE_PERCENT, TIMES from CPU_METRIC where ID in (durationPoints), + * rule of ID generation is "${durationPoint}_${instanceId}". + *

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}. + *

Every element in return list must match DurationPoint list, which also means that, + * the two list must be in same size, and index match. + *

If some element of the return list can't be found, the implementor must set 0 as + * default value. + *

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 getCPUTrend(int instanceId, Step step, List 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 062ee6814..cfde09e5a 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. + *

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} + *

The average young generation GC count percent formula is "COUNT / TIMES". + *

Every element in return list must match DurationPoint list, which also means that, + * the two list must be in same size, and index match. + *

If some element of the return list can't be found, the implementor must set 0 as + * default value. + *

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 getYoungGCTrend(int instanceId, Step step, List 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. + *

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} + *

The average old generation GC count percent formula is "COUNT / TIMES". + *

Every element in return list must match DurationPoint list, which also means that, + * the two list must be in same size, and index match. + *

If some element of the return list can't be found, the implementor must set 0 as + * default value. + *

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 getOldGCTrend(int instanceId, Step step, List 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 9a95a81b3..ae9eb22aa 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. + *

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 getGlobalTraceId(String segmentId); + /** + * Returns segment ids by query operation with given global trace id. + *

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 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 9c7c737d9..86474efd1 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; + /** + *

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}%' + *

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 51a8335df..6281d6b91 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. + * + *

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 + * + *

Use {@link org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder#build(Step, String)} + * to generate table name which mixed with step name. + *

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 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. + * + *

SQL as: select TRANSACTION_CALLS from INSTANCE_METRIC where ID in (durationPoints), + * rule of ID generation is "${durationPoint}_${instanceId}_${MetricSource.Callee}". + * + *

The formula is "TRANSACTION_CALLS * durationPoint#secondsBetween" + * + *

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 getServerTPSTrend(int instanceId, Step step, List 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. + * + *

SQL as: select TRANSACTION_DURATION_SUM / TRANSACTION_CALLS from INSTANCE_METRIC where ID in (durationPoints), + * rule of ID generation is "${durationPoint}_${instanceId}_${MetricSource.Callee}". + * + *

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 getResponseTimeTrend(int instanceId, Step step, List 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 92492e79a..8c74fd3f8 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. + *

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 + *

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 getApplications(long startSecondTimeBucket, long endSecondTimeBucket, int... applicationIds); + /** + * Returns the detail of instance by given instance id. + *

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. + *

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}%' + *

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 searchServer(String keyword, long startSecondTimeBucket, long endSecondTimeBucket); + /** + * Returns the detail of instances by given arguments. + *

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 getAllServer(int applicationId, long startSecondTimeBucket, long endSecondTimeBucket); + /** + * Returns the earliest register time in all instances which + * belonged to the given application id. + *

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. + *

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 e1da59f8b..e9936f67b 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. + *

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} + *

The average usage percent formula is "MAX / TIMES" and "USED / TIMES" + *

Every element in return list must match DurationPoint list, which also means that, + * the two list must be in same size, and index match. + *

If some element of the return list can't be found, the implementor must set 0 as + * default value. + *

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 durationPoints); + /** + * Non heap memory Trend describes the trend of Memory in the given duration, which + * represents by the DurationPoint list in the `step` Unit. + *

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} + *

The average usage percent formula is "MAX / TIMES" and "USED / TIMES" + *

Every element in return list must match DurationPoint list, which also means that, + * the two list must be in same size, and index match. + *

If some element of the return list can't be found, the implementor must set 0 as + * default value. + *

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 durationPoints); class Trend { @@ -45,16 +94,8 @@ public interface IMemoryMetricUIDAO extends DAO { return metrics; } - public void setMetrics(List metrics) { - this.metrics = metrics; - } - public List getMaxMetrics() { return maxMetrics; } - - public void setMaxMetrics(List 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 c52dd39e3..97b8def0c 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); + /** + *

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. + * + *

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 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 73a3160f2..46e82826a 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 { + + /** + *

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} + * + *

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 4dbd59768..e290666b3 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 { + + /** + *

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 3a5e57ceb..eddbc820c 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; + /** + *

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}%' + *

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 94bd6fcfa..1a7fa2031 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. + * + *

SQL as: select TRANSACTION_DURATION_SUM / TRANSACTION_CALLS from SERVICE_METRIC + * where ID in (${durationPoints}) + * + *

rule of ID generation is "${durationPoint}_${serviceId}_${MetricSource.Callee}" + *

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 getServiceResponseTimeTrend(int serviceId, Step step, List durationPoints); + /** + * Service TPS Trend describes the trend of Service metric in the given duration + * , which represents by the DurationPoint list in the `step` Unit. + * + *

SQL as: select TRANSACTION_CALLS / ${durationPoint#secondsBetween} from SERVICE_METRIC + * where ID in (${durationPoints}) + * + *

rule of ID generation is "${durationPoint}_${serviceId}_${MetricSource.Callee}" + *

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 getServiceTPSTrend(int serviceId, Step step, List 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. + * + *

SQL as: select (( TRANSACTION_CALLS - TRANSACTION_ERROR_CALLS ) * 10000) / TRANSACTION_CALLS + * from SERVICE_METRIC where ID in (${durationPoints}) + * + *

rule of ID generation is "${durationPoint}_${serviceId}_${MetricSource.Callee}" + *

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 getServiceSLATrend(int serviceId, Step step, List durationPoints); - List getServicesMetric(Step step, long startTime, long endTime, + /** + *

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 + * + *

The SLA formula is "( TRANSACTION_CALLS - TRANSACTION_ERROR_CALLS ) * 10000 ) / TRANSACTION_CALLS" + * + *

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 getServicesMetric(Step step, long startTimeBucket, long endTimeBucket, MetricSource metricSource, Collection serviceIds); + /** + * Returns the top n slow services that collected between start time bucket + * and end time bucket. + * + *

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} + * + *

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 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 0d8fe4859..62d27d865 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. + * + *

SQL as: select count(SERVICE_NAME) from SERVICE_NAME + * where SRC_SPAN_TYPE = SpanType.Entry_VALUE + * + * @return count of service names + */ int getCount(); + /** + *

SQL as: select SERVICE_ID, SERVICE_NAME from SERVICE_NAME + * where SRC_SPAN_TYPE = SpanType.Entry_VALUE + * and SERVICE_NAME like '%{keyword}%' + * + *

Note: keyword might not given + * + * @param keyword fuzzy query condition + * @param topN how many rows should return + * @return not nullable result list + */ List 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 ee4602391..d42776dd9 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. + * + *

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 + * + *

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 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. + * + *

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 + * + *

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 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 dd1b8d118..d32405cf1 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 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 64e41ac12..20d6d5f77 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 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 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 d098916e4..711f32678 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 7f1148bc8..c3560ade4 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 getServicesMetric(Step step, long startTime, long endTime, MetricSource metricSource, + public List getServicesMetric(Step step, long startTimeBucket, long endTimeBucket, MetricSource metricSource, Collection 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 614cf9b3d..4e960612f 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,46 +46,9 @@ 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 getApplications(long startSecondTimeBucket, long endSecondTimeBucket, int... applicationIds) { 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 23a9c9fd4..9368fc60e 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 0359221b8..0ca58b80e 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 getServicesMetric(Step step, long startTime, long endTime, MetricSource metricSource, + @Override public List getServicesMetric(Step step, long startTimeBucket, long endTimeBucket, MetricSource metricSource, Collection 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 360e72974..000000000 --- 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 1930a1983..b67653b2a 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 fcb20edd2..000000000 --- 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