package org.stagemonitor.core; import java.io.IOException; import java.util.Collection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.stagemonitor.configuration.ConfigurationRegistry; import org.stagemonitor.configuration.source.ElasticsearchConfigurationSource; import org.stagemonitor.configuration.source.EnvironmentVariableConfigurationSource; import org.stagemonitor.configuration.source.PropertyFileConfigurationSource; import org.stagemonitor.configuration.source.SimpleSource; import org.stagemonitor.configuration.source.SystemPropertyConfigurationSource; import org.stagemonitor.core.elasticsearch.ElasticsearchClient; public class StagemonitorCoreConfigurationSourceInitializer extends StagemonitorConfigurationSourceInitializer { private final Logger logger = LoggerFactory.getLogger(getClass()); @Override public void modifyConfigurationSources(ModifyArguments modifyArguments) { modifyArguments.addConfigurationSourceAsLast(new SimpleSource()); modifyArguments.addConfigurationSourceAsLast(new SystemPropertyConfigurationSource()); final String stagemonitorPropertyOverridesLocation = System.getProperty("stagemonitor.property.overrides"); if (stagemonitorPropertyOverridesLocation != null) { logger.info("try loading of default property overrides: '" + stagemonitorPropertyOverridesLocation + "'"); modifyArguments.addConfigurationSourceAsLast(new PropertyFileConfigurationSource(stagemonitorPropertyOverridesLocation)); } if (PropertyFileConfigurationSource.isPresent("stagemonitor.properties")) { modifyArguments.addConfigurationSourceAsLast(new PropertyFileConfigurationSource("stagemonitor.properties")); } modifyArguments.addConfigurationSourceAsLast(new EnvironmentVariableConfigurationSource()); } @Override public void onConfigurationInitialized(ConfigInitializedArguments configInitializedArguments) throws IOException { final CorePlugin corePlugin = configInitializedArguments.getConfiguration().getConfig(CorePlugin.class); final Collection<String> elasticsearchConfigurationSourceIds = corePlugin.getElasticsearchConfigurationSourceProfiles(); if (!elasticsearchConfigurationSourceIds.isEmpty()) { addElasticsearchConfigurationSources(configInitializedArguments.getConfiguration(), corePlugin, elasticsearchConfigurationSourceIds); } } private void addElasticsearchConfigurationSources(ConfigurationRegistry configuration, CorePlugin corePlugin, Collection<String> elasticsearchConfigurationSourceIds) { ElasticsearchClient elasticsearchClient = configuration.getConfig(CorePlugin.class).getElasticsearchClient(); if (corePlugin.isDeactivateStagemonitorIfEsConfigSourceIsDown()) { assertElasticsearchIsAvailable(elasticsearchClient, corePlugin); } for (String configurationId : elasticsearchConfigurationSourceIds) { configuration.addConfigurationSource(new ElasticsearchConfigurationSource(elasticsearchClient, configurationId), false); } configuration.reloadAllConfigurationOptions(); } private void assertElasticsearchIsAvailable(ElasticsearchClient elasticsearchClient, CorePlugin corePlugin) { try { elasticsearchClient.getJson("/"); } catch (IOException e) { throw new IllegalStateException("Property stagemonitor.elasticsearch.configurationSourceProfiles was set " + "but elasticsearch is not reachable at " + corePlugin.getElasticsearchUrl(), e); } } }