public void init()

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);
  }