package com.linkedin.thirdeye.anomaly.monitor;
import com.linkedin.thirdeye.anomaly.utils.AnomalyUtils;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.linkedin.thirdeye.client.DAORegistry;
import com.linkedin.thirdeye.datalayer.bao.JobManager;
import com.linkedin.thirdeye.datalayer.bao.TaskManager;
public class MonitorJobScheduler {
private static final Logger LOG = LoggerFactory.getLogger(MonitorJobScheduler.class);
private ScheduledExecutorService scheduledExecutorService;
private JobManager anomalyJobDAO;
private TaskManager anomalyTaskDAO;
private MonitorConfiguration monitorConfiguration;
private MonitorJobRunner monitorJobRunner;
private MonitorJobContext monitorJobContext;
private static final DAORegistry DAO_REGISTRY = DAORegistry.getInstance();
public MonitorJobScheduler(MonitorConfiguration monitorConfiguration) {
this.anomalyJobDAO = DAO_REGISTRY.getJobDAO();
this.anomalyTaskDAO = DAO_REGISTRY.getTaskDAO();
this.monitorConfiguration = monitorConfiguration;
scheduledExecutorService = Executors.newScheduledThreadPool(10);
}
public void start() {
LOG.info("Starting monitor service");
monitorJobContext = new MonitorJobContext();
monitorJobContext.setJobDAO(anomalyJobDAO);
monitorJobContext.setTaskDAO(anomalyTaskDAO);
monitorJobContext.setMonitorConfiguration(monitorConfiguration);
monitorJobRunner = new MonitorJobRunner(monitorJobContext);
scheduledExecutorService
.scheduleWithFixedDelay(monitorJobRunner, 0, monitorConfiguration.getMonitorFrequency().getSize(),
monitorConfiguration.getMonitorFrequency().getUnit());
}
public void shutdown() {
LOG.info("Stopping monitor service");
AnomalyUtils.safelyShutdownExecutionService(scheduledExecutorService, this.getClass());
}
}