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;