package com.sequenceiq.periscope.monitor; import java.util.Collections; import java.util.List; import java.util.Map; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.stereotype.Component; import com.sequenceiq.periscope.api.model.ClusterState; import com.sequenceiq.periscope.domain.Cluster; import com.sequenceiq.periscope.monitor.evaluator.AmbariAgentHealthEvaluator; import com.sequenceiq.periscope.monitor.evaluator.EvaluatorContext; import com.sequenceiq.periscope.monitor.evaluator.EvaluatorExecutor; @Component public class AmbariAgentHealthMonitor extends AbstractMonitor implements Monitor { @Override public String getIdentifier() { return "ambari-agent-health-monitor"; } @Override public String getTriggerExpression() { return MonitorUpdateRate.EVERY_MIN_RATE_CRON; } @Override public Class getEvaluatorType() { return AmbariAgentHealthEvaluator.class; } @Override public Map<String, Object> getContext(Cluster cluster) { return Collections.singletonMap(EvaluatorContext.CLUSTER_ID.name(), cluster.getId()); } @Override public void execute(JobExecutionContext context) throws JobExecutionException { evalContext(context); List<Cluster> clustersToRecover = getClusterService().findAll(ClusterState.RUNNING); clustersToRecover.addAll(getClusterService().findAll(ClusterState.DISABLED)); for (Cluster cluster : clustersToRecover) { EvaluatorExecutor evaluatorExecutor = getApplicationContext().getBean(getEvaluatorType().getSimpleName(), EvaluatorExecutor.class); evaluatorExecutor.setContext(getContext(cluster)); getExecutorService().submit(evaluatorExecutor); } } }