in foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/InstanceStatusDiscoveryFilter.java [61:114]
public void init(DiscoveryContext context, DiscoveryTreeNode parent) {
List<StatefulDiscoveryInstance> instances = parent.data();
List<StatefulDiscoveryInstance> level0 = new ArrayList<>();
List<StatefulDiscoveryInstance> level1 = new ArrayList<>();
List<StatefulDiscoveryInstance> level2 = new ArrayList<>();
List<StatefulDiscoveryInstance> level3 = new ArrayList<>();
int groups = 1;
for (StatefulDiscoveryInstance instance : instances) {
if (HistoryStatus.CURRENT == instance.getHistoryStatus() &&
MicroserviceInstanceStatus.UP == instance.getMicroserviceInstanceStatus() &&
PingStatus.OK == instance.getPingStatus() &&
IsolationStatus.NORMAL == instance.getIsolationStatus()) {
level0.add(instance);
continue;
}
if (HistoryStatus.CURRENT == instance.getHistoryStatus() &&
MicroserviceInstanceStatus.UP == instance.getMicroserviceInstanceStatus() &&
PingStatus.UNKNOWN == instance.getPingStatus() &&
IsolationStatus.NORMAL == instance.getIsolationStatus()) {
level1.add(instance);
continue;
}
if (HistoryStatus.HISTORY == instance.getHistoryStatus() &&
MicroserviceInstanceStatus.UP == instance.getMicroserviceInstanceStatus() &&
PingStatus.OK == instance.getPingStatus() &&
IsolationStatus.NORMAL == instance.getIsolationStatus()) {
level2.add(instance);
continue;
}
level3.add(instance);
}
if (!level0.isEmpty()) {
parent.child(GROUP_PREFIX + groups, new DiscoveryTreeNode()
.subName(parent, GROUP_PREFIX + groups).data(level0));
groups++;
}
if (!level1.isEmpty()) {
parent.child(GROUP_PREFIX + groups, new DiscoveryTreeNode()
.subName(parent, GROUP_PREFIX + groups).data(level1));
groups++;
}
if (!level2.isEmpty()) {
parent.child(GROUP_PREFIX + groups, new DiscoveryTreeNode()
.subName(parent, GROUP_PREFIX + groups).data(level2));
groups++;
}
parent.child(GROUP_PREFIX + groups, new DiscoveryTreeNode()
.subName(parent, GROUP_PREFIX + groups).data(level3));
parent.attribute(GROUP_SIZE, groups);
}