package com.nvarghese.beowulf.sfc.quartz; import java.net.UnknownHostException; import org.apache.commons.configuration.ConfigurationException; import org.bson.types.ObjectId; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.nvarghese.beowulf.common.scan.dao.WebScanDAO; import com.nvarghese.beowulf.common.scan.model.WebScanDocument; import com.nvarghese.beowulf.sfc.SFControllerManager; import com.nvarghese.beowulf.sfc.services.ScanMonitorService; public class ScanMonitorJob implements Job { public static final String WEBSCANOBJID = "WEBSCANOBJID"; static Logger logger = LoggerFactory.getLogger(ScanMonitorJob.class); @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { final ScanMonitorService scanMonitorService = new ScanMonitorService(); JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap(); final ObjectId webScanObjId = new ObjectId(dataMap.getString(WEBSCANOBJID)); logger.info("Running scan monitor job for WebScanDocument#id: {}", webScanObjId); try { //update job details scanMonitorService.updateWebScanDocumentWithScanJobDetails(webScanObjId); //check status boolean running = scanMonitorService.isScanRunning(webScanObjId); WebScanDAO webScanDAO = new WebScanDAO(SFControllerManager.getInstance().getDataStore()); WebScanDocument webScanDocument = webScanDAO.getWebScanDocument(webScanObjId); boolean isScanJobsRunning = webScanDocument.isScanJobsInProgress(); if (running) { if (isScanJobsRunning) { // no action required } else { // update scan jobs status isScanJobsRunning = true; webScanDAO.updateScanJobsInProgress(webScanDocument.getId(), isScanJobsRunning); } } else { if (isScanJobsRunning) { // check the scan running status in the next execution of // scheduled job isScanJobsRunning = false; webScanDAO.updateScanJobsInProgress(webScanDocument.getId(), isScanJobsRunning); } else { logger.info("Scan with id: {} reached complete stage. Shutting down scan instance server", webScanObjId.toString()); // spawn a new thread new Thread() { public void run() { scanMonitorService.stopScanInstanceServer(webScanObjId); } }.start(); } } } catch (UnknownHostException e) { logger.error("Failed to check scan status for id: {}, Reason: {}", webScanObjId.toString(), e.getMessage()); e.printStackTrace(); } catch (ConfigurationException e) { logger.error("Failed to check scan status for id: {}, Reason: {}", webScanObjId.toString(), e.getMessage()); e.printStackTrace(); } } }