Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 27 additions & 32 deletions server/app/cronjobs/catalyst-scheduler/catalystScheduler.js
Original file line number Diff line number Diff line change
Expand Up @@ -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]);
}
Expand All @@ -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);
Expand Down
11 changes: 11 additions & 0 deletions server/app/model/audit-trail/audit-trail.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 3 additions & 2 deletions server/app/model/classes/tasks/tasks.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion server/app/routes/v1.0/routes_blueprints.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions server/app/routes/v1.0/routes_organizations.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
5 changes: 4 additions & 1 deletion server/app/routes/v1.0/routes_tasks.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
18 changes: 18 additions & 0 deletions server/app/services/blueprintService.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand Down
45 changes: 41 additions & 4 deletions server/app/services/schedulerService.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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){
Expand Down Expand Up @@ -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);
Expand Down
18 changes: 18 additions & 0 deletions server/app/services/taskService.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down