public void collectMetrics()

in src/main/java/org/opensearch/performanceanalyzer/collectors/NodeDetailsCollector.java [60:110]


    public void collectMetrics(long startTime) {
        if (OpenSearchResources.INSTANCE.getClusterService() == null
                || OpenSearchResources.INSTANCE.getClusterService().state() == null
                || OpenSearchResources.INSTANCE.getClusterService().state().nodes() == null) {
            return;
        }

        StringBuilder value = new StringBuilder();
        value.append(PerformanceAnalyzerMetrics.getJsonCurrentMilliSeconds())
                .append(PerformanceAnalyzerMetrics.sMetricNewLineDelimitor);

        // We add the config overrides in line#2 because we don't know how many lines
        // follow that belong to actual node details, and the reader also has no way to
        // know this information in advance unless we add the number of nodes as
        // additional metadata in the file.
        try {
            if (configOverridesWrapper != null) {
                String rcaOverrides =
                        ConfigOverridesHelper.serialize(
                                configOverridesWrapper.getCurrentClusterConfigOverrides());
                value.append(rcaOverrides);
            } else {
                LOG.warn("Overrides wrapper is null. Check NodeDetailsCollector instantiation.");
            }
        } catch (IOException ioe) {
            LOG.error("Unable to serialize rca config overrides.", ioe);
        }
        value.append(PerformanceAnalyzerMetrics.sMetricNewLineDelimitor);

        // line#3 denotes when the timestamp when the config override happened.
        if (configOverridesWrapper != null) {
            value.append(configOverridesWrapper.getLastUpdatedTimestamp());
        } else {
            value.append(0L);
        }
        value.append(PerformanceAnalyzerMetrics.sMetricNewLineDelimitor);

        DiscoveryNodes discoveryNodes =
                OpenSearchResources.INSTANCE.getClusterService().state().nodes();

        DiscoveryNode masterNode = discoveryNodes.getMasterNode();

        Iterator<DiscoveryNode> discoveryNodeIterator = discoveryNodes.iterator();
        addMetricsToStringBuilder(discoveryNodes.getLocalNode(), value, "", masterNode);
        String localNodeID = discoveryNodes.getLocalNode().getId();

        while (discoveryNodeIterator.hasNext()) {
            addMetricsToStringBuilder(discoveryNodeIterator.next(), value, localNodeID, masterNode);
        }
        saveMetricValues(value.toString(), startTime);
    }