public PerformanceAnalyzerPlugin()

in src/main/java/org/opensearch/performanceanalyzer/PerformanceAnalyzerPlugin.java [171:274]


    public PerformanceAnalyzerPlugin(final Settings settings, final java.nio.file.Path configPath) {
        OSMetricsGeneratorFactory.getInstance();

        OpenSearchResources.INSTANCE.setSettings(settings);
        OpenSearchResources.INSTANCE.setConfigPath(configPath);
        OpenSearchResources.INSTANCE.setPluginFileLocation(
                new Environment(settings, configPath).pluginsFile().toAbsolutePath().toString()
                        + File.separator
                        + PLUGIN_NAME
                        + File.separator);
        // initialize plugin settings. Accessing plugin settings before this
        // point will break, as the plugin location will not be initialized.
        PluginSettings.instance();
        scheduledMetricCollectorsExecutor = new ScheduledMetricCollectorsExecutor();
        this.performanceAnalyzerController =
                new PerformanceAnalyzerController(scheduledMetricCollectorsExecutor);

        configOverridesWrapper = new ConfigOverridesWrapper();
        clusterSettingsManager =
                new ClusterSettingsManager(
                        Arrays.asList(
                                PerformanceAnalyzerClusterSettings.COMPOSITE_PA_SETTING,
                                PerformanceAnalyzerClusterSettings.PA_NODE_STATS_SETTING),
                        Collections.singletonList(
                                PerformanceAnalyzerClusterSettings.CONFIG_OVERRIDES_SETTING));
        configOverridesClusterSettingHandler =
                new ConfigOverridesClusterSettingHandler(
                        configOverridesWrapper,
                        clusterSettingsManager,
                        PerformanceAnalyzerClusterSettings.CONFIG_OVERRIDES_SETTING);
        clusterSettingsManager.addSubscriberForStringSetting(
                PerformanceAnalyzerClusterSettings.CONFIG_OVERRIDES_SETTING,
                configOverridesClusterSettingHandler);
        perfAnalyzerClusterSettingHandler =
                new PerformanceAnalyzerClusterSettingHandler(
                        performanceAnalyzerController, clusterSettingsManager);
        clusterSettingsManager.addSubscriberForIntSetting(
                PerformanceAnalyzerClusterSettings.COMPOSITE_PA_SETTING,
                perfAnalyzerClusterSettingHandler);

        nodeStatsSettingHandler =
                new NodeStatsSettingHandler(performanceAnalyzerController, clusterSettingsManager);
        clusterSettingsManager.addSubscriberForIntSetting(
                PerformanceAnalyzerClusterSettings.PA_NODE_STATS_SETTING, nodeStatsSettingHandler);

        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new ThreadPoolMetricsCollector());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new CacheConfigMetricsCollector());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new CircuitBreakerCollector());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(new OSMetricsCollector());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(new HeapMetricsCollector());

        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new NodeDetailsCollector(configOverridesWrapper));
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new NodeStatsAllShardsMetricsCollector(performanceAnalyzerController));
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new NodeStatsFixedShardsMetricsCollector(performanceAnalyzerController));
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(new MasterServiceMetrics());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new MasterServiceEventMetrics());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(new DisksCollector());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new NetworkInterfaceCollector());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(new GCInfoCollector());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(StatsCollector.instance());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new FaultDetectionMetricsCollector(
                        performanceAnalyzerController, configOverridesWrapper));
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new ShardStateCollector(performanceAnalyzerController, configOverridesWrapper));
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new MasterThrottlingMetricsCollector(
                        performanceAnalyzerController, configOverridesWrapper));
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new ClusterApplierServiceStatsCollector(
                        performanceAnalyzerController, configOverridesWrapper));
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new AdmissionControlMetricsCollector());
        scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                new ElectionTermCollector(performanceAnalyzerController, configOverridesWrapper));
        try {
            Class.forName(ShardIndexingPressureMetricsCollector.SHARD_INDEXING_PRESSURE_CLASS_NAME);
            scheduledMetricCollectorsExecutor.addScheduledMetricCollector(
                    new ShardIndexingPressureMetricsCollector(
                            performanceAnalyzerController, configOverridesWrapper));
        } catch (ClassNotFoundException e) {
            LOG.info(
                    "Shard IndexingPressure not present in this OpenSearch version. Skipping ShardIndexingPressureMetricsCollector");
        }
        scheduledMetricCollectorsExecutor.start();

        EventLog eventLog = new EventLog();
        EventLogFileHandler eventLogFileHandler =
                new EventLogFileHandler(eventLog, PluginSettings.instance().getMetricsLocation());
        new EventLogQueueProcessor(
                        eventLogFileHandler,
                        MetricsConfiguration.SAMPLING_INTERVAL,
                        QUEUE_PURGE_INTERVAL_MS,
                        performanceAnalyzerController)
                .scheduleExecutor();
    }