package com.nvarghese.beowulf.sfc.services;
import java.net.UnknownHostException;
import java.util.Date;
import org.apache.commons.configuration.ConfigurationException;
import org.bson.types.ObjectId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.code.morphia.Datastore;
import com.nvarghese.beowulf.common.BeowulfCommonConfigManager;
import com.nvarghese.beowulf.common.ds.DataStoreUtil;
import com.nvarghese.beowulf.common.scan.dao.WebScanDAO;
import com.nvarghese.beowulf.common.scan.model.WebScanDocument;
import com.nvarghese.beowulf.common.webtest.ScanPhase;
import com.nvarghese.beowulf.common.webtest.scs.jobs.CategorizationJobDAO;
import com.nvarghese.beowulf.common.webtest.sfe.jobs.TestJobDAO;
import com.nvarghese.beowulf.sfc.SFControllerManager;
public class ScanMonitorService {
static Logger logger = LoggerFactory.getLogger(ScanMonitorService.class);
/**
* Checks whether the scan is running
*
* @param webScanObjectId
* @return
* @throws UnknownHostException
* @throws ConfigurationException
*/
public boolean isScanRunning(ObjectId webScanObjectId) throws UnknownHostException, ConfigurationException {
boolean running = true;
WebScanDAO webScanDAO = new WebScanDAO(SFControllerManager.getInstance().getDataStore());
WebScanDocument webScanDocument = webScanDAO.getWebScanDocument(webScanObjectId);
Datastore ds = DataStoreUtil.createOrGetDataStore(BeowulfCommonConfigManager.getDbUri(), webScanDocument.getTxnDbName());
// check categ jobs
CategorizationJobDAO categJobDAO = new CategorizationJobDAO(ds);
boolean categJobsPresent = categJobDAO.isInProgressJobsPresent();
// check test jobs
TestJobDAO testJobDAO = new TestJobDAO(ds);
boolean testJobsPresent = testJobDAO.isInProgressJobsPresent();
running = categJobsPresent || testJobsPresent;
return running;
}
/**
* Updates exection job and categorization job count to web scan document
*
* @param webScanObjId
* @throws UnknownHostException
* @throws ConfigurationException
*/
public void updateWebScanDocumentWithScanJobDetails(ObjectId webScanObjId) throws UnknownHostException, ConfigurationException {
WebScanDAO webScanDAO = new WebScanDAO(SFControllerManager.getInstance().getDataStore());
WebScanDocument webScanDocument = webScanDAO.getWebScanDocument(webScanObjId);
Datastore ds = DataStoreUtil.createOrGetDataStore(BeowulfCommonConfigManager.getDbUri(), webScanDocument.getTxnDbName());
// check categ jobs
CategorizationJobDAO categJobDAO = new CategorizationJobDAO(ds);
webScanDocument.setCompletedCategorizationJobs(categJobDAO.getCountOfCompletedJobs());
webScanDocument.setPendingCategorizationJobs(categJobDAO.getCountOfInProgressJobs());
webScanDocument.setCreatedCategorizationJobs(categJobDAO.getCountOfAllJobs());
webScanDocument.setErroredCategorizationJobs(categJobDAO.getCountOfErrorOrTerminatedJobs());
// check test jobs
TestJobDAO testJobDAO = new TestJobDAO(ds);
webScanDocument.setCompletedExecutionJobs(testJobDAO.getCountOfCompletedJobs());
webScanDocument.setPendingExecutionJobs(testJobDAO.getCountOfInProgressJobs());
webScanDocument.setCreatedExecutionJobs(testJobDAO.getCountOfAllJobs());
webScanDocument.setErroredExecutionJobs(testJobDAO.getCountOfErrorOrTerminatedJobs());
// update
webScanDAO.updateWebScanDocument(webScanDocument);
}
public void stopScanInstanceServer(ObjectId webScanObjId) {
ScanInstanceServer scanInstanceServer = ScanInstanceRegister.getInstance().getScanInstanceServer(webScanObjId.toString());
if (scanInstanceServer == null) {
logger.warn("Failed to stop scan instance for the id: {}. Reason: Scan Instance is not present in register map", webScanObjId.toString());
return;
}
scanInstanceServer.stopScanMonitoring();
// update web scan
WebScanDAO webScanDAO = new WebScanDAO(SFControllerManager.getInstance().getDataStore());
WebScanDocument webScanDocument = webScanDAO.getWebScanDocument(webScanObjId);
webScanDocument.setScanPhase(ScanPhase.COMPLETE.getName());
webScanDocument.setScanRunning(false);
webScanDocument.setScanEndTime(new Date());
webScanDAO.updateWebScanDocument(webScanDocument);
// webScanDAO.updateScanPhase(webScanObjId,
// ScanPhase.COMPLETE.getName());
// webScanDAO.updateScanRunning(webScanObjId, false);
// terminate scan
scanInstanceServer.terminateServer();
// unregister for clean up
ScanInstanceRegister.getInstance().unregisterScanInstanceServer(webScanObjId.toString());
}
}