From c3dab06ddac7dfe9da5afd529be479479d5db966 Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Mon, 21 Nov 2016 16:45:38 +0530 Subject: [PATCH 1/8] BOTs Summary Implementation --- server/app/model/audit-trail/bot-audit-trail.js | 2 +- server/app/model/audit-trail/container-audit-trail.js | 1 - server/app/model/audit-trail/instance-audit-trail.js | 1 - server/app/services/auditTrailService.js | 3 ++- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/server/app/model/audit-trail/bot-audit-trail.js b/server/app/model/audit-trail/bot-audit-trail.js index 0826b6374..a587f32a7 100644 --- a/server/app/model/audit-trail/bot-audit-trail.js +++ b/server/app/model/audit-trail/bot-audit-trail.js @@ -37,7 +37,6 @@ var BotAuditTrailSchema = new BaseAuditTrail({ }, type: { type: String, - unique: true, trim:true }, description:{ @@ -53,6 +52,7 @@ var BotAuditTrailSchema = new BaseAuditTrail({ }); BotAuditTrailSchema.statics.createNew = function(auditTrail,callback){ + console.log(JSON.stringify(auditTrail)); var botAuditTrail = new BotAuditTrail(auditTrail); botAuditTrail.save(function(err, data) { if (err) { diff --git a/server/app/model/audit-trail/container-audit-trail.js b/server/app/model/audit-trail/container-audit-trail.js index ffcab64b6..a335b7d6a 100644 --- a/server/app/model/audit-trail/container-audit-trail.js +++ b/server/app/model/audit-trail/container-audit-trail.js @@ -16,7 +16,6 @@ var ContainerAuditTrailSchema = new BaseAuditTrail({ }, name: { type: String, - unique: true, trim:true }, Image:{ diff --git a/server/app/model/audit-trail/instance-audit-trail.js b/server/app/model/audit-trail/instance-audit-trail.js index cf6b31232..46a327ad6 100644 --- a/server/app/model/audit-trail/instance-audit-trail.js +++ b/server/app/model/audit-trail/instance-audit-trail.js @@ -17,7 +17,6 @@ var InstanceAuditTrailSchema = new BaseAuditTrail({ }, platform: { type: String, - unique: true, trim: true }, os: { diff --git a/server/app/services/auditTrailService.js b/server/app/services/auditTrailService.js index f938bb2bf..621c7bce9 100644 --- a/server/app/services/auditTrailService.js +++ b/server/app/services/auditTrailService.js @@ -117,6 +117,7 @@ auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,acti auditTrailService.saveAndUpdateAuditTrail = function saveAndUpdateAuditTrail(auditTrailDetails,callback){ if(auditTrailDetails.auditType === 'BOTs'){ + console.log(JSON.stringify(auditTrailDetails)); botAuditTrail.createNew(auditTrailDetails,function(err,data){ if(err){ logger.error(err); @@ -282,7 +283,7 @@ auditTrailService.getBOTsSummary = function getBOTsSummary(callback){ })(botAuditTrail[i]); } if(count === botAuditTrail.length){ - callback(null,totalTimeInSeconds); + callback(null,(totalTimeInSeconds/60)); } } else{ callback(null,botAuditTrail.length); From c23b6cf9ab1e8508b894778245520b949df80341 Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Mon, 21 Nov 2016 18:42:24 +0530 Subject: [PATCH 2/8] BOTs Audit Trail Implementation --- .../sections/dashboard/bots/view/library.html | 4 ++-- server/app/model/audit-trail/base-audit-trail.js | 16 ++++++++-------- server/app/model/audit-trail/bot-audit-trail.js | 1 - .../cloud-formation-blueprint.js | 2 +- .../aws-blueprint/aws-blueprint.js | 6 +++++- .../azure-blueprint/azure-blueprint.js | 10 +++++++++- .../openstack-blueprint/openstack-blueprint.js | 10 +++++++++- .../vmware-blueprint/vmware-blueprint.js | 10 +++++++++- server/app/routes/v1.0/routes_blueprints.js | 12 ++++++------ server/app/services/auditTrailService.js | 1 - 10 files changed, 49 insertions(+), 23 deletions(-) diff --git a/client/cat3/src/partials/sections/dashboard/bots/view/library.html b/client/cat3/src/partials/sections/dashboard/bots/view/library.html index c7be82dc5..d073ce65c 100644 --- a/client/cat3/src/partials/sections/dashboard/bots/view/library.html +++ b/client/cat3/src/partials/sections/dashboard/bots/view/library.html @@ -9,7 +9,7 @@
-
Number of BOTs Running
+
Number of BOTs Runs which are success
Panel Content
@@ -21,7 +21,7 @@
-
Number of Runs which are failed
+
Number of BOTs Runs which are failed
Panel Content
diff --git a/server/app/model/audit-trail/base-audit-trail.js b/server/app/model/audit-trail/base-audit-trail.js index 9a841bd51..d44ee44f4 100644 --- a/server/app/model/audit-trail/base-audit-trail.js +++ b/server/app/model/audit-trail/base-audit-trail.js @@ -34,42 +34,42 @@ var AuditTrailSchema = function AuditTrail() { orgName: { type: String, trim:true, - required:true + required:false }, orgId: { type: String, trim:true, - required:true + required:false }, bgName: { type: String, trim:true, - required:true + required:false }, bgId: { type: String, trim:true, - required:true + required:false }, projectName: { type: String, trim:true, - required:true + required:false }, projectId: { type: String, trim:true, - required:true + required:false }, envName: { type: String, trim:true, - required:true + required:false }, envId: { type: String, trim:true, - required:true + required:false } }, auditType: { diff --git a/server/app/model/audit-trail/bot-audit-trail.js b/server/app/model/audit-trail/bot-audit-trail.js index a587f32a7..3604a68d7 100644 --- a/server/app/model/audit-trail/bot-audit-trail.js +++ b/server/app/model/audit-trail/bot-audit-trail.js @@ -52,7 +52,6 @@ var BotAuditTrailSchema = new BaseAuditTrail({ }); BotAuditTrailSchema.statics.createNew = function(auditTrail,callback){ - console.log(JSON.stringify(auditTrail)); var botAuditTrail = new BotAuditTrail(auditTrail); botAuditTrail.save(function(err, data) { if (err) { diff --git a/server/app/model/blueprint/blueprint-types/cloud-formation-blueprint/cloud-formation-blueprint.js b/server/app/model/blueprint/blueprint-types/cloud-formation-blueprint/cloud-formation-blueprint.js index f7fc57ebf..74eb2ee65 100755 --- a/server/app/model/blueprint/blueprint-types/cloud-formation-blueprint/cloud-formation-blueprint.js +++ b/server/app/model/blueprint/blueprint-types/cloud-formation-blueprint/cloud-formation-blueprint.js @@ -234,7 +234,7 @@ CloudFormationBlueprintSchema.methods.launch = function(launchParams, callback) return; } callback(null, { - stackId: cloudFormation._id + stackId: cloudFormation._id, }); awsCF.waitForStackCompleteStatus(stackData.StackId, function(err, completeStack) { diff --git a/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js b/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js index 6d0601c42..1639c28b5 100755 --- a/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js +++ b/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js @@ -291,7 +291,11 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { "instanceId":data._id, "actionLogId":actionLog._id, "endedOn":new Date().getTime(), - "actionStatus":"success" + "actionStatus":"success", + "orgName":launchParams.orgName, + "bgName":launchParams.bgName, + "projectName":launchParams.projectName, + "envName":launchParams.envName }); } var instanceLog = { diff --git a/server/app/model/blueprint/blueprint-types/instance-blueprint/azure-blueprint/azure-blueprint.js b/server/app/model/blueprint/blueprint-types/instance-blueprint/azure-blueprint/azure-blueprint.js index 3b56d2414..bc09f02b8 100755 --- a/server/app/model/blueprint/blueprint-types/instance-blueprint/azure-blueprint/azure-blueprint.js +++ b/server/app/model/blueprint/blueprint-types/instance-blueprint/azure-blueprint/azure-blueprint.js @@ -384,7 +384,15 @@ azureInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { if (azureinstid.length >= parseInt(self.instanceCount)) { callback(null, { "id": azureinstid, - "message": "instance launch success" + "message": "instance launch success", + "instanceId":data._id, + "actionLogId":actionLog._id, + "endedOn":new Date().getTime(), + "actionStatus":"success", + "orgName":launchParams.orgName, + "bgName":launchParams.bgName, + "projectName":launchParams.projectName, + "envName":launchParams.envName }); logger.debug('Should have sent the response.'); } diff --git a/server/app/model/blueprint/blueprint-types/instance-blueprint/openstack-blueprint/openstack-blueprint.js b/server/app/model/blueprint/blueprint-types/instance-blueprint/openstack-blueprint/openstack-blueprint.js index 65b26083a..011980c17 100755 --- a/server/app/model/blueprint/blueprint-types/instance-blueprint/openstack-blueprint/openstack-blueprint.js +++ b/server/app/model/blueprint/blueprint-types/instance-blueprint/openstack-blueprint/openstack-blueprint.js @@ -327,7 +327,15 @@ openstackInstanceBlueprintSchema.methods.launch = function(launchParams, callbac callback(null, { "id": [instance.id], - "message": "instance launch success" + "message": "instance launch success", + "instanceId":data._id, + "actionLogId":actionLog._id, + "endedOn":new Date().getTime(), + "actionStatus":"success", + "orgName":launchParams.orgName, + "bgName":launchParams.bgName, + "projectName":launchParams.projectName, + "envName":launchParams.envName }); logger.debug('Should have sent the response & Entering wait state for instance ready:', JSON.stringify(instanceData)); var cryptoConfig = appConfig.cryptoSettings; diff --git a/server/app/model/blueprint/blueprint-types/instance-blueprint/vmware-blueprint/vmware-blueprint.js b/server/app/model/blueprint/blueprint-types/instance-blueprint/vmware-blueprint/vmware-blueprint.js index 969017ab2..5b5ffabf4 100755 --- a/server/app/model/blueprint/blueprint-types/instance-blueprint/vmware-blueprint/vmware-blueprint.js +++ b/server/app/model/blueprint/blueprint-types/instance-blueprint/vmware-blueprint/vmware-blueprint.js @@ -318,7 +318,15 @@ vmwareInstanceBlueprintSchema.methods.launch = function(launchParams, callback) //res.send(200); callback(null, { "id": [instance.id], - "message": "instance launch success" + "message": "instance launch success", + "instanceId":data._id, + "actionLogId":actionLog._id, + "endedOn":new Date().getTime(), + "actionStatus":"success", + "orgName":launchParams.orgName, + "bgName":launchParams.bgName, + "projectName":launchParams.projectName, + "envName":launchParams.envName }); logger.debug('Should have sent the response.'); vmwareCloud.waitforserverready(appConfig.vmware.serviceHost, createserverdata["vm_name"], anImage.userName, anImage.instancePassword, function(err, publicip, vmdata) { diff --git a/server/app/routes/v1.0/routes_blueprints.js b/server/app/routes/v1.0/routes_blueprints.js index 4ea70b5f6..d0e796055 100755 --- a/server/app/routes/v1.0/routes_blueprints.js +++ b/server/app/routes/v1.0/routes_blueprints.js @@ -395,13 +395,9 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { auditType:'BOTs', auditCategory:'Blueprint', masterDetails:{ - orgName: blueprint.orgName, orgId: blueprint.orgId, - bgName: blueprint.bgName, bgId: blueprint.bgId, - projectName: blueprint.projectName, projectId: blueprint.projectId, - envName: blueprint.envName, envId: req.query.envId }, auditTrailConfig:{ @@ -412,7 +408,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { executionType:blueprint.blueprintType, nodeIdsWithActionLog:[] }, - user:userName, + user:req.session.user.cn, startedOn:new Date().getTime(), status:'running', action:'BOTs Blueprint Execution', @@ -483,7 +479,11 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { "actionLogId" : launchData.actionLogId, "nodeId" : launchData.instanceId }], - "nodeIds":[launchData.instanceId] + "nodeIds":[launchData.instanceId], + "masterDetails.orgName":launchData.orgName, + "masterDetails.bgName":launchData.bgName, + "masterDetails.projectName":launchData.projectName, + "masterDetails.envName":launchData.envName } if(blueprint.serviceDeliveryCheck === true){ auditTrailService.updateAuditTrail('BOTs',auditTrailId,resultBlueprintExecution,function(err,auditTrail){ diff --git a/server/app/services/auditTrailService.js b/server/app/services/auditTrailService.js index 621c7bce9..f85c790f3 100644 --- a/server/app/services/auditTrailService.js +++ b/server/app/services/auditTrailService.js @@ -117,7 +117,6 @@ auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,acti auditTrailService.saveAndUpdateAuditTrail = function saveAndUpdateAuditTrail(auditTrailDetails,callback){ if(auditTrailDetails.auditType === 'BOTs'){ - console.log(JSON.stringify(auditTrailDetails)); botAuditTrail.createNew(auditTrailDetails,function(err,data){ if(err){ logger.error(err); From a7f98cbf20d2d2e8eec574388b9539207a4c930e Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Tue, 22 Nov 2016 12:12:46 +0530 Subject: [PATCH 3/8] BOTs Audit Trail Implementation --- server/app/model/blueprint/blueprint.js | 24 +++++++++++++++++++-- server/app/routes/v1.0/routes_blueprints.js | 10 ++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/server/app/model/blueprint/blueprint.js b/server/app/model/blueprint/blueprint.js index b471a4026..1f540eb8a 100755 --- a/server/app/model/blueprint/blueprint.js +++ b/server/app/model/blueprint/blueprint.js @@ -347,7 +347,17 @@ BlueprintSchema.methods.launch = function(opts, callback) { blueprintData: self, tagServer: opts.tagServer, }, function(err, launchData) { - callback(err, launchData); + if(err){ + err['errObj'] = { + orgName:project[0].orgname, + bgName:project[0].productgroupname, + projectName:project[0].projectname, + envName:envName + }; + callback(err,null); + return; + } + callback(null, launchData); }); }); } else { @@ -371,7 +381,17 @@ BlueprintSchema.methods.launch = function(opts, callback) { blueprintData: self, tagServer: opts.tagServer, }, function(err, launchData) { - callback(err, launchData); + if(err){ + err['errObj'] = { + orgName:project[0].orgname, + bgName:project[0].productgroupname, + projectName:project[0].projectname, + envName:envName + }; + callback(err,null); + return; + } + callback(null, launchData); }); } }); diff --git a/server/app/routes/v1.0/routes_blueprints.js b/server/app/routes/v1.0/routes_blueprints.js index d0e796055..bf980da4b 100755 --- a/server/app/routes/v1.0/routes_blueprints.js +++ b/server/app/routes/v1.0/routes_blueprints.js @@ -455,9 +455,13 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { if (err) { if(blueprint.serviceDeliveryCheck === true){ var resultBlueprintExecution = { - endedOn:new Date().getTime(), - actionStatus:'failed', - status:'failed' + "endedOn":new Date().getTime(), + "actionStatus":'failed', + "status":'failed', + "masterDetails.orgName":err.errObj.orgName, + "masterDetails.bgName":err.errObj.bgName, + "masterDetails.projectName":err.errObj.projectName, + "masterDetails.envName":err.errObj.envName } auditTrailService.updateAuditTrail('BOTs',auditTrailId,resultBlueprintExecution,function(err,auditTrail){ if (err) { From 75a9d15df2f97bc7b777542726546f53f3a57f44 Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Tue, 22 Nov 2016 12:50:32 +0530 Subject: [PATCH 4/8] BOTs Audit Trail Implementation --- .../DockerContainerSync.js | 2 - .../audit-trail/container-audit-trail.js | 4 +- server/app/model/classes/tasks/tasks.js | 57 ------------------- server/app/routes/v1.0/routes_blueprints.js | 53 +++++++---------- server/app/services/auditTrailService.js | 34 ++--------- server/app/services/taskService.js | 56 +++++++++++++++++- 6 files changed, 83 insertions(+), 123 deletions(-) diff --git a/server/app/cronjobs/docker-container-sync/DockerContainerSync.js b/server/app/cronjobs/docker-container-sync/DockerContainerSync.js index fba3e626a..e7e83680a 100644 --- a/server/app/cronjobs/docker-container-sync/DockerContainerSync.js +++ b/server/app/cronjobs/docker-container-sync/DockerContainerSync.js @@ -270,8 +270,6 @@ function saveAndUpdateContainers(containers,containerIds,instanceId,instance,nex log: logs, timestamp: timestampStarted }); - - var containerLogs ={ actionId: actionLog._id, containerId: container.Id, diff --git a/server/app/model/audit-trail/container-audit-trail.js b/server/app/model/audit-trail/container-audit-trail.js index a335b7d6a..f4ec36137 100644 --- a/server/app/model/audit-trail/container-audit-trail.js +++ b/server/app/model/audit-trail/container-audit-trail.js @@ -18,11 +18,11 @@ var ContainerAuditTrailSchema = new BaseAuditTrail({ type: String, trim:true }, - Image:{ + image:{ type: String, trim:true }, - ImageId:{ + imageId:{ type: String, trim:true }, diff --git a/server/app/model/classes/tasks/tasks.js b/server/app/model/classes/tasks/tasks.js index 614aa79ed..4b3f9ba5a 100755 --- a/server/app/model/classes/tasks/tasks.js +++ b/server/app/model/classes/tasks/tasks.js @@ -29,7 +29,6 @@ var ScriptTask = require('./taskTypeScript'); var mongoosePaginate = require('mongoose-paginate'); var ApiUtils = require('_pr/lib/utils/apiUtil.js'); var Schema = mongoose.Schema; -var auditTrailService = require('_pr/services/auditTrailService'); var TASK_TYPE = { @@ -142,38 +141,6 @@ taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, b logger.debug('Executing'); var task; var self = this; - var botAuditDetails = null; - if(self.serviceDeliveryCheck === true){ - var botAuditDetails={ - auditId:self.id, - auditType:'BOTs', - auditCategory:'Task', - masterDetails:{ - orgName: self.orgName, - orgId: self.orgId, - bgName: self.bgName, - bgId: self.bgId, - projectName: self.projectName, - projectId: self.projectId, - envName: self.envName, - envId: self.envId - }, - auditTrailConfig:{ - nodeIds:this.taskConfig.nodeIds, - name:self.name, - type:self.botType, - description:self.shortDesc, - category:self.botCategory, - executionType:self.taskType, - nodeIdsWithActionLog:[] - }, - user:userName, - startedOn:new Date().getTime(), - status:'running', - action:'BOTs Task Execution', - actionStatus:'running' - } - } var taskHistoryData = { taskId: self.id, taskType: self.taskType, @@ -230,15 +197,6 @@ taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, b task.envId = this.envId; task.botParams = self.botParams; task.botTagServer = self.botTagServer; - var auditTrailId = null; - if(self.serviceDeliveryCheck === true) { - auditTrailService.saveAndUpdateAuditTrail(botAuditDetails, function (err, auditTrail) { - if (err) { - logger.error("Failed to create or update bot Log: ", err); - } - auditTrailId = auditTrail._id; - }); - }; task.execute(userName, baseUrl, choiceParam, appData, blueprintIds, envId, function(err, taskExecuteData, taskHistoryEntry) { if (err) { callback(err, null); @@ -339,14 +297,6 @@ taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, b if (taskHistory) { taskHistory.timestampEnded = self.timestampEnded; taskHistory.status = self.lastTaskStatus; - var resultTaskExecution = { - "actionStatus":self.lastTaskStatus, - "status":self.lastTaskStatus, - "endedOn":self.timestampEnded, - "actionLogId":taskHistory.nodeIdsWithActionLog[0].actionLogId, - "auditTrailConfig.nodeIdsWithActionLog":taskHistory.nodeIdsWithActionLog - }; - logger.debug("resultData: ", JSON.stringify(resultData)); if (resultData) { if (resultData.instancesResults && resultData.instancesResults.length) { taskHistory.executionResults = resultData.instancesResults; @@ -356,13 +306,6 @@ taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, b } } - if(self.serviceDeliveryCheck === true){ - auditTrailService.updateAuditTrail('BOTs',auditTrailId,resultTaskExecution,function(err,auditTrail){ - if (err) { - logger.error("Failed to create or update bot Log: ", err); - } - }); - } taskHistory.save(); } diff --git a/server/app/routes/v1.0/routes_blueprints.js b/server/app/routes/v1.0/routes_blueprints.js index bf980da4b..751bd6fa8 100755 --- a/server/app/routes/v1.0/routes_blueprints.js +++ b/server/app/routes/v1.0/routes_blueprints.js @@ -388,32 +388,30 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { }); return; } - var botAuditDetails = null; + var auditTrailId = null; if(blueprint.serviceDeliveryCheck === true){ - var botAuditDetails={ - auditId:blueprint._id, + var actionObj={ auditType:'BOTs', auditCategory:'Blueprint', - masterDetails:{ - orgId: blueprint.orgId, - bgId: blueprint.bgId, - projectId: blueprint.projectId, - envId: req.query.envId - }, - auditTrailConfig:{ - name:blueprint.name, - type:blueprint.botType, - description:blueprint.shortDesc, - category:blueprint.botCategory, - executionType:blueprint.blueprintType, - nodeIdsWithActionLog:[] - }, - user:req.session.user.cn, - startedOn:new Date().getTime(), status:'running', action:'BOTs Blueprint Execution', - actionStatus:'running' - } + actionStatus:'running', + catUser:req.session.user.cn + }; + var auditTrailObj = { + name:blueprint.name, + type:blueprint.botType, + description:blueprint.shortDesc, + category:blueprint.botCategory, + executionType:blueprint.blueprintType, + nodeIdsWithActionLog:[] + }; + auditTrailService.insertAuditTrail(blueprint,auditTrailObj,actionObj,function(err,data){ + if(err){ + logger.error(err); + } + auditTrailId=data._id; + }); } var stackName = null; var domainName = null; @@ -435,15 +433,6 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { return; } } - var auditTrailId = null; - if(blueprint.serviceDeliveryCheck === true) { - auditTrailService.saveAndUpdateAuditTrail(botAuditDetails, function (err, auditTrail) { - if (err) { - logger.error("Failed to create or update bot Log: ", err); - } - auditTrailId = auditTrail._id; - }); - }; blueprint.launch({ envId: req.query.envId, ver: req.query.version, @@ -453,7 +442,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { tagServer: req.query.tagServer }, function(err, launchData) { if (err) { - if(blueprint.serviceDeliveryCheck === true){ + if(auditTrailId !== null){ var resultBlueprintExecution = { "endedOn":new Date().getTime(), "actionStatus":'failed', @@ -489,7 +478,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { "masterDetails.projectName":launchData.projectName, "masterDetails.envName":launchData.envName } - if(blueprint.serviceDeliveryCheck === true){ + if(auditTrailId !== null){ auditTrailService.updateAuditTrail('BOTs',auditTrailId,resultBlueprintExecution,function(err,auditTrail){ if (err) { logger.error("Failed to create or update bot Log: ", err); diff --git a/server/app/services/auditTrailService.js b/server/app/services/auditTrailService.js index f85c790f3..99eb76fe9 100644 --- a/server/app/services/auditTrailService.js +++ b/server/app/services/auditTrailService.js @@ -30,9 +30,8 @@ var apiUtil = require('_pr/lib/utils/apiUtil.js'); var logsDao = require('_pr/model/dao/logsdao.js'); -auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,actionLog,actionObj,callback) { +auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,auditTrailConfig,actionObj,callback) { var auditTrailObj = { - actionId: actionLog._id, auditId: auditDetails._id, auditType: actionObj.auditType, masterDetails:{ @@ -50,21 +49,10 @@ auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,acti user: actionObj.catUser, startedOn: new Date().getTime(), providerType: auditDetails.providerType, - action: actionObj.action, - logs: [{ - err: false, - log: actionObj.log, - timestamp: new Date().getTime() - }] + action: actionObj.action }; if(actionObj.auditType === 'BOTs'){ - auditTrailObj.auditTrailConfig = { - platformId: auditDetails.platformId, - blueprintName: auditDetails.blueprintData.blueprintName, - platform: "unknown", - os:auditDetails.hardware.os, - size:"" - }; + auditTrailObj.auditTrailConfig = auditTrailConfig; botAuditTrail.createNew(auditTrailObj,function(err,data){ if(err){ logger.error(err); @@ -75,13 +63,7 @@ auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,acti return; }) }else if(actionObj.auditType === 'Instances'){ - auditTrailObj.auditTrailConfig = { - platformId: auditDetails.platformId, - blueprintName: auditDetails.blueprintData.blueprintName, - platform: "unknown", - os:auditDetails.hardware.os, - size:"" - }; + auditTrailObj.auditTrailConfig = auditTrailConfig; instanceAuditTrail.createNew(auditTrailObj,function(err,data){ if(err){ logger.error(err); @@ -92,13 +74,7 @@ auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,acti return; }) }else if(actionObj.auditType === 'Containers'){ - auditTrailObj.auditTrailConfig = { - platformId: auditDetails.platformId, - blueprintName: auditDetails.blueprintData.blueprintName, - platform: "unknown", - os:auditDetails.hardware.os, - size:"" - }; + auditTrailObj.auditTrailConfig = auditTrailConfig; containerAuditTrail.createNew(auditTrailObj,function(err,data){ if(err){ logger.error(err); diff --git a/server/app/services/taskService.js b/server/app/services/taskService.js index 7e41d9d8d..cfcd1d6a9 100644 --- a/server/app/services/taskService.js +++ b/server/app/services/taskService.js @@ -20,6 +20,7 @@ var masterUtil = require('_pr/lib/utils/masterUtil.js'); 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'); const errorType = 'taskService'; @@ -54,7 +55,6 @@ taskService.executeTask = function executeTask(taskId, user, hostProtocol, choic return callback(error, null); } if (task) { - if (task.taskType.CHEF_TASK) { paramOptions = paramOptions.attributes; } else if (task.taskType.SCRIPT_TASK) { @@ -67,14 +67,68 @@ taskService.executeTask = function executeTask(taskId, user, hostProtocol, choic } task.botParams = paramOptions; task.botTagServer = botTagServer; + var auditTrailId = null; + if(task.serviceDeliveryCheck === true){ + var actionObj={ + auditType:'BOTs', + auditCategory:'Task', + status:'running', + action:'BOTs Task Execution', + actionStatus:'running', + catUser:user + }; + var auditTrailObj = { + nodeIds:task.taskConfig.nodeIds, + name:task.name, + type:task.botType, + description:task.shortDesc, + category:task.botCategory, + executionType:task.taskType, + nodeIdsWithActionLog:[] + }; + auditTrailService.insertAuditTrail(task,auditTrailObj,actionObj,function(err,data){ + if(err){ + logger.error(err); + } + auditTrailId=data._id; + }); + } task.execute(user, hostProtocol, choiceParam, appData, blueprintIds, task.envId, function(err, taskRes, historyData) { if (err) { + if(auditTrailId !== null) { + var resultTaskExecution = { + "actionStatus": historyData.lastTaskStatus, + "status": historyData.lastTaskStatus, + "endedOn": historyData.timestampEnded, + "actionLogId": historyData.nodeIdsWithActionLog[0].actionLogId, + "auditTrailConfig.nodeIdsWithActionLog": historyData.nodeIdsWithActionLog + }; + auditTrailService.updateAuditTrail('BOTs', auditTrailId, resultTaskExecution, function (err, auditTrail) { + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } var error = new Error('Failed to execute task.'); error.status = 500; return callback(error, null); } if (historyData) { taskRes.historyId = historyData.id; + if(auditTrailId !== null) { + var resultTaskExecution = { + "actionStatus": historyData.lastTaskStatus, + "status": historyData.lastTaskStatus, + "endedOn": historyData.timestampEnded, + "actionLogId": historyData.nodeIdsWithActionLog[0].actionLogId, + "auditTrailConfig.nodeIdsWithActionLog": historyData.nodeIdsWithActionLog + }; + auditTrailService.updateAuditTrail('BOTs', auditTrailId, resultTaskExecution, function (err, auditTrail) { + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } } callback(null, taskRes); return; From 97ea9f6a7a60d76f80097897afcb0cb1c0419f4a Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Tue, 22 Nov 2016 14:58:10 +0530 Subject: [PATCH 5/8] BOTs Audit Trail Implementation --- .../aws-blueprint/aws-blueprint.js | 4 +- server/app/model/blueprint/blueprint.js | 2 + server/app/model/classes/tasks/tasks.js | 20 +++- server/app/routes/v1.0/routes_blueprints.js | 6 +- server/app/services/auditTrailService.js | 4 +- server/app/services/taskService.js | 98 +++++++++++-------- 6 files changed, 84 insertions(+), 50 deletions(-) diff --git a/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js b/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js index 1639c28b5..d4ce2e52a 100755 --- a/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js +++ b/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js @@ -288,8 +288,8 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { callback(null, { "id": newinstanceIDs, "message": "instance launch success", - "instanceId":data._id, - "actionLogId":actionLog._id, + "instanceId":logsReferenceIds[0], + "actionLogId":logsReferenceIds[1], "endedOn":new Date().getTime(), "actionStatus":"success", "orgName":launchParams.orgName, diff --git a/server/app/model/blueprint/blueprint.js b/server/app/model/blueprint/blueprint.js index 1f540eb8a..65c247a63 100755 --- a/server/app/model/blueprint/blueprint.js +++ b/server/app/model/blueprint/blueprint.js @@ -349,6 +349,7 @@ BlueprintSchema.methods.launch = function(opts, callback) { }, function(err, launchData) { if(err){ err['errObj'] = { + endedOn:new Date().getTime(), orgName:project[0].orgname, bgName:project[0].productgroupname, projectName:project[0].projectname, @@ -383,6 +384,7 @@ BlueprintSchema.methods.launch = function(opts, callback) { }, function(err, launchData) { if(err){ err['errObj'] = { + endedOn:new Date().getTime(), orgName:project[0].orgname, bgName:project[0].productgroupname, projectName:project[0].projectname, diff --git a/server/app/model/classes/tasks/tasks.js b/server/app/model/classes/tasks/tasks.js index 4b3f9ba5a..378b66234 100755 --- a/server/app/model/classes/tasks/tasks.js +++ b/server/app/model/classes/tasks/tasks.js @@ -29,6 +29,7 @@ var ScriptTask = require('./taskTypeScript'); var mongoosePaginate = require('mongoose-paginate'); var ApiUtils = require('_pr/lib/utils/apiUtil.js'); var Schema = mongoose.Schema; +var auditTrailService = require('_pr/services/auditTrailService'); var TASK_TYPE = { @@ -137,7 +138,7 @@ taskSchema.plugin(mongoosePaginate); // Executes a task -taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, blueprintIds, envId, callback, onComplete) { +taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, blueprintIds, envId,auditTrailId, callback, onComplete) { logger.debug('Executing'); var task; var self = this; @@ -297,6 +298,16 @@ taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, b if (taskHistory) { taskHistory.timestampEnded = self.timestampEnded; taskHistory.status = self.lastTaskStatus; + var resultTaskExecution = { + "actionStatus":self.lastTaskStatus, + "status":self.lastTaskStatus, + "endedOn":self.timestampEnded, + "actionLogId":taskHistory.nodeIdsWithActionLog[0].actionLogId, + "auditTrailConfig.nodeIdsWithActionLog":taskHistory.nodeIdsWithActionLog + }; + console.log(">>>>>>>>>>>>>>"+JSON.stringify(resultTaskExecution)); + console.log(">>>>>>>>>>>>>>"+auditTrailId); + console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); if (resultData) { if (resultData.instancesResults && resultData.instancesResults.length) { taskHistory.executionResults = resultData.instancesResults; @@ -306,6 +317,13 @@ taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, b } } + if(auditTrailId !== null){ + auditTrailService.updateAuditTrail('BOTs',auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } taskHistory.save(); } diff --git a/server/app/routes/v1.0/routes_blueprints.js b/server/app/routes/v1.0/routes_blueprints.js index 751bd6fa8..e52e08b00 100755 --- a/server/app/routes/v1.0/routes_blueprints.js +++ b/server/app/routes/v1.0/routes_blueprints.js @@ -444,7 +444,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { if (err) { if(auditTrailId !== null){ var resultBlueprintExecution = { - "endedOn":new Date().getTime(), + "endedOn":err.errObj.endedOn, "actionStatus":'failed', "status":'failed', "masterDetails.orgName":err.errObj.orgName, @@ -464,7 +464,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { return; } var resultBlueprintExecution = { - "endedOn":new Date().getTime(), + "endedOn":launchData.endedOn, "actionStatus":launchData.actionStatus, "status":launchData.actionStatus, "actionLogId":launchData.actionLogId, @@ -472,7 +472,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { "actionLogId" : launchData.actionLogId, "nodeId" : launchData.instanceId }], - "nodeIds":[launchData.instanceId], + "auditTrailConfig.nodeIds":[launchData.instanceId], "masterDetails.orgName":launchData.orgName, "masterDetails.bgName":launchData.bgName, "masterDetails.projectName":launchData.projectName, diff --git a/server/app/services/auditTrailService.js b/server/app/services/auditTrailService.js index 99eb76fe9..c45d58a2a 100644 --- a/server/app/services/auditTrailService.js +++ b/server/app/services/auditTrailService.js @@ -42,7 +42,7 @@ auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,audi projectId: auditDetails.projectId, projectName: auditDetails.projectName, envId: auditDetails.envId, - envName: auditDetails.environmentName + envName: auditDetails.envName?auditDetails.envName:auditDetails.environmentName }, status: actionObj.status, actionStatus: actionObj.actionStatus, @@ -258,7 +258,7 @@ auditTrailService.getBOTsSummary = function getBOTsSummary(callback){ })(botAuditTrail[i]); } if(count === botAuditTrail.length){ - callback(null,(totalTimeInSeconds/60)); + callback(null,Math.round(totalTimeInSeconds/60)); } } else{ callback(null,botAuditTrail.length); diff --git a/server/app/services/taskService.js b/server/app/services/taskService.js index cfcd1d6a9..1e7abc88d 100644 --- a/server/app/services/taskService.js +++ b/server/app/services/taskService.js @@ -86,53 +86,67 @@ taskService.executeTask = function executeTask(taskId, user, hostProtocol, choic executionType:task.taskType, nodeIdsWithActionLog:[] }; - auditTrailService.insertAuditTrail(task,auditTrailObj,actionObj,function(err,data){ - if(err){ + auditTrailService.insertAuditTrail(task,auditTrailObj,actionObj,function(err,data) { + if (err) { logger.error(err); } - auditTrailId=data._id; - }); - } - task.execute(user, hostProtocol, choiceParam, appData, blueprintIds, task.envId, function(err, taskRes, historyData) { - if (err) { - if(auditTrailId !== null) { - var resultTaskExecution = { - "actionStatus": historyData.lastTaskStatus, - "status": historyData.lastTaskStatus, - "endedOn": historyData.timestampEnded, - "actionLogId": historyData.nodeIdsWithActionLog[0].actionLogId, - "auditTrailConfig.nodeIdsWithActionLog": historyData.nodeIdsWithActionLog - }; - auditTrailService.updateAuditTrail('BOTs', auditTrailId, resultTaskExecution, function (err, auditTrail) { - if (err) { - logger.error("Failed to create or update bot Log: ", err); + auditTrailId = data._id; + task.execute(user, hostProtocol, choiceParam, appData, blueprintIds, task.envId, auditTrailId, function (err, taskRes, historyData) { + if (err) { + if (auditTrailId !== null) { + var resultTaskExecution = { + "actionStatus": 'failed', + "status": "failed", + "endedOn": new Date().getTime(), + "actionLogId": historyData.nodeIdsWithActionLog[0].actionLogId, + "auditTrailConfig.nodeIdsWithActionLog": historyData.nodeIdsWithActionLog + }; + auditTrailService.updateAuditTrail('BOTs', auditTrailId, resultTaskExecution, function (err, auditTrail) { + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); } - }); + var error = new Error('Failed to execute task.'); + error.status = 500; + return callback(error, null); + } + if (historyData) { + taskRes.historyId = historyData.id; + } + callback(null, taskRes); + return; + }); + }); + }else{ + task.execute(user, hostProtocol, choiceParam, appData, blueprintIds, task.envId,auditTrailId,function(err, taskRes, historyData) { + if (err) { + if(auditTrailId !== null) { + var resultTaskExecution = { + "actionStatus": 'failed', + "status": "failed", + "endedOn": new Date().getTime(), + "actionLogId": historyData.nodeIdsWithActionLog[0].actionLogId, + "auditTrailConfig.nodeIdsWithActionLog": historyData.nodeIdsWithActionLog + }; + auditTrailService.updateAuditTrail('BOTs', auditTrailId, resultTaskExecution, function (err, auditTrail) { + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } + var error = new Error('Failed to execute task.'); + error.status = 500; + return callback(error, null); } - var error = new Error('Failed to execute task.'); - error.status = 500; - return callback(error, null); - } - if (historyData) { - taskRes.historyId = historyData.id; - if(auditTrailId !== null) { - var resultTaskExecution = { - "actionStatus": historyData.lastTaskStatus, - "status": historyData.lastTaskStatus, - "endedOn": historyData.timestampEnded, - "actionLogId": historyData.nodeIdsWithActionLog[0].actionLogId, - "auditTrailConfig.nodeIdsWithActionLog": historyData.nodeIdsWithActionLog - }; - auditTrailService.updateAuditTrail('BOTs', auditTrailId, resultTaskExecution, function (err, auditTrail) { - if (err) { - logger.error("Failed to create or update bot Log: ", err); - } - }); + if (historyData) { + taskRes.historyId = historyData.id; } - } - callback(null, taskRes); - return; - }); + callback(null, taskRes); + return; + }); + } + } else { var error1 = new Error('Task Not Found.'); error1.status = 404; From c2099ba6e8f29225863d8d29efa97669d29d5e6d Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Tue, 22 Nov 2016 14:59:30 +0530 Subject: [PATCH 6/8] BOTs Audit Trail Implementation --- server/app/services/auditTrailService.js | 38 ------------------------ 1 file changed, 38 deletions(-) diff --git a/server/app/services/auditTrailService.js b/server/app/services/auditTrailService.js index c45d58a2a..2d798b628 100644 --- a/server/app/services/auditTrailService.js +++ b/server/app/services/auditTrailService.js @@ -91,44 +91,6 @@ auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,audi } } -auditTrailService.saveAndUpdateAuditTrail = function saveAndUpdateAuditTrail(auditTrailDetails,callback){ - if(auditTrailDetails.auditType === 'BOTs'){ - botAuditTrail.createNew(auditTrailDetails,function(err,data){ - if(err){ - logger.error(err); - callback(err,null); - return; - } - callback(null,data); - return; - }) - }else if(auditTrailDetails.auditType === 'Instances'){ - instanceAuditTrail.createNew(auditTrailDetails,function(err,data){ - if(err){ - logger.error(err); - callback(err,null); - return; - } - callback(null,data); - return; - }) - }else if(auditTrailDetails.auditType === 'Containers'){ - containerAuditTrail.createNew(auditTrailDetails,function(err,data){ - if(err){ - logger.error(err); - callback(err,null); - return; - } - callback(null,data); - return; - }) - }else{ - callback({ - message: "Invalid Audit Trail Type. " - }, null); - } -} - auditTrailService.updateAuditTrail = function updateAuditTrail(auditType,auditId,auditObj,callback) { if(auditType === 'BOTs'){ botAuditTrail.updateBotAuditTrail(auditId,auditObj,function(err,data){ From 7f6d64313a3ff91e811a018eafc5525f87496950 Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Tue, 22 Nov 2016 16:00:22 +0530 Subject: [PATCH 7/8] BOTs Audit Trail Implementation --- .../aws-blueprint/aws-blueprint.js | 112 ++++++++++++--- .../azure-blueprint/azure-blueprint.js | 66 +++++++-- .../openstack-blueprint.js | 67 +++++++-- .../vmware-blueprint/vmware-blueprint.js | 79 +++++++++-- server/app/model/blueprint/blueprint.js | 2 + server/app/model/classes/tasks/tasks.js | 3 - server/app/routes/v1.0/routes_blueprints.js | 130 ++++++++---------- 7 files changed, 336 insertions(+), 123 deletions(-) diff --git a/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js b/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js index d4ce2e52a..3873bcdf4 100755 --- a/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js +++ b/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js @@ -37,6 +37,7 @@ var masterUtil = require('_pr/lib/utils/masterUtil.js'); var instanceLogModel = require('_pr/model/log-trail/instanceLog.js'); var Schema = mongoose.Schema; var resourceService = require('_pr/services/resourceService'); +var auditTrailService = require('_pr/services/auditTrailService'); var AWSInstanceBlueprintSchema = new Schema({ keyPairId: { @@ -284,18 +285,30 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { var timestampStarted = new Date().getTime(); var actionLog = instancesDao.insertBootstrapActionLog(instance.id, instance.runlist, launchParams.sessionUser, timestampStarted); var logsReferenceIds = [instance.id, actionLog._id]; + + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + "actionLogId":logsReferenceIds[1], + "auditTrailConfig.nodeIdsWithActionLog":[{ + "actionLogId" : logsReferenceIds[1], + "nodeId" : logsReferenceIds[0] + }], + "auditTrailConfig.nodeIds":[logsReferenceIds[0]], + "masterDetails.orgName":launchParams.orgName, + "masterDetails.bgName":launchParams.bgName, + "masterDetails.projectName":launchParams.projectName, + "masterDetails.envName":launchParams.envName + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } if (newinstanceIDs.length >= instancesLength) { callback(null, { "id": newinstanceIDs, - "message": "instance launch success", - "instanceId":logsReferenceIds[0], - "actionLogId":logsReferenceIds[1], - "endedOn":new Date().getTime(), - "actionStatus":"success", - "orgName":launchParams.orgName, - "bgName":launchParams.bgName, - "projectName":launchParams.projectName, - "envName":launchParams.envName + "message": "instance launch success" }); } var instanceLog = { @@ -354,7 +367,18 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { logger.error("Failed to create or update instanceLog: ", err); } }); - + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } logsDao.insertLog({ referenceId: logsReferenceIds, err: true, @@ -415,6 +439,19 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { } }); + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } + logsDao.insertLog({ referenceId: logsReferenceIds, err: true, @@ -455,6 +492,19 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { } }); + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } + var timestampEnded = new Date().getTime(); logsDao.insertLog({ referenceId: logsReferenceIds, @@ -476,8 +526,6 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { } else if (launchParams.blueprintData.docker.image) { repoData['repoName'] = launchParams.blueprintData.docker.image; } - - launchParams.blueprintData.getCookBookAttributes(instance, repoData, function(err, jsonAttributes) { logger.debug("jsonAttributes::::: ", JSON.stringify(jsonAttributes)); var runlist = instance.runlist; @@ -498,8 +546,6 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { jsonAttributes: jsonAttributes, instancePassword: decryptedCredentials.password }; - - launchParams.infraManager.bootstrapInstance(bootstrapInstanceParams, function(err, code) { if (decryptedCredentials.pemFileLocation) { @@ -511,8 +557,6 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { } }); } - - logger.error('process stopped ==> ', err, code); if (err) { instanceLog.endedOn = new Date().getTime(); @@ -527,6 +571,18 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { logger.error("Failed to create or update instanceLog: ", err); } }); + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } logger.error("knife launch err ==>", err); instancesDao.updateInstanceBootstrapStatus(instance.id, 'failed', function(err, updateData) { @@ -557,6 +613,18 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { log: "Instance Bootstrapped successfully", timestamp: new Date().getTime() }; + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "success", + status:"success", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } instanceLogModel.createOrUpdate(actionLog._id, instance.id, instanceLog, function(err, logData) { if (err) { logger.error("Failed to create or update instanceLog: ", err); @@ -652,6 +720,18 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { logger.error("Failed to create or update instanceLog: ", err); } }); + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } var timestampEnded = new Date().getTime(); logsDao.insertLog({ referenceId: logsReferenceIds, diff --git a/server/app/model/blueprint/blueprint-types/instance-blueprint/azure-blueprint/azure-blueprint.js b/server/app/model/blueprint/blueprint-types/instance-blueprint/azure-blueprint/azure-blueprint.js index bc09f02b8..4588aee93 100755 --- a/server/app/model/blueprint/blueprint-types/instance-blueprint/azure-blueprint/azure-blueprint.js +++ b/server/app/model/blueprint/blueprint-types/instance-blueprint/azure-blueprint/azure-blueprint.js @@ -36,6 +36,7 @@ var azureProvider = require('_pr/model/classes/masters/cloudprovider/azureCloudP var VMImage = require('_pr/model/classes/masters/vmImage.js'); var fs = require('fs'); var instanceLogModel = require('_pr/model/log-trail/instanceLog.js'); +var auditTrailService = require('_pr/services/auditTrailService'); var Schema = mongoose.Schema; @@ -384,18 +385,29 @@ azureInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { if (azureinstid.length >= parseInt(self.instanceCount)) { callback(null, { "id": azureinstid, - "message": "instance launch success", - "instanceId":data._id, - "actionLogId":actionLog._id, - "endedOn":new Date().getTime(), - "actionStatus":"success", - "orgName":launchParams.orgName, - "bgName":launchParams.bgName, - "projectName":launchParams.projectName, - "envName":launchParams.envName + "message": "instance launch success" }); logger.debug('Should have sent the response.'); } + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + "actionLogId":logsReferenceIds[1], + "auditTrailConfig.nodeIdsWithActionLog":[{ + "actionLogId" : logsReferenceIds[1], + "nodeId" : logsReferenceIds[0] + }], + "auditTrailConfig.nodeIds":[logsReferenceIds[0]], + "masterDetails.orgName":launchParams.orgName, + "masterDetails.bgName":launchParams.bgName, + "masterDetails.projectName":launchParams.projectName, + "masterDetails.envName":launchParams.envName + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } azureCloud.waitforserverready(launchparamsazure.VMName, launchparamsazure.username, launchparamsazure.password, function(err, publicip) { @@ -513,6 +525,18 @@ azureInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { logger.error("Failed to create or update instanceLog: ", err); } }); + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } return; } @@ -542,6 +566,18 @@ azureInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { log: "Instance Bootstraped successfully", timestamp: new Date().getTime() }; + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "success", + status:"success", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } instanceLogModel.createOrUpdate(actionLog._id, instance.id, instanceLog, function(err, logData) { if (err) { logger.error("Failed to create or update instanceLog: ", err); @@ -606,6 +642,18 @@ azureInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { log: "Bootstrap Failed", timestamp: new Date().getTime() }; + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } instanceLogModel.createOrUpdate(actionLog._id, instance.id, instanceLog, function(err, logData) { if (err) { logger.error("Failed to create or update instanceLog: ", err); diff --git a/server/app/model/blueprint/blueprint-types/instance-blueprint/openstack-blueprint/openstack-blueprint.js b/server/app/model/blueprint/blueprint-types/instance-blueprint/openstack-blueprint/openstack-blueprint.js index 011980c17..9d6878f7c 100755 --- a/server/app/model/blueprint/blueprint-types/instance-blueprint/openstack-blueprint/openstack-blueprint.js +++ b/server/app/model/blueprint/blueprint-types/instance-blueprint/openstack-blueprint/openstack-blueprint.js @@ -36,6 +36,7 @@ var openstackProvider = require('_pr/model/classes/masters/cloudprovider/opensta var Hppubliccloud = require('_pr/lib/hppubliccloud.js'); var hppubliccloudProvider = require('_pr/model/classes/masters/cloudprovider/hppublicCloudProvider.js'); var instanceLogModel = require('_pr/model/log-trail/instanceLog.js'); +var auditTrailService = require('_pr/services/auditTrailService'); var fs = require('fs'); @@ -284,7 +285,25 @@ openstackInstanceBlueprintSchema.methods.launch = function(launchParams, callbac log: "Waiting for instance ok state", timestamp: timestampStarted }); - + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + "actionLogId":logsReferenceIds[1], + "auditTrailConfig.nodeIdsWithActionLog":[{ + "actionLogId" : logsReferenceIds[1], + "nodeId" : logsReferenceIds[0] + }], + "auditTrailConfig.nodeIds":[logsReferenceIds[0]], + "masterDetails.orgName":launchParams.orgName, + "masterDetails.bgName":launchParams.bgName, + "masterDetails.projectName":launchParams.projectName, + "masterDetails.envName":launchParams.envName + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } var instanceLog = { actionId: actionLog._id, instanceId: instance.id, @@ -327,15 +346,7 @@ openstackInstanceBlueprintSchema.methods.launch = function(launchParams, callbac callback(null, { "id": [instance.id], - "message": "instance launch success", - "instanceId":data._id, - "actionLogId":actionLog._id, - "endedOn":new Date().getTime(), - "actionStatus":"success", - "orgName":launchParams.orgName, - "bgName":launchParams.bgName, - "projectName":launchParams.projectName, - "envName":launchParams.envName + "message": "instance launch success" }); logger.debug('Should have sent the response & Entering wait state for instance ready:', JSON.stringify(instanceData)); var cryptoConfig = appConfig.cryptoSettings; @@ -469,6 +480,18 @@ openstackInstanceBlueprintSchema.methods.launch = function(launchParams, callbac log: "Bootstrap failed", timestamp: new Date().getTime() }; + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } instanceLogModel.createOrUpdate(actionLog._id, instance.id, instanceLog, function(err, logData) { if (err) { logger.error("Failed to create or update instanceLog: ", err); @@ -493,6 +516,18 @@ openstackInstanceBlueprintSchema.methods.launch = function(launchParams, callbac log: "Instance Bootstraped successfully", timestamp: timestampEnded }); + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "success", + status:"success", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } instancesDao.updateActionLog(instance.id, actionLog._id, true, timestampEnded); instanceLog.endedOn = new Date().getTime(); instanceLog.actionStatus = "success"; @@ -556,6 +591,18 @@ openstackInstanceBlueprintSchema.methods.launch = function(launchParams, callbac log: "Bootstrap Failed", timestamp: timestampEnded }); + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } instancesDao.updateActionLog(instance.id, actionLog._id, false, timestampEnded); instanceLog.endedOn = new Date().getTime(); instanceLog.actionStatus = "failed"; diff --git a/server/app/model/blueprint/blueprint-types/instance-blueprint/vmware-blueprint/vmware-blueprint.js b/server/app/model/blueprint/blueprint-types/instance-blueprint/vmware-blueprint/vmware-blueprint.js index 5b5ffabf4..242966f74 100755 --- a/server/app/model/blueprint/blueprint-types/instance-blueprint/vmware-blueprint/vmware-blueprint.js +++ b/server/app/model/blueprint/blueprint-types/instance-blueprint/vmware-blueprint/vmware-blueprint.js @@ -37,6 +37,7 @@ var VmwareCloud = require('_pr/lib/vmware.js'); var vmwareProvider = require('_pr/model/classes/masters/cloudprovider/vmwareCloudProvider.js'); var fs = require('fs'); var instanceLogModel = require('_pr/model/log-trail/instanceLog.js'); +var auditTrailService = require('_pr/services/auditTrailService'); var Schema = mongoose.Schema; @@ -275,7 +276,25 @@ vmwareInstanceBlueprintSchema.methods.launch = function(launchParams, callback) log: "Waiting for instance ok state", timestamp: timestampStarted }); - + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + "actionLogId":logsReferenceIds[1], + "auditTrailConfig.nodeIdsWithActionLog":[{ + "actionLogId" : logsReferenceIds[1], + "nodeId" : logsReferenceIds[0] + }], + "auditTrailConfig.nodeIds":[logsReferenceIds[0]], + "masterDetails.orgName":launchParams.orgName, + "masterDetails.bgName":launchParams.bgName, + "masterDetails.projectName":launchParams.projectName, + "masterDetails.envName":launchParams.envName + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } var instanceLog = { actionId: actionLog._id, instanceId: instance.id, @@ -318,15 +337,7 @@ vmwareInstanceBlueprintSchema.methods.launch = function(launchParams, callback) //res.send(200); callback(null, { "id": [instance.id], - "message": "instance launch success", - "instanceId":data._id, - "actionLogId":actionLog._id, - "endedOn":new Date().getTime(), - "actionStatus":"success", - "orgName":launchParams.orgName, - "bgName":launchParams.bgName, - "projectName":launchParams.projectName, - "envName":launchParams.envName + "message": "instance launch success" }); logger.debug('Should have sent the response.'); vmwareCloud.waitforserverready(appConfig.vmware.serviceHost, createserverdata["vm_name"], anImage.userName, anImage.instancePassword, function(err, publicip, vmdata) { @@ -354,6 +365,18 @@ vmwareInstanceBlueprintSchema.methods.launch = function(launchParams, callback) log: "Instance not responding. Bootstrap failed", timestamp: new Date().getTime() }; + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } instanceLogModel.createOrUpdate(actionLog._id, instance.id, instanceLog, function(err, logData) { if (err) { logger.error("Failed to create or update instanceLog: ", err); @@ -446,6 +469,18 @@ vmwareInstanceBlueprintSchema.methods.launch = function(launchParams, callback) log: 'Bootstrap failed', timestamp: timestampEnded }); + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } instancesDao.updateActionLog(instance.id, actionLog._id, false, timestampEnded); instanceLog.endedOn = new Date().getTime(); instanceLog.actionStatus = "failed"; @@ -540,6 +575,18 @@ vmwareInstanceBlueprintSchema.methods.launch = function(launchParams, callback) log: "Instance Bootstraped Successfully.", timestamp: new Date().getTime() }; + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "success", + status:"success", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } instanceLogModel.createOrUpdate(actionLog._id, instance.id, instanceLog, function(err, logData) { if (err) { logger.error("Failed to create or update instanceLog: ", err); @@ -563,6 +610,18 @@ vmwareInstanceBlueprintSchema.methods.launch = function(launchParams, callback) log: 'Bootstrap failed', timestamp: timestampEnded }); + if(launchParams.auditTrailId !== null){ + var resultTaskExecution={ + actionStatus : "failed", + status:"failed", + endedOn : new Date().getTime() + } + auditTrailService.updateAuditTrail('BOTs',launchParams.auditTrailId,resultTaskExecution,function(err,auditTrail){ + if (err) { + logger.error("Failed to create or update bot Log: ", err); + } + }); + } instancesDao.updateActionLog(instance.id, actionLog._id, false, timestampEnded); instanceLog.endedOn = new Date().getTime(); instanceLog.actionStatus = "failed"; diff --git a/server/app/model/blueprint/blueprint.js b/server/app/model/blueprint/blueprint.js index 65c247a63..b63b73305 100755 --- a/server/app/model/blueprint/blueprint.js +++ b/server/app/model/blueprint/blueprint.js @@ -346,6 +346,7 @@ BlueprintSchema.methods.launch = function(opts, callback) { users: self.users, blueprintData: self, tagServer: opts.tagServer, + auditTrailId:opts.auditTrailId }, function(err, launchData) { if(err){ err['errObj'] = { @@ -381,6 +382,7 @@ BlueprintSchema.methods.launch = function(opts, callback) { users: self.users, blueprintData: self, tagServer: opts.tagServer, + auditTrailId:opts.auditTrailId }, function(err, launchData) { if(err){ err['errObj'] = { diff --git a/server/app/model/classes/tasks/tasks.js b/server/app/model/classes/tasks/tasks.js index 378b66234..01ee73ee0 100755 --- a/server/app/model/classes/tasks/tasks.js +++ b/server/app/model/classes/tasks/tasks.js @@ -305,9 +305,6 @@ taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, b "actionLogId":taskHistory.nodeIdsWithActionLog[0].actionLogId, "auditTrailConfig.nodeIdsWithActionLog":taskHistory.nodeIdsWithActionLog }; - console.log(">>>>>>>>>>>>>>"+JSON.stringify(resultTaskExecution)); - console.log(">>>>>>>>>>>>>>"+auditTrailId); - console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); if (resultData) { if (resultData.instancesResults && resultData.instancesResults.length) { taskHistory.executionResults = resultData.instancesResults; diff --git a/server/app/routes/v1.0/routes_blueprints.js b/server/app/routes/v1.0/routes_blueprints.js index e52e08b00..7a00fafb9 100755 --- a/server/app/routes/v1.0/routes_blueprints.js +++ b/server/app/routes/v1.0/routes_blueprints.js @@ -388,31 +388,6 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { }); return; } - var auditTrailId = null; - if(blueprint.serviceDeliveryCheck === true){ - var actionObj={ - auditType:'BOTs', - auditCategory:'Blueprint', - status:'running', - action:'BOTs Blueprint Execution', - actionStatus:'running', - catUser:req.session.user.cn - }; - var auditTrailObj = { - name:blueprint.name, - type:blueprint.botType, - description:blueprint.shortDesc, - category:blueprint.botCategory, - executionType:blueprint.blueprintType, - nodeIdsWithActionLog:[] - }; - auditTrailService.insertAuditTrail(blueprint,auditTrailObj,actionObj,function(err,data){ - if(err){ - logger.error(err); - } - auditTrailId=data._id; - }); - } var stackName = null; var domainName = null; if (blueprint.blueprintType === 'aws_cf' || blueprint.blueprintType === 'azure_arm') { @@ -433,60 +408,65 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { return; } } - blueprint.launch({ - envId: req.query.envId, - ver: req.query.version, - stackName: stackName, - domainName:domainName, - sessionUser: req.session.user.cn, - tagServer: req.query.tagServer - }, function(err, launchData) { - if (err) { - if(auditTrailId !== null){ - var resultBlueprintExecution = { - "endedOn":err.errObj.endedOn, - "actionStatus":'failed', - "status":'failed', - "masterDetails.orgName":err.errObj.orgName, - "masterDetails.bgName":err.errObj.bgName, - "masterDetails.projectName":err.errObj.projectName, - "masterDetails.envName":err.errObj.envName - } - auditTrailService.updateAuditTrail('BOTs',auditTrailId,resultBlueprintExecution,function(err,auditTrail){ - if (err) { - logger.error("Failed to create or update bot Log: ", err); - } - }); + if(blueprint.serviceDeliveryCheck === true){ + var actionObj={ + auditType:'BOTs', + auditCategory:'Blueprint', + status:'running', + action:'BOTs Blueprint Execution', + actionStatus:'running', + catUser:req.session.user.cn + }; + var auditTrailObj = { + name:blueprint.name, + type:blueprint.botType, + description:blueprint.shortDesc, + category:blueprint.botCategory, + executionType:blueprint.blueprintType, + nodeIdsWithActionLog:[] + }; + blueprint.envId= req.query.envId; + auditTrailService.insertAuditTrail(blueprint,auditTrailObj,actionObj,function(err,data){ + if(err){ + logger.error(err); } - res.status(500).send({ - message: "Server Behaved Unexpectedly" - }); - return; - } - var resultBlueprintExecution = { - "endedOn":launchData.endedOn, - "actionStatus":launchData.actionStatus, - "status":launchData.actionStatus, - "actionLogId":launchData.actionLogId, - "auditTrailConfig.nodeIdsWithActionLog":[{ - "actionLogId" : launchData.actionLogId, - "nodeId" : launchData.instanceId - }], - "auditTrailConfig.nodeIds":[launchData.instanceId], - "masterDetails.orgName":launchData.orgName, - "masterDetails.bgName":launchData.bgName, - "masterDetails.projectName":launchData.projectName, - "masterDetails.envName":launchData.envName - } - if(auditTrailId !== null){ - auditTrailService.updateAuditTrail('BOTs',auditTrailId,resultBlueprintExecution,function(err,auditTrail){ + blueprint.launch({ + envId: req.query.envId, + ver: req.query.version, + stackName: stackName, + domainName: domainName, + sessionUser: req.session.user.cn, + tagServer: req.query.tagServer, + auditTrailId: data._id + }, function (err, launchData) { if (err) { - logger.error("Failed to create or update bot Log: ", err); + res.status(500).send({ + message: "Server Behaved Unexpectedly" + }); + return; } + res.status(200).send(launchData) }); - } - res.status(200).send(launchData) - }); + }); + }else{ + blueprint.launch({ + envId: req.query.envId, + ver: req.query.version, + stackName: stackName, + domainName: domainName, + sessionUser: req.session.user.cn, + tagServer: req.query.tagServer, + auditTrailId: null + }, function (err, launchData) { + if (err) { + res.status(500).send({ + message: "Server Behaved Unexpectedly" + }); + return; + } + res.status(200).send(launchData) + }); + } }); } } else { From 94b5b78ec3d0e3733072c2ba6a15925cf0d6e342 Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Tue, 22 Nov 2016 16:41:50 +0530 Subject: [PATCH 8/8] Resolved merge conflicts --- .../sections/dashboard/bots/view/library.html | 201 +++++++++--------- 1 file changed, 101 insertions(+), 100 deletions(-) diff --git a/client/cat3/src/partials/sections/dashboard/bots/view/library.html b/client/cat3/src/partials/sections/dashboard/bots/view/library.html index df8470d29..f5da99dce 100644 --- a/client/cat3/src/partials/sections/dashboard/bots/view/library.html +++ b/client/cat3/src/partials/sections/dashboard/bots/view/library.html @@ -2,62 +2,63 @@
-
-
-

{{botSummary.totalNoOfBots}}

-

Total
Number of BOTs

-
-
- -
+
+
+

{{botSummary.totalNoOfBots}}

+

Total
Number of BOTs

+
+
+ +
-
-
-
-
-
-

{{botSummary.totalNoOfSuccessBots}}

-

Total
Number of BOTs running

-
-
- -
+
+
+
+
+
+

{{botSummary.totalNoOfSuccessBots}}

+

Total
Number of BOTs running

+
+
+ +
-
-
-
-
-
-

{{botSummary.totalSavedTimeForBots}} mins

-

Total
Time saved

-
-
- -
+
+
+
+
+
+

{{botSummary.totalSavedTimeForBots}} mins

+

Total
Time saved

+
+
+ +
-
-
-
-
-
-

{{botSummary.totalNoOfFailedBots}}

-

Total
Number of failed runs

-
-
- -
+
+
+
+
+
+

{{botSummary.totalNoOfFailedBots}}

+

Total
Number of failed runs

+
+
+ +
-
-
+
+
+
- No data Available + No data Available
@@ -68,7 +69,7 @@

{{botSummary.totalNoOfFailedBots}}

.summary-container { width: 100%; - margin: 15px 0; + margin: 15px 0; } .panel-heading { @@ -76,91 +77,91 @@

{{botSummary.totalNoOfFailedBots}}

} .col-md-4ths { - width: 25%; - float: left; + width: 25%; + float: left; } .col-md-4ths { - position: relative; - min-height: 1px; - padding-right: 10px; - padding-left: 10px; - color: #fff; + position: relative; + min-height: 1px; + padding-right: 10px; + padding-left: 10px; + color: #fff; } .small-box { - border-radius: 2px; - position: relative; - display: block; - /* margin-bottom: 2px; */ - margin-bottom: 15px; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 2px; + position: relative; + display: block; + /* margin-bottom: 2px; */ + margin-bottom: 15px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); } .bg-aqua { - background-color: #00c0ef !important; + background-color: #00c0ef !important; } .small-box .icon { - -webkit-transition: all 0.3s linear; - -o-transition: all 0.3s linear; - transition: all 0.3s linear; - position: absolute; - /* top: -10px; */ - top: 10px; - right: 10px; - z-index: 0; - font-size: 90px; - color: rgba(0, 0, 0, 0.15); + -webkit-transition: all 0.3s linear; + -o-transition: all 0.3s linear; + transition: all 0.3s linear; + position: absolute; + /* top: -10px; */ + top: 10px; + right: 10px; + z-index: 0; + font-size: 90px; + color: rgba(0, 0, 0, 0.15); } .small-box h3 { - font-size: 38px; - font-weight: bold; - margin: 0 0 10px 0; - white-space: nowrap; - padding: 0; - text-align: left; + font-size: 38px; + font-weight: bold; + margin: 0 0 10px 0; + white-space: nowrap; + padding: 0; + text-align: left; } .small-box p { - font-size: 13px; - text-align: left; + font-size: 13px; + text-align: left; } .small-box > .inner { - padding: 10px; + padding: 10px; } .small-box > .small-box-footer { - position: relative; - text-align: center; - padding: 3px 0; - color: #fff; - color: rgba(255, 255, 255, 0.8); - display: block; - z-index: 10; - background: rgba(0, 0, 0, 0.1); - text-decoration: none; - cursor: pointer; - height: 27px; + position: relative; + text-align: center; + padding: 3px 0; + color: #fff; + color: rgba(255, 255, 255, 0.8); + display: block; + z-index: 10; + background: rgba(0, 0, 0, 0.1); + text-decoration: none; + cursor: pointer; + height: 27px; } .small-box .icon { - -webkit-transition: all 0.3s linear; - -o-transition: all 0.3s linear; - transition: all 0.3s linear; - position: absolute; - /* top: -10px; */ - top: 10px; - right: 10px; - z-index: 0; - font-size: 90px; - color: rgba(0, 0, 0, 0.15); + -webkit-transition: all 0.3s linear; + -o-transition: all 0.3s linear; + transition: all 0.3s linear; + position: absolute; + /* top: -10px; */ + top: 10px; + right: 10px; + z-index: 0; + font-size: 90px; + color: rgba(0, 0, 0, 0.15); } .small-box .icon { - color: rgba(0, 0, 0, 0.15) !important; + color: rgba(0, 0, 0, 0.15) !important; } \ No newline at end of file