blob: 16dc09211ec8a08f1da73e661970e2186fbd54dc [file] [log] [blame]
package org.apache.airavata.metascheduler.metadata.analyzer;
import org.apache.airavata.common.utils.IServer;
import org.apache.airavata.common.utils.ServerSettings;
import org.apache.airavata.metascheduler.metadata.analyzer.impl.DataAnalyzerImpl;
import org.apache.airavata.metascheduler.metadata.analyzer.utils.Constants;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class DataInterpreterService implements IServer {
private final static Logger logger = LoggerFactory.getLogger(DataInterpreterService.class);
private static final String SERVER_NAME = "Data Interpreter Service";
private static final String SERVER_VERSION = "1.0";
private static ServerStatus status;
private static Scheduler scheduler;
private static Map<JobDetail, Trigger> jobTriggerMap = new HashMap<>();
@Override
public String getName() {
return SERVER_NAME;
}
@Override
public String getVersion() {
return SERVER_VERSION;
}
@Override
public void start() throws Exception {
jobTriggerMap.clear();
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
final int parallelJobs = ServerSettings.getDataAnalyzerNoOfScanningParallelJobs();
final double scanningInterval = ServerSettings.getDataAnalyzerScanningInterval();
for (int i = 0; i < parallelJobs; i++) {
String name = Constants.METADATA_SCANNER_TRIGGER + "_" + i;
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(name, Constants.METADATA_SCANNER_GROUP)
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds((int) scanningInterval)
.repeatForever())
.build();
String jobName = Constants.METADATA_SCANNER_JOB + "_" + i;
JobDetail jobC = JobBuilder
.newJob(DataAnalyzerImpl.class)
.withIdentity(jobName, Constants.METADATA_SCANNER_JOB)
.build();
jobTriggerMap.put(jobC, trigger);
}
scheduler.start();
jobTriggerMap.forEach((x, v) -> {
try {
scheduler.scheduleJob(x, v);
} catch (SchedulerException e) {
logger.error("Error occurred while scheduling job " + x.getKey().getName());
}
});
}
@Override
public void stop() throws Exception {
scheduler.unscheduleJobs(new ArrayList(jobTriggerMap.values()));
}
@Override
public void restart() throws Exception {
stop();
start();
}
@Override
public void configure() throws Exception {
}
@Override
public ServerStatus getStatus() throws Exception {
return status;
}
public void setServerStatus(ServerStatus status) {
this.status = status;
}
}