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 88656ee6b..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,63 +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/60}} 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
@@ -69,7 +69,7 @@

{{botSummary.totalNoOfFailedBots}}

.summary-container { width: 100%; - margin: 15px 0; + margin: 15px 0; } .panel-heading { @@ -77,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 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/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 0826b6374..3604a68d7 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:{ diff --git a/server/app/model/audit-trail/container-audit-trail.js b/server/app/model/audit-trail/container-audit-trail.js index ffcab64b6..f4ec36137 100644 --- a/server/app/model/audit-trail/container-audit-trail.js +++ b/server/app/model/audit-trail/container-audit-trail.js @@ -16,14 +16,13 @@ var ContainerAuditTrailSchema = new BaseAuditTrail({ }, name: { type: String, - unique: true, trim:true }, - Image:{ + image:{ type: String, trim:true }, - ImageId:{ + imageId:{ type: String, trim:true }, 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/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..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,14 +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":data._id, - "actionLogId":actionLog._id, - "endedOn":new Date().getTime(), - "actionStatus":"success" + "message": "instance launch success" }); } var instanceLog = { @@ -350,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, @@ -411,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, @@ -451,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, @@ -472,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; @@ -494,8 +546,6 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { jsonAttributes: jsonAttributes, instancePassword: decryptedCredentials.password }; - - launchParams.infraManager.bootstrapInstance(bootstrapInstanceParams, function(err, code) { if (decryptedCredentials.pemFileLocation) { @@ -507,8 +557,6 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { } }); } - - logger.error('process stopped ==> ', err, code); if (err) { instanceLog.endedOn = new Date().getTime(); @@ -523,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) { @@ -553,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); @@ -648,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 3b56d2414..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; @@ -388,6 +389,25 @@ azureInstanceBlueprintSchema.methods.launch = function(launchParams, callback) { }); 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) { @@ -505,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; } @@ -534,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); @@ -598,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 65b26083a..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, @@ -461,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); @@ -485,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"; @@ -548,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 969017ab2..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, @@ -346,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); @@ -438,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"; @@ -532,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); @@ -555,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 b471a4026..b63b73305 100755 --- a/server/app/model/blueprint/blueprint.js +++ b/server/app/model/blueprint/blueprint.js @@ -346,8 +346,20 @@ BlueprintSchema.methods.launch = function(opts, callback) { users: self.users, blueprintData: self, tagServer: opts.tagServer, + auditTrailId:opts.auditTrailId }, function(err, launchData) { - callback(err, launchData); + if(err){ + err['errObj'] = { + endedOn:new Date().getTime(), + orgName:project[0].orgname, + bgName:project[0].productgroupname, + projectName:project[0].projectname, + envName:envName + }; + callback(err,null); + return; + } + callback(null, launchData); }); }); } else { @@ -370,8 +382,20 @@ BlueprintSchema.methods.launch = function(opts, callback) { users: self.users, blueprintData: self, tagServer: opts.tagServer, + auditTrailId:opts.auditTrailId }, function(err, launchData) { - callback(err, launchData); + if(err){ + err['errObj'] = { + endedOn:new Date().getTime(), + 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/model/classes/tasks/tasks.js b/server/app/model/classes/tasks/tasks.js index 614aa79ed..01ee73ee0 100755 --- a/server/app/model/classes/tasks/tasks.js +++ b/server/app/model/classes/tasks/tasks.js @@ -138,42 +138,10 @@ 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; - 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 +198,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); @@ -346,7 +305,6 @@ taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, b "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,7 +314,7 @@ taskSchema.methods.execute = function(userName, baseUrl, choiceParam, appData, b } } - if(self.serviceDeliveryCheck === true){ + if(auditTrailId !== null){ auditTrailService.updateAuditTrail('BOTs',auditTrailId,resultTaskExecution,function(err,auditTrail){ if (err) { logger.error("Failed to create or update bot Log: ", err); diff --git a/server/app/routes/v1.0/routes_blueprints.js b/server/app/routes/v1.0/routes_blueprints.js index 4ea70b5f6..7a00fafb9 100755 --- a/server/app/routes/v1.0/routes_blueprints.js +++ b/server/app/routes/v1.0/routes_blueprints.js @@ -388,37 +388,6 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { }); return; } - var botAuditDetails = null; - if(blueprint.serviceDeliveryCheck === true){ - var botAuditDetails={ - auditId:blueprint._id, - 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:{ - name:blueprint.name, - type:blueprint.botType, - description:blueprint.shortDesc, - category:blueprint.botCategory, - executionType:blueprint.blueprintType, - nodeIdsWithActionLog:[] - }, - user:userName, - startedOn:new Date().getTime(), - status:'running', - action:'BOTs Blueprint Execution', - actionStatus:'running' - } - } var stackName = null; var domainName = null; if (blueprint.blueprintType === 'aws_cf' || blueprint.blueprintType === 'azure_arm') { @@ -439,61 +408,65 @@ 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, - stackName: stackName, - domainName:domainName, - sessionUser: req.session.user.cn, - tagServer: req.query.tagServer - }, function(err, launchData) { - if (err) { - if(blueprint.serviceDeliveryCheck === true){ - var resultBlueprintExecution = { - endedOn:new Date().getTime(), - actionStatus:'failed', - status:'failed' - } - 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":new Date().getTime(), - "actionStatus":launchData.actionStatus, - "status":launchData.actionStatus, - "actionLogId":launchData.actionLogId, - "auditTrailConfig.nodeIdsWithActionLog":[{ - "actionLogId" : launchData.actionLogId, - "nodeId" : launchData.instanceId - }], - "nodeIds":[launchData.instanceId] - } - if(blueprint.serviceDeliveryCheck === true){ - 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 { diff --git a/server/app/services/auditTrailService.js b/server/app/services/auditTrailService.js index f938bb2bf..7776cd98d 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:{ @@ -43,28 +42,17 @@ auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,acti 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, 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); @@ -115,44 +91,6 @@ auditTrailService.insertAuditTrail = function insertAuditTrail(auditDetails,acti } } -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){ @@ -282,7 +220,7 @@ auditTrailService.getBOTsSummary = function getBOTsSummary(callback){ })(botAuditTrail[i]); } if(count === botAuditTrail.length){ - callback(null,totalTimeInSeconds); + callback(null,(totalTimeInSeconds/60).toFixed(2)); } } else{ callback(null,botAuditTrail.length); diff --git a/server/app/services/taskService.js b/server/app/services/taskService.js index 7e41d9d8d..1e7abc88d 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,18 +67,86 @@ taskService.executeTask = function executeTask(taskId, user, hostProtocol, choic } task.botParams = paramOptions; task.botTagServer = botTagServer; - task.execute(user, hostProtocol, choiceParam, appData, blueprintIds, task.envId, function(err, taskRes, historyData) { - if (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; - }); + 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, 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); + } + if (historyData) { + taskRes.historyId = historyData.id; + } + callback(null, taskRes); + return; + }); + } + } else { var error1 = new Error('Task Not Found.'); error1.status = 404;