[feat](profile) Add a new rest api to query instance host and ip information for query profile action in branch master(#18668) (#19643)

This commit is contained in:
bigben0204
2023-05-17 10:52:47 +08:00
committed by GitHub
parent c98147375d
commit f95c1d7cb6
3 changed files with 65 additions and 17 deletions

View File

@ -193,19 +193,20 @@ public class ProfileTreeBuilder {
// 1. Get max active time of instances in this fragment
List<Triple<String, String, Long>> instanceIdAndActiveTimeList = Lists.newArrayList();
List<String> instances = Lists.newArrayList();
Map<String, String> instanceIdToTime = Maps.newHashMap();
Map<String, Instance> instanceIdToInstance = Maps.newHashMap();
long maxActiveTimeNs = 0;
for (Pair<RuntimeProfile, Boolean> pair : fragmentChildren) {
Triple<String, String, Long> instanceIdAndActiveTime = getInstanceIdHostAndActiveTime(pair.first);
instanceIdToTime.put(instanceIdAndActiveTime.getLeft(),
RuntimeProfile.printCounter(instanceIdAndActiveTime.getRight(), TUnit.TIME_NS));
instanceIdToInstance.put(instanceIdAndActiveTime.getLeft(),
new Instance(instanceIdAndActiveTime.getMiddle(),
RuntimeProfile.printCounter(instanceIdAndActiveTime.getRight(), TUnit.TIME_NS)));
maxActiveTimeNs = Math.max(instanceIdAndActiveTime.getRight(), maxActiveTimeNs);
instanceIdAndActiveTimeList.add(instanceIdAndActiveTime);
instances.add(instanceIdAndActiveTime.getLeft());
}
instanceActiveTimeMap.put(fragmentId, instanceIdAndActiveTimeList);
fragmentsInstances.add(new FragmentInstances(fragmentId,
RuntimeProfile.printCounter(maxActiveTimeNs, TUnit.TIME_NS), instanceIdToTime));
RuntimeProfile.printCounter(maxActiveTimeNs, TUnit.TIME_NS), instanceIdToInstance));
// 2. Build tree for all fragments
// All instance in a fragment are same, so use first instance to build the fragment tree
@ -430,12 +431,27 @@ public class ProfileTreeBuilder {
@JsonProperty("time")
private String maxActiveTimeNs;
@JsonProperty("instance_id")
private Map<String, String> instanceIdToTime;
private Map<String, Instance> instanceIdToInstance;
public FragmentInstances(String fragmentId, String maxActiveTimeNs, Map<String, String> instanceIdToTime) {
public FragmentInstances(String fragmentId, String maxActiveTimeNs,
Map<String, Instance> instanceIdToInstance) {
this.fragmentId = fragmentId;
this.maxActiveTimeNs = maxActiveTimeNs;
this.instanceIdToTime = instanceIdToTime;
this.instanceIdToInstance = instanceIdToInstance;
}
}
@Getter
@Setter
public static class Instance {
@JsonProperty("host")
private String host;
@JsonProperty("active_time")
private String activeTime;
public Instance(String host, String activeTime) {
this.host = host;
this.activeTime = activeTime;
}
}
}