import org.json.JSONArray; //导入方法依赖的package包/类
public static Map> offset(String group, String topic, String start, String end) {
Map> statsMap = new HashMap>();
String indexPrefix = SystemManager.getConfig().getEsIndex();
try {
ElasticsearchAssistEntity assistEntity = ScrollSearchTemplate.getInterval(start, end);
List indexes = new ArrayList();
assistEntity.getIndexs().forEach(a -> {
indexes.add(indexPrefix + "-" + a);
});
String[] esHost = SystemManager.getConfig().getEsHosts().split("[,;]")[0].split(":");
String url = "http://" + esHost[0] + ":" + esHost[1] + "/" + String.join(",", indexes) + "/"
+ SystemManager.getElasticSearchOffsetType() + "/_search?ignore_unavailable=true&allow_no_indices=true";
ResponseEntity response = REST.exchange(url, HttpMethod.POST,
new HttpEntity(ScrollSearchTemplate.getOffset(group, topic, assistEntity), headers), String.class);
String searchResult = response.getBody();
JSONObject temp = new JSONObject(searchResult);
JSONArray temp2 = temp.getJSONObject("aggregations").getJSONObject("aggs").getJSONArray("buckets");
List stats = new ArrayList();
temp2.forEach(obj -> {
JSONObject item = (JSONObject) obj;
JSONArray xx = item.getJSONObject("group").getJSONArray("buckets");
for (int i = 0; i < xx.length(); i++) {
JSONObject item2 = xx.getJSONObject(i);
JSONArray xxx = item2.getJSONObject("topic").getJSONArray("buckets");
for (int j = 0; j < xxx.length(); j++) {
JSONObject item3 = xxx.getJSONObject(j);
stats.add(new OffsetStat(item.getLong("key"), item2.get("key").toString(), item3.get("key").toString(),
item3.getJSONObject("offset").getLong("value"), item3.getJSONObject("lag").getLong("value")));
}
}
});
stats.forEach(a -> {
String topicName = a.getTopic();
if (topicName == null || topicName.length() == 0) {
topicName = "empty";
}
if (statsMap.containsKey(topicName)) {
statsMap.get(topicName).add(a);
} else {
List arr = new ArrayList();
arr.add(a);
statsMap.put(topicName, arr);
}
});
statsMap.forEach((key, val) -> {
for (int i = val.size() - 1; i > 0; i--) {
val.get(i).setOffset(val.get(i).getOffset() - val.get(i - 1).getOffset());
}
val.remove(0);
});
} catch (Exception e) {
// TODO
LOG.error("Damn...", e);
}
return statsMap;
}