package com.sequenceiq.periscope.monitor; import java.util.concurrent.ExecutorService; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.context.ApplicationContext; import com.sequenceiq.periscope.api.model.ClusterState; import com.sequenceiq.periscope.domain.Cluster; import com.sequenceiq.periscope.monitor.evaluator.EvaluatorExecutor; import com.sequenceiq.periscope.service.ClusterService; public abstract class AbstractMonitor implements Monitor { private ClusterService clusterService; private ApplicationContext applicationContext; private ExecutorService executorService; @Override public void execute(JobExecutionContext context) throws JobExecutionException { evalContext(context); for (Cluster cluster : clusterService.findAll(ClusterState.RUNNING)) { EvaluatorExecutor evaluatorExecutor = applicationContext.getBean(getEvaluatorType().getSimpleName(), EvaluatorExecutor.class); evaluatorExecutor.setContext(getContext(cluster)); executorService.submit(evaluatorExecutor); } } void evalContext(JobExecutionContext context) { JobDataMap monitorContext = context.getJobDetail().getJobDataMap(); applicationContext = (ApplicationContext) monitorContext.get(MonitorContext.APPLICATION_CONTEXT.name()); executorService = applicationContext.getBean(ExecutorService.class); clusterService = applicationContext.getBean(ClusterService.class); } ClusterService getClusterService() { return clusterService; } ApplicationContext getApplicationContext() { return applicationContext; } ExecutorService getExecutorService() { return executorService; } }