private List getUnhealthyNodeList()

in src/main/java/org/opensearch/performanceanalyzer/rca/store/rca/HighHeapUsageClusterRca.java [94:139]


    private List<HotNodeSummary> getUnhealthyNodeList() {
        List<HotNodeSummary> unhealthyNodeList = new ArrayList<>();
        ConcurrentMap<String, ImmutableList<ResourceFlowUnit<HotNodeSummary>>> currentMap =
                this.nodeStateCache.asMap();
        for (InstanceDetails nodeDetails : getDataNodeInstances()) {
            ImmutableList<ResourceFlowUnit<HotNodeSummary>> nodeStateList =
                    currentMap.get(nodeDetails.getInstanceId().toString());
            if (nodeStateList != null) {
                List<HotResourceSummary> oldGenSummaries = new ArrayList<>();
                List<HotResourceSummary> youngGenSummaries = new ArrayList<>();
                for (ResourceFlowUnit<HotNodeSummary> flowUnit : nodeStateList) {
                    if (flowUnit.getResourceContext().getState() == Resources.State.UNHEALTHY) {
                        HotNodeSummary currentNodSummary = flowUnit.getSummary();
                        for (HotResourceSummary resourceSummary :
                                currentNodSummary.getHotResourceSummaryList()) {
                            if (resourceSummary.getResource().getResourceEnum()
                                    == ResourceEnum.YOUNG_GEN) {
                                youngGenSummaries.add(resourceSummary);
                            } else if (resourceSummary.getResource().getResourceEnum()
                                    == ResourceEnum.OLD_GEN) {
                                oldGenSummaries.add(resourceSummary);
                            }
                        }
                    }
                }
                // youngGenSummaries can have multiple elements but we will only consider it as
                // unhealthy if
                // three consecutive summaries are all unhealthy and we will then pick the first
                // element as the summary for output.
                if (youngGenSummaries.size() >= UNHEALTHY_FLOWUNIT_THRESHOLD
                        || oldGenSummaries.size() >= UNHEALTHY_FLOWUNIT_THRESHOLD) {
                    HotNodeSummary nodeSummary =
                            new HotNodeSummary(
                                    nodeDetails.getInstanceId(), nodeDetails.getInstanceIp());
                    if (youngGenSummaries.size() >= UNHEALTHY_FLOWUNIT_THRESHOLD) {
                        nodeSummary.appendNestedSummary(youngGenSummaries.get(0));
                    }
                    if (oldGenSummaries.size() >= UNHEALTHY_FLOWUNIT_THRESHOLD) {
                        nodeSummary.appendNestedSummary(oldGenSummaries.get(0));
                    }
                    unhealthyNodeList.add(nodeSummary);
                }
            }
        }
        return unhealthyNodeList;
    }