package rocks.inspectit.server.instrumentation.listener; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.ObjectFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import rocks.inspectit.server.ci.event.EnvironmentUpdateEvent; import rocks.inspectit.server.instrumentation.config.AgentCacheEntry; import rocks.inspectit.server.instrumentation.config.ConfigurationHolder; import rocks.inspectit.server.instrumentation.config.job.AbstractConfigurationChangeJob; import rocks.inspectit.server.instrumentation.config.job.EnvironmentUpdateJob; import rocks.inspectit.shared.cs.ci.Environment; /** * Listener for the {@link EnvironmentUpdateEvent}s. * * @author Ivan Senic * @author Marius Oehler * */ @Component public class EnvironmentEventListener extends AbstractConfigurationChangeListener<EnvironmentUpdateEvent> { /** * The used {@link ObjectFactory}. */ @Autowired private ObjectFactory<EnvironmentUpdateJob> objectFactory; /** * {@inheritDoc} */ @Override public void onApplicationEvent(EnvironmentUpdateEvent event) { List<AbstractConfigurationChangeJob> jobs = new ArrayList<>(); Map<Long, AgentCacheEntry> agentCacheMap = nextGenInstrumentationManager.getAgentCacheMap(); for (AgentCacheEntry agentCacheEntry : agentCacheMap.values()) { ConfigurationHolder configurationHolder = agentCacheEntry.getConfigurationHolder(); // if not initialized then ignore if (!configurationHolder.isInitialized()) { continue; } // if environments ids not match ignore Environment environment = configurationHolder.getEnvironment(); if (!Objects.equals(environment.getId(), event.getEnvironmentId())) { continue; } // create and fire job EnvironmentUpdateJob environmentUpdateJob = objectFactory.getObject(); environmentUpdateJob.setEnvironmentUpdateEvent(event); environmentUpdateJob.setAgentCacheEntry(agentCacheEntry); jobs.add(environmentUpdateJob); } if (CollectionUtils.isNotEmpty(jobs)) { executeJobs(jobs); } } }