diff --git a/server/app/cronjobs/catalyst-scheduler/catalystScheduler.js b/server/app/cronjobs/catalyst-scheduler/catalystScheduler.js index 8243c7c96..692c57037 100644 --- a/server/app/cronjobs/catalyst-scheduler/catalystScheduler.js +++ b/server/app/cronjobs/catalyst-scheduler/catalystScheduler.js @@ -40,33 +40,33 @@ catalystSync.executeScheduledInstances = function executeScheduledInstances() { } catalystSync.executeParallelScheduledTasks = function executeParallelScheduledTasks() { - taskDao.getScheduledTasks(function(err, tasks) { + taskDao.getScheduledTasks('PARALLEL',function(err, tasks) { if (err) { logger.error("Failed to fetch tasks: ", err); return; } if (tasks && tasks.length) { - var resultList =[],parallelTaskList=[]; + var parallelTaskList=[]; for (var i = 0; i < tasks.length; i++) { (function(task) { if(task.cronJobId && task.cronJobId !== null){ cronTab.cancelJob(task.cronJobId); } - if(task.executionOrder === 'PARALLEL'){ - resultList.push(function(callback){schedulerService.executeSchedulerForTasks(task,callback);}); - parallelTaskList.push(function(callback){schedulerService.executeSchedulerForTasks(task,callback);}); - }else{ - resultList.push(function(callback){schedulerService.executeSchedulerForTasks(task,callback);}); - } - if(resultList.length === tasks.length){ - async.parallel(parallelTaskList,function(err,results){ - if(err){ - logger.error(err); + parallelTaskList.push(function(callback){schedulerService.executeParallelScheduledTasks(task,callback);}); + if(parallelTaskList.length === tasks.length){ + if(parallelTaskList.length > 0) { + async.parallel(parallelTaskList, function (err, results) { + if (err) { + logger.error(err); + return; + } + logger.debug("Task Scheduler Completed for Parallel"); return; - } - logger.debug("Task Scheduler Completed for Parallel"); + }) + }else{ + logger.debug("There is no Parallel scheduled Task right now."); return; - }) + } } })(tasks[i]); } @@ -78,36 +78,31 @@ catalystSync.executeParallelScheduledTasks = function executeParallelScheduledTa } catalystSync.executeSerialScheduledTasks = function executeSerialScheduledTasks() { - taskDao.getScheduledTasks(function(err, tasks) { + taskDao.getScheduledTasks('SERIAL',function(err, tasks) { if (err) { logger.error("Failed to fetch tasks: ", err); return; } if (tasks && tasks.length) { - var resultList =[],serialTaskList=[]; + var serialTaskList=[]; for (var i = 0; i < tasks.length; i++) { (function(task) { if(task.cronJobId && task.cronJobId !== null){ cronTab.cancelJob(task.cronJobId); } - if(task.executionOrder === 'SERIAL'){ - resultList.push(function(callback){schedulerService.executeSchedulerForTasks(task,callback);}); - if(serialTaskList.length ===0) { - serialTaskList.push(function (next) { - schedulerService.executeSchedulerForTasks(task, next); - }); - }else{ - serialTaskList.push(function (cronJobId,next) { - cronTab.cancelJob(cronJobId); - schedulerService.executeSchedulerForTasks(task, next); - }); - } - resultList.push(function(callback){schedulerService.executeSchedulerForTasks(task,callback);}); + if(serialTaskList.length ===0) { + serialTaskList.push(function (next) {schedulerService.executeSerialScheduledTasks(task, next); + }); }else{ - resultList.push(function(callback){schedulerService.executeSchedulerForTasks(task,callback);}); + serialTaskList.push(function (cronJobId,next) { + cronTab.cancelJob(cronJobId); + schedulerService.executeSerialScheduledTasks(task, next); + }); } - if(resultList.length === tasks.length){ + if(serialTaskList.length === tasks.length){ if(serialTaskList.length > 0) { + console.log(serialTaskList.length); + console.log(serialTaskList); async.waterfall(serialTaskList, function (err, data) { if (err) { logger.error(err); diff --git a/server/app/model/audit-trail/audit-trail.js b/server/app/model/audit-trail/audit-trail.js index 6e454bd8d..47debe2eb 100644 --- a/server/app/model/audit-trail/audit-trail.js +++ b/server/app/model/audit-trail/audit-trail.js @@ -47,6 +47,17 @@ AuditTrailSchema.statics.getAuditTrails = function(queryObj,callback){ }); }; +AuditTrailSchema.statics.removeAuditTrails = function(queryObj,callback){ + AuditTrail.remove(queryObj, function(err, deleteAuditTrail) { + if (err) { + logger.error(err); + var error = new Error('Internal server error'); + error.status = 500; + return callback(error); + } + return callback(null, deleteAuditTrail); + }); +}; var AuditTrail = mongoose.model('auditTrails', AuditTrailSchema); module.exports = AuditTrail; diff --git a/server/app/model/classes/tasks/tasks.js b/server/app/model/classes/tasks/tasks.js index 15a1e3d75..8423d4fe6 100755 --- a/server/app/model/classes/tasks/tasks.js +++ b/server/app/model/classes/tasks/tasks.js @@ -920,9 +920,10 @@ taskSchema.statics.updateTaskConfig = function updateTaskConfig(taskId, taskConf }); }; -taskSchema.statics.getScheduledTasks = function getScheduledTasks(callback) { +taskSchema.statics.getScheduledTasks = function getScheduledTasks(executionOrder,callback) { Tasks.find({ - isTaskScheduled: true + isTaskScheduled: true, + executionOrder:executionOrder }, function (err, tasks) { if (err) { logger.error(err); diff --git a/server/app/routes/v1.0/routes_blueprints.js b/server/app/routes/v1.0/routes_blueprints.js index 8130519c6..f9298ab30 100755 --- a/server/app/routes/v1.0/routes_blueprints.js +++ b/server/app/routes/v1.0/routes_blueprints.js @@ -42,7 +42,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { }) }); app.delete('/blueprints/serviceDelivery/:blueprintId', function(req, res) { - Blueprints.removeServiceDeliveryBlueprints(req.params.blueprintId, function(err, data) { + blueprintService.deleteServiceDeliveryBlueprint(req.params.blueprintId, function(err, data) { if (err) { logger.error("Failed to delete ", err); res.send(500, errorResponses.db.error); diff --git a/server/app/routes/v1.0/routes_organizations.js b/server/app/routes/v1.0/routes_organizations.js index 7588cc9b6..dda4b727a 100755 --- a/server/app/routes/v1.0/routes_organizations.js +++ b/server/app/routes/v1.0/routes_organizations.js @@ -979,6 +979,9 @@ module.exports.setRoutes = function(app, sessionVerification) { taskData.taskScheduler = apiUtil.createCronJobPattern(taskData.taskScheduler); taskData.isTaskScheduled = true; } + if(taskData.taskType === 'jenkins'){ + taskData.executionOrder= 'PARALLEL'; + } configmgmtDao.getEnvNameFromEnvId(req.params.envId, function(err, envName) { if (err) { res.status(500).send("Failed to fetch ENV: ", err); diff --git a/server/app/routes/v1.0/routes_tasks.js b/server/app/routes/v1.0/routes_tasks.js index 644689c39..0779a60f0 100755 --- a/server/app/routes/v1.0/routes_tasks.js +++ b/server/app/routes/v1.0/routes_tasks.js @@ -41,7 +41,7 @@ module.exports.setRoutes = function(app, sessionVerification) { app.all('/tasks/*', sessionVerification); app.delete('/tasks/serviceDelivery/:taskId', function(req, res) { - Tasks.removeServiceDeliveryTask(req.params.taskId, function(err, data) { + taskService.deleteServiceDeliveryTask(req.params.taskId, function(err, data) { if (err) { logger.error("Failed to delete service delivery Task", err); res.send(500, errorResponses.db.error); @@ -560,6 +560,9 @@ module.exports.setRoutes = function(app, sessionVerification) { }) }); } else { + if(taskData.taskType === 'jenkins'){ + taskData.executionOrder= 'PARALLEL'; + } Tasks.updateTaskById(req.params.taskId, taskData, function(err, updateCount) { if (err) { logger.error(err); diff --git a/server/app/services/blueprintService.js b/server/app/services/blueprintService.js index 80c2b8df3..663b35315 100644 --- a/server/app/services/blueprintService.js +++ b/server/app/services/blueprintService.js @@ -71,6 +71,24 @@ blueprintService.getAllBlueprints = function getAllBlueprints(orgIds, callback) }); }; +blueprintService.deleteServiceDeliveryBlueprint = function deleteServiceDeliveryBlueprint(blueprintId, callback) { + async.waterfall([ + function (next) { + Blueprints.removeServiceDeliveryBlueprints(blueprintId, next); + }, + function (deleteTaskCheck, next) { + auditTrail.removeAuditTrails({auditId:blueprintId},next); + } + ],function (err, results) { + if (err) { + callback(err, null); + return; + } + callback(null, results); + return; + }); +}; + blueprintService.getAllServiceDeliveryBlueprint = function getAllServiceDeliveryBlueprint(queryObj, callback) { if(queryObj.serviceDeliveryCheck === true && queryObj.actionStatus && queryObj.actionStatus !== null) { var query = { diff --git a/server/app/services/schedulerService.js b/server/app/services/schedulerService.js index 3e669c333..a5b137bad 100644 --- a/server/app/services/schedulerService.js +++ b/server/app/services/schedulerService.js @@ -98,8 +98,45 @@ schedulerService.executeSchedulerForInstances = function executeSchedulerForInst }) } -schedulerService.executeSchedulerForTasks = function executeSchedulerForTasks(task,callback) { - logger.debug("Task Scheduler is started for Task. "+task.name); +schedulerService.executeParallelScheduledTasks = function executeParallelScheduledTasks(task,callback) { + logger.debug("Task Scheduler is started for Parallel Task. "+task.name); + var currentDate = new Date(); + if(currentDate >= task.taskScheduler.cronEndOn){ + crontab.cancelJob(task.cronJobId); + taskDao.updateTaskScheduler(task._id,function(err, updatedData) { + if (err) { + logger.error("Failed to update Task Scheduler: ", err); + callback(err,null); + return; + } + logger.debug("Scheduler is ended on for Task. "+task.name); + callback(null,updatedData); + return; + }); + }else{ + var cronJobId = cronTab.scheduleJob(task.taskScheduler.cronPattern, function () { + taskDao.updateCronJobIdByTaskId(task._id,cronJobId,function(err,data){ + if(err){ + logger.error("Error in updating cron job Ids. "+err); + } + }) + taskService.executeTask(task._id, "superadmin", "", "", "","","",function(err, historyData) { + if (err === 404) { + logger.error("Task not found.", err); + return; + } else if (err) { + logger.error("Failed to execute task.", err); + return; + } + logger.debug("Task Execution Success: ", task.name); + return; + }); + }); + } +} + +schedulerService.executeSerialScheduledTasks = function executeSerialScheduledTasks(task,callback) { + logger.debug("Task Scheduler is started for Serial Task. "+task.name); var currentDate = new Date(); if(currentDate >= task.taskScheduler.cronEndOn){ crontab.cancelJob(task.cronJobId); @@ -114,7 +151,6 @@ schedulerService.executeSchedulerForTasks = function executeSchedulerForTasks(ta return; }); }else{ - var schedulerService = require('_pr/services/schedulerService'); var cronJobId = cronTab.scheduleJob(task.taskScheduler.cronPattern, function () { taskDao.updateCronJobIdByTaskId(task._id,cronJobId,function(err,data){ if(err){ @@ -147,13 +183,14 @@ schedulerService.startStopInstance= function startStopInstance(instanceId,catUse }, function(instanceDetails,next){ var currentDate = new Date(); + var dateToString = currentDate.toDateString(); if(instanceDetails[0].instanceState === 'terminated'){ callback({ errCode:201, errMsg:"Instance is already in "+instanceDetails[0].instanceState+" state. So no need to do any action." }) return; - }else if (instanceDetails[0].isScheduled && instanceDetails[0].isScheduled === true && currentDate >= instanceDetails[0].schedulerEndOn) { + }else if (instanceDetails[0].isScheduled && instanceDetails[0].isScheduled === true && Date.parse(dateToString) > instanceDetails[0].schedulerEndOn) { instancesDao.updateInstanceScheduler(instanceDetails[0]._id,function(err, updatedData) { if (err) { logger.error("Failed to update Instance Scheduler: ", err); diff --git a/server/app/services/taskService.js b/server/app/services/taskService.js index b0d377646..a9186a6c4 100644 --- a/server/app/services/taskService.js +++ b/server/app/services/taskService.js @@ -109,6 +109,24 @@ taskService.getAllServiceDeliveryTask = function getAllServiceDeliveryTask(query } }; +taskService.deleteServiceDeliveryTask = function deleteServiceDeliveryTask(taskId, callback) { + async.waterfall([ + function (next) { + taskDao.removeServiceDeliveryTask(taskId, next); + }, + function (deleteTaskCheck, next) { + auditTrail.removeAuditTrails({auditId:taskId},next); + } + ],function (err, results) { + if (err) { + callback(err, null); + return; + } + callback(null, results); + return; + }); +}; + taskService.executeTask = function executeTask(taskId, user, hostProtocol, choiceParam, appData, paramOptions, botTagServer, callback) { if (appData) { appData['taskId'] = taskId;