提交 36d0eb5f 编写于 作者: P peng-yongsheng

getAlarmTrend ok.

上级 f9c241c5
......@@ -27,5 +27,26 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step;
*/
public interface IApplicationAlarmListUIDAO extends DAO {
List<Integer> getAlarmedApplicationNum(Step step, long start, long end);
List<AlarmTrend> getAlarmedApplicationNum(Step step, long startTimeBucket, long endTimeBucket);
class AlarmTrend {
private long timeBucket;
private int numberOfApplication;
public long getTimeBucket() {
return timeBucket;
}
public void setTimeBucket(long timeBucket) {
this.timeBucket = timeBucket;
}
public int getNumberOfApplication() {
return numberOfApplication;
}
public void setNumberOfApplication(int numberOfApplication) {
this.numberOfApplication = numberOfApplication;
}
}
}
......@@ -42,12 +42,12 @@ public class ApplicationAlarmListEsUIDAO extends EsDAO implements IApplicationAl
super(client);
}
@Override public List<Integer> getAlarmedApplicationNum(Step step, long start, long end) {
@Override public List<AlarmTrend> getAlarmedApplicationNum(Step step, long startTimeBucket, long endTimeBucket) {
String tableName = TimePyramidTableNameBuilder.build(step, ApplicationAlarmListTable.TABLE);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
searchRequestBuilder.setTypes(ApplicationAlarmListTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).gte(start).lte(end));
searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
searchRequestBuilder.setSize(0);
searchRequestBuilder.addAggregation(AggregationBuilders.terms(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).field(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).size(100)
......@@ -57,13 +57,16 @@ public class ApplicationAlarmListEsUIDAO extends EsDAO implements IApplicationAl
Terms timeBucketTerms = searchResponse.getAggregations().get(ApplicationAlarmListTable.COLUMN_TIME_BUCKET);
List<Integer> alarmApplicationNum = new LinkedList<>();
List<AlarmTrend> alarmTrends = new LinkedList<>();
for (Terms.Bucket timeBucketBucket : timeBucketTerms.getBuckets()) {
Terms applicationBucketTerms = timeBucketBucket.getAggregations().get(ApplicationAlarmListTable.COLUMN_APPLICATION_ID);
int num = applicationBucketTerms.getBuckets().size();
alarmApplicationNum.add(num);
AlarmTrend alarmTrend = new AlarmTrend();
alarmTrend.setNumberOfApplication(applicationBucketTerms.getBuckets().size());
alarmTrend.setTimeBucket(timeBucketBucket.getKeyAsNumber().longValue());
alarmTrends.add(alarmTrend);
}
return alarmApplicationNum;
return alarmTrends;
}
}
......@@ -33,7 +33,7 @@ public class ApplicationAlarmListH2UIDAO extends H2DAO implements IApplicationAl
super(client);
}
@Override public List<Integer> getAlarmedApplicationNum(Step step, long start, long end) {
@Override public List<AlarmTrend> getAlarmedApplicationNum(Step step, long startTimeBucket, long endTimeBucket) {
return null;
}
}
......@@ -115,10 +115,10 @@ public class OverViewLayerQuery implements Query {
long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
return getAlarmService().getApplicationAlarmTrend(duration.getStep(), startTimeBucket, endTimeBucket, start, end);
return getAlarmService().getApplicationAlarmTrend(duration.getStep(), startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket);
}
public ConjecturalAppBrief getConjecturalApps(Duration duration) throws ParseException {
......
......@@ -19,7 +19,9 @@
package org.apache.skywalking.apm.collector.ui.service;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.IApplicationAlarmListUIDAO;
......@@ -31,6 +33,8 @@ import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
import org.apache.skywalking.apm.collector.storage.ui.application.Application;
import org.apache.skywalking.apm.collector.storage.ui.common.Step;
import org.apache.skywalking.apm.collector.storage.ui.overview.AlarmTrend;
import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
import org.apache.skywalking.apm.collector.ui.utils.DurationUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -73,14 +77,21 @@ public class AlarmService {
return serviceAlarmUIDAO.loadAlarmList(keyword, start, end, limit, from);
}
public AlarmTrend getApplicationAlarmTrend(Step step, long startTimeBucket, long endTimeBucket, long start,
long end) throws ParseException {
List<Application> applications = instanceDAO.getApplications(start, end);
public AlarmTrend getApplicationAlarmTrend(Step step, long startTimeBucket, long endTimeBucket,
long startSecondTimeBucket,
long endSecondTimeBucket) throws ParseException {
List<Application> applications = instanceDAO.getApplications(startSecondTimeBucket, endSecondTimeBucket);
List<DurationPoint> durationPoints = DurationUtils.INSTANCE.getDurationPoints(step, startTimeBucket, endTimeBucket);
List<IApplicationAlarmListUIDAO.AlarmTrend> alarmTrends = applicationAlarmListUIDAO.getAlarmedApplicationNum(step, startTimeBucket, endTimeBucket);
Map<Long, Integer> trendsMap = new HashMap<>();
alarmTrends.forEach(alarmTrend -> trendsMap.put(alarmTrend.getTimeBucket(), alarmTrend.getNumberOfApplication()));
List<Integer> applicationNum = applicationAlarmListUIDAO.getAlarmedApplicationNum(step, startTimeBucket, endTimeBucket);
AlarmTrend alarmTrend = new AlarmTrend();
applicationNum.forEach(num -> {
alarmTrend.getNumOfAlarmRate().add((num * 10000) / (applications.size()));
durationPoints.forEach(durationPoint -> {
alarmTrend.getNumOfAlarmRate().add((trendsMap.getOrDefault(durationPoint.getPoint(), 0) * 10000) / (applications.size()));
});
return alarmTrend;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册