diff --git a/server/app/model/audit-trail/audit-trail.js b/server/app/model/audit-trail/audit-trail.js index aaa19e12b..6e454bd8d 100644 --- a/server/app/model/audit-trail/audit-trail.js +++ b/server/app/model/audit-trail/audit-trail.js @@ -35,21 +35,8 @@ AuditTrailSchema.statics.getAuditTrailList = function(auditTrailQuery,callback){ }); }; -AuditTrailSchema.statics.getAuditTrailByStatus = function(auditType,actionStatus,callback){ - AuditTrail.find({auditType:auditType,actionStatus:actionStatus}, function(err, auditTrailList) { - if (err) { - logger.error(err); - var error = new Error('Internal server error'); - error.status = 500; - return callback(error); - } - return callback(null, auditTrailList); - }); -}; - - -AuditTrailSchema.statics.getAuditTrailByType = function(auditType,callback){ - AuditTrail.find({auditType:auditType}, function(err, auditTrailList) { +AuditTrailSchema.statics.getAuditTrails = function(queryObj,callback){ + AuditTrail.find(queryObj, function(err, auditTrailList) { if (err) { logger.error(err); var error = new Error('Internal server error'); diff --git a/server/app/model/blueprint/blueprint.js b/server/app/model/blueprint/blueprint.js index b63b73305..860e84b6a 100755 --- a/server/app/model/blueprint/blueprint.js +++ b/server/app/model/blueprint/blueprint.js @@ -1009,7 +1009,7 @@ BlueprintSchema.statics.getBlueprintsByOrgBgProject = function(jsonData, callbac }; -BlueprintSchema.statics.getBlueprintsServiceDeliveryCheck = function(serviceDeliveryCheck, callback) { +BlueprintSchema.statics.getAllServiceDeliveryBlueprint = function(serviceDeliveryCheck, callback) { this.find({serviceDeliveryCheck:serviceDeliveryCheck}, function(err, blueprints) { if (err) { callback(err, null); diff --git a/server/app/model/classes/tasks/tasks.js b/server/app/model/classes/tasks/tasks.js index a3a5e195f..26f2032ed 100755 --- a/server/app/model/classes/tasks/tasks.js +++ b/server/app/model/classes/tasks/tasks.js @@ -360,63 +360,6 @@ taskSchema.methods.getPuppetTaskNodes = function() { return []; } }; - -/*taskSchema.methods.getHistory = function(callback) { - TaskHistory.getHistoryByTaskId(this.id, function(err, tHistories) { - if (err) { - callback(err, null); - return; - } - var checker; - var uniqueResults = []; - if (tHistories && tHistories.length) { - for (var i = 0; i < tHistories.length; ++i) { - if (!checker || comparer(checker, tHistories[i]) != 0) { - checker = tHistories[i]; - uniqueResults.push(checker); - } - } - - if (uniqueResults.length) { - var hCount = 0; - for (var i = 0; i < uniqueResults.length; i++) { - (function(i) { - if (uniqueResults[i].nodeIds && uniqueResults[i].nodeIds.length) { - instancesDao.getInstancesByIDs(uniqueResults[i].nodeIds, function(err, data) { - hCount++; - if (err) { - return; - } - - if (data && data.length) { - var pId = []; - for (var j = 0; j < data.length; j++) { - pId.push(data[j].platformId); - } - uniqueResults[i] = JSON.parse(JSON.stringify(uniqueResults[i])); - uniqueResults[i]['platformId'] = pId; - } - - if (uniqueResults.length == hCount) { - return callback(null, uniqueResults); - } - }); - } else { - hCount++; - if (uniqueResults.length == hCount) { - return callback(null, uniqueResults); - } - } - })(i); - } - } - - } else { - return callback(null, tHistories); - } - }); -};*/ - taskSchema.methods.getHistory = function(callback) { TaskHistory.getHistoryByTaskId(this.id, function(err, tHistories) { if (err) { @@ -598,7 +541,7 @@ taskSchema.statics.getScriptTypeTask = function(callback){ }); }; -taskSchema.statics.getTasksServiceDeliveryCheck = function(serviceDeliveryCheck, callback) { +taskSchema.statics.getAllServiceDeliveryTask = function(serviceDeliveryCheck, callback) { this.find({serviceDeliveryCheck:serviceDeliveryCheck}, function(err, tasks) { if (err) { callback(err, null); diff --git a/server/app/routes/v1.0/routes_blueprints.js b/server/app/routes/v1.0/routes_blueprints.js index 7a00fafb9..8130519c6 100755 --- a/server/app/routes/v1.0/routes_blueprints.js +++ b/server/app/routes/v1.0/routes_blueprints.js @@ -28,25 +28,19 @@ var auditTrailService = require('_pr/services/auditTrailService'); module.exports.setRoutes = function(app, sessionVerificationFunc) { app.all('/blueprints/*', sessionVerificationFunc); - app.get('/blueprints/serviceDelivery', function(req, res) { - var serviceDeliveryCheck = false; - if(req.query.serviceDeliveryCheck && - (req.query.serviceDeliveryCheck === 'true' || req.query.serviceDeliveryCheck === true)) { - serviceDeliveryCheck = true; + app.get('/blueprints', function(req, res) { + var queryObj = { + serviceDeliveryCheck : req.query.serviceDeliveryCheck === "true" ? true:false, + actionStatus:req.query.actionStatus } - - Blueprints.getBlueprintsServiceDeliveryCheck(serviceDeliveryCheck, function(err, blueprints) { + blueprintService.getAllServiceDeliveryBlueprint(queryObj, function(err,data){ if (err) { - res.status(500).send({ - code: 500, - errMessage: "Blueprints fetch failed." - }); - return; + return res.status(500).send(err); + } else { + return res.status(200).send(data); } - res.status(200).send(blueprints); - }); + }) }); - app.delete('/blueprints/serviceDelivery/:blueprintId', function(req, res) { Blueprints.removeServiceDeliveryBlueprints(req.params.blueprintId, function(err, data) { if (err) { diff --git a/server/app/routes/v1.0/routes_tasks.js b/server/app/routes/v1.0/routes_tasks.js index a4d5f9646..3f704cf46 100755 --- a/server/app/routes/v1.0/routes_tasks.js +++ b/server/app/routes/v1.0/routes_tasks.js @@ -38,39 +38,7 @@ var fileIo = require('_pr/lib/utils/fileio'); module.exports.setRoutes = function(app, sessionVerification) { app.all('/tasks/*', sessionVerification); - app.get('/tasks/serviceDelivery', function(req, res) { - var serviceDeliveryCheck = false; - if (req.query.serviceDeliveryCheck && - (req.query.serviceDeliveryCheck === 'true' || req.query.serviceDeliveryCheck === true)) { - serviceDeliveryCheck = true; - } - Tasks.getTasksServiceDeliveryCheck(serviceDeliveryCheck, function(err, tasks) { - if (err) { - res.status(500).send({ - code: 500, - errMessage: "Task fetch failed." - }); - return; - } - res.status(200).send(tasks); - }); - }); - - app.delete('/tasks/serviceDelivery/:taskId', function(req, res) { - Tasks.removeServiceDeliveryTask(req.params.taskId, function(err, data) { - if (err) { - logger.error("Failed to delete service delivery Task", err); - res.send(500, errorResponses.db.error); - return; - } - res.send(200, { - message: "deleted" - }); - }); - }); - app.get('/tasks/history/list/all', function(req, res) { - logger.debug("------------------ ", JSON.stringify(TaskHistory)); TaskHistory.listHistory(function(err, tHistories) { if (err) { res.status(500).send(errorResponses.db.error); @@ -126,7 +94,22 @@ module.exports.setRoutes = function(app, sessionVerification) { }); }); + app.delete('/tasks/serviceDelivery/:taskId', function(req, res) { + Tasks.removeServiceDeliveryTask(req.params.taskId, function(err, data) { + if (err) { + logger.error("Failed to delete service delivery Task", err); + res.send(500, errorResponses.db.error); + return; + } + res.send(200, { + message: "deleted" + }); + }); + }); + + app.post('/tasks/:taskId/run', function(req, res) { + var taskId = req.params.taskId; var user = req.session.user.cn; var hostProtocol = req.protocol + '://' + req.get('host'); @@ -136,43 +119,11 @@ module.exports.setRoutes = function(app, sessionVerification) { var cookbookAttributes = req.body.cookbookAttributes; var botTagServer = req.body.tagServer; - - logger.debug('reqbody ======>', JSON.stringify(req.body)); - - - - /*Tasks.getTaskById(req.params.taskId, function(err, task) { - - if (err) { - logger.error(err); - res.status(500).send(errorResponses.db.error); - return; - } - var blueprintIds = []; - if (task.blueprintIds && task.blueprintIds.length) { - blueprintIds = task.blueprintIds - } - task.execute(req.session.user.cn, req.protocol + '://' + req.get('host'), choiceParam, nexusData, blueprintIds, task.envId, function(err, taskRes, historyData) { - if (err) { - logger.error(err); - res.status(500).send(err); - return; - } - if (historyData) { - taskRes.historyId = historyData.id; - } - logger.debug("taskRes::::: ", JSON.stringify(taskRes)); - res.send(taskRes); - }); - }); - */ - var paramOptions = { cookbookAttributes: cookbookAttributes, scriptParams: scriptParams }; - // encrypting script bot params if any if (paramOptions.scriptParams && paramOptions.scriptParams.length) { var cryptoConfig = appConfig.cryptoSettings; var cryptography = new Cryptography(cryptoConfig.algorithm, cryptoConfig.password); @@ -185,8 +136,6 @@ module.exports.setRoutes = function(app, sessionVerification) { paramOptions.scriptParams = encryptedParams; } - - taskService.executeTask(taskId, user, hostProtocol, choiceParam, appData, paramOptions, botTagServer, function(err, historyData) { if (err === 404) { res.status(404).send("Task not found."); @@ -524,27 +473,44 @@ module.exports.setRoutes = function(app, sessionVerification) { function getTaskList(req, res, next) { var reqData = {}; - async.waterfall( - [ - - function(next) { - apiUtil.paginationRequest(req.query, 'tasks', next); - }, - function(paginationReq, next) { - reqData = paginationReq; - Tasks.listTasks(paginationReq, next); - }, - function(tasks, next) { - apiUtil.paginationResponse(tasks, reqData, next); + if(req.query.page) { + async.waterfall( + [ + function (next) { + apiUtil.paginationRequest(req.query, 'tasks', next); + }, + function (paginationReq, next) { + paginationReq['searchColumns'] = ['name', 'orgName', 'bgName', 'projectName', 'envName']; + reqData = paginationReq; + apiUtil.databaseUtil(paginationReq, next); + }, + function (queryObj, next) { + Tasks.listTasks(queryObj, next); + }, + function (tasks, next) { + apiUtil.paginationResponse(tasks, reqData, next); + } + ], + function (err, results) { + if (err) { + return res.status(500).send(err); + } else { + return res.status(200).send(results); + } + }); + }else{ + var queryObj = { + serviceDeliveryCheck : req.query.serviceDeliveryCheck === "true" ? true:false, + actionStatus:req.query.actionStatus + } + taskService.getAllServiceDeliveryTask(queryObj, function(err,data){ + if (err) { + return res.status(500).send(err); + } else { + return res.status(200).send(data); } - - ], - function(err, results) { - if (err) - next(err); - else - return res.status(200).send(results); - }); + }) + } } app.post('/tasks/:taskId/update', function(req, res) { diff --git a/server/app/services/auditTrailService.js b/server/app/services/auditTrailService.js index 1a049bbe5..887147c3d 100644 --- a/server/app/services/auditTrailService.js +++ b/server/app/services/auditTrailService.js @@ -45,6 +45,7 @@ auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,audi envName: auditDetails.envName?auditDetails.envName:auditDetails.environmentName }, status: actionObj.status, + auditCategory:actionObj.auditCategory, actionStatus: actionObj.actionStatus, user: actionObj.catUser, startedOn: new Date().getTime(), @@ -197,7 +198,11 @@ auditTrailService.getBOTsSummary = function getBOTsSummary(callback){ }, totalNoOfSuccessBots: function(callback){ - auditTrail.getAuditTrailByStatus('BOTs','success',function(err,data){ + var query={ + auditType:'BOTs', + actionStatus:'success' + }; + auditTrail.getAuditTrails(query,function(err,data){ if(err){ callback(err,null); } @@ -206,7 +211,11 @@ auditTrailService.getBOTsSummary = function getBOTsSummary(callback){ }, totalNoOfRunningBots: function(callback){ - auditTrail.getAuditTrailByStatus('BOTs','running',function(err,data){ + var query={ + auditType:'BOTs', + actionStatus:'running' + }; + auditTrail.getAuditTrails(query,function(err,data){ if(err){ callback(err,null); } @@ -215,7 +224,10 @@ auditTrailService.getBOTsSummary = function getBOTsSummary(callback){ }, totalSavedTimeForBots: function(callback){ - auditTrail.getAuditTrailByType('BOTs',function(err,botAuditTrail){ + var query={ + auditType:'BOTs' + }; + auditTrail.getAuditTrails(query,function(err,botAuditTrail){ if(err){ callback(err,null); } else if(botAuditTrail.length > 0){ @@ -238,7 +250,11 @@ auditTrailService.getBOTsSummary = function getBOTsSummary(callback){ }); }, totalNoOfFailedBots: function(callback){ - auditTrail.getAuditTrailByStatus('BOTs','failed',function(err,data){ + var query={ + auditType:'BOTs', + actionStatus:'failed' + }; + auditTrail.getAuditTrails(query,function(err,data){ if(err){ callback(err,null); } diff --git a/server/app/services/blueprintService.js b/server/app/services/blueprintService.js index e12f90f73..32a290b27 100644 --- a/server/app/services/blueprintService.js +++ b/server/app/services/blueprintService.js @@ -30,6 +30,7 @@ var networkProfileService = require('_pr/services/networkProfileService.js'); var vmImageDao = require('_pr/model/classes/masters/vmImage.js'); var Blueprints = require('_pr/model/blueprint'); var AWSKeyPair = require('_pr/model/classes/masters/cloudprovider/keyPair.js'); +var auditTrail = require('_pr/model/audit-trail/audit-trail.js'); @@ -70,6 +71,69 @@ blueprintService.getAllBlueprints = function getAllBlueprints(orgIds, callback) }); }; +blueprintService.getAllServiceDeliveryBlueprint = function getAllServiceDeliveryBlueprint(queryObj, callback) { + if(queryObj.serviceDeliveryCheck === true && queryObj.actionStatus && queryObj.actionStatus !== null) { + var query = { + auditType: 'BOTs', + actionStatus: queryObj.actionStatus, + auditCategory: 'Blueprint' + }; + var blueprintIds = []; + async.waterfall([ + function (next) { + auditTrail.getAuditTrails(query, next); + }, + function (auditTrailList, next) { + var results = []; + if (auditTrailList.length > 0) { + for (var i = 0; i < auditTrailList.length; i++) { + if (taskIds.indexOf(auditTrailList[i].auditId) > -1) { + results.push(auditTrailList[i].auditId); + blueprintIds.push(auditTrailList[i].auditId); + } else { + results.push(auditTrailList[i].auditId); + } + } + if (results.length === auditTrailList.length) { + next(null, blueprintIds); + } + } else { + next(null, auditTrailList); + } + }, + function (blueprintIdList, next) { + if(blueprintIdList.length > 0) { + Blueprints.getByIds(blueprintIdList, next); + }else{ + next(null, blueprintIdList); + } + } + ], function (err, results) { + if (err) { + callback(err, null); + return; + } + callback(null, results); + return; + }) + }else if(queryObj.serviceDeliveryCheck === true){ + Blueprints.getAllServiceDeliveryBlueprint(queryObj.serviceDeliveryCheck, function(err, blueprints) { + if (err) { + callback({ + code: 500, + errMessage: "Blueprint fetch failed." + },null); + return; + } + callback(null, blueprints); + return; + }); + }else{ + callback(null, []); + return; + } +}; + blueprintService.checkBlueprintAccess = function checkBlueprintAccess(orgs, blueprintId, callback) { blueprintService.getBlueprintById(blueprintId, function(err, blueprint) { if (err) { diff --git a/server/app/services/taskService.js b/server/app/services/taskService.js index 1e7abc88d..04b0f49a9 100644 --- a/server/app/services/taskService.js +++ b/server/app/services/taskService.js @@ -21,6 +21,8 @@ var d4dModelNew = require('_pr/model/d4dmasters/d4dmastersmodelnew.js'); var TaskHistory = require('_pr/model/classes/tasks/taskHistory'); var instancesDao = require('_pr/model/classes/instance/instance'); var auditTrailService = require('_pr/services/auditTrailService'); +var auditTrail = require('_pr/model/audit-trail/audit-trail.js'); +var async = require('async'); const errorType = 'taskService'; @@ -44,6 +46,69 @@ taskService.getChefTasksByOrgBgProjectAndEnvId = function getChefTasksByOrgBgPro }); }; +taskService.getAllServiceDeliveryTask = function getAllServiceDeliveryTask(queryObj, callback) { + if(queryObj.serviceDeliveryCheck === true && queryObj.actionStatus && queryObj.actionStatus !== null) { + var query = { + auditType: 'BOTs', + actionStatus: queryObj.actionStatus, + auditCategory: 'Task' + }; + var taskIds = []; + async.waterfall([ + function (next) { + auditTrail.getAuditTrails(query, next); + }, + function (auditTrailList, next) { + var results = []; + if (auditTrailList.length > 0) { + for (var i = 0; i < auditTrailList.length; i++) { + if (taskIds.indexOf(auditTrailList[i].auditId) > -1) { + results.push(auditTrailList[i].auditId); + taskIds.push(auditTrailList[i].auditId); + } else { + results.push(auditTrailList[i].auditId); + } + } + if (results.length === auditTrailList.length) { + next(null, taskIds); + } + } else { + next(null, auditTrailList); + } + }, + function (taskIdList, next) { + if(taskIdList.length > 0) { + taskDao.getTaskByIds(taskIdList, next); + }else{ + next(null, taskIdList); + } + } + ], function (err, results) { + if (err) { + callback(err, null); + return; + } + callback(null, results); + return; + }) + }else if(queryObj.serviceDeliveryCheck === true){ + taskDao.getAllServiceDeliveryTask(queryObj.serviceDeliveryCheck, function(err, tasks) { + if (err) { + callback({ + code: 500, + errMessage: "Task fetch failed." + },null); + return; + } + callback(null, tasks); + return; + }); + }else{ + callback(null, []); + return; + } +}; + taskService.executeTask = function executeTask(taskId, user, hostProtocol, choiceParam, appData, paramOptions, botTagServer, callback) { if (appData) { appData['taskId'] = taskId;