需求
获取当天对应周,这一周内每天的不同级别的日志数量
ECharts图所需数据
Java获取当天对应周的日期List
@SuppressWarnings({"deprecation", "unchecked"})
public static List<String> dateToWeek() {
Date mdate = new Date();
// 一周的第几天
int b = mdate.getDay();
Date fdate;
List<String> list = new ArrayList();
Long fTime = mdate.getTime() - b * 24 * 3600000;
for (int a = 0; a < 7; a++) {
fdate = new Date();
fdate.setTime(fTime + ((a + 1) * 24 * 3600000));
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
list.add(a, simpleDateFormat.format(fdate));
}
return list;
}
ES时间范围内分组查询
public Map<String, Object> getDataByCeShi(String indexName) {
Map<String, Object> outMap = new HashMap<>();
// 获取本周7天根据日志界别分组聚合,对应数量
List<Long> errorList = new ArrayList<>();
List<Long> infoList = new ArrayList<>();
List<Long> debugList = new ArrayList<>();
List<Long> warnList = new ArrayList<>();
List<String> weekList = dateToWeek();
String startTime = TimeChange.getMinTodayTime(weekList.get(0));
String endTime = TimeChange.getMaxTodayTime(weekList.get(weekList.size() - 1));
/* String startTime = TimeChange.getMinTodayTime("2020-07-06");
String endTime = TimeChange.getMaxTodayTime("2020-07-12");*/
System.out.println(startTime + " " + endTime);
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.must(QueryBuilders.rangeQuery("logTime").gte(startTime));
queryBuilder.must(QueryBuilders.rangeQuery("logTime").lte(endTime));
//根据时间分组统计总数
DateHistogramAggregationBuilder fieldBuilder = AggregationBuilders.dateHistogram("logTime").field("logTime").dateHistogramInterval(DateHistogramInterval.DAY);
AggregationBuilder groupByLevel = AggregationBuilders.terms("levelTerms").field("level");
SearchResponse response = client.prepareSearch(indexName).setQuery(queryBuilder).addAggregation(groupByLevel.subAggregation(fieldBuilder)).get();
Terms terms = response.getAggregations().get("levelTerms");
// 按级别划分 bucket.getKey()为日志级别
for (Terms.Bucket bucket : terms.getBuckets()) {
Histogram agg = bucket.getAggregations().get("logTime");
// 按时间划分 entry.getKey()为时间级别
for (Histogram.Bucket entry : agg.getBuckets()) {
logger.info(bucket.getKey().toString()+"--"+entry.getKey().toString()+"--"+entry.getDocCount());
outMap.put(bucket.getKey().toString()+entry.getKey().toString()+UUID.randomUUID(),entry.getDocCount());
if ("ERROR".equals(bucket.getKey().toString())) {
setListData(errorList,entry);
}
if ("INFO".equals(bucket.getKey().toString())) {
setListData(infoList,entry);
}
if ("DEBUG".equals(bucket.getKey().toString())) {
setListData(debugList,entry);
}
if ("WARN".equals(bucket.getKey().toString())) {
setListData(warnList,entry);
}
}
}
outMap.put("errorList", errorList);
outMap.put("infoList", infoList);
outMap.put("debugList", debugList);
outMap.put("warnList", warnList);
return outMap;
}
向不同List中存入数据,没有数据则存入0
public void setListData(List<Long> list, Histogram.Bucket entry){
List<String> weekList = dateToWeek();
for (String s : weekList) {
logger.info(s+"时间------------------------------:"+entry.getKey().toString().substring(0,10));
if (s.equals(entry.getKey().toString().substring(0,10))){
list.add(entry.getDocCount());
}else{
list.add(0L);
}
}
}
``