Skip to content

Commit de71356

Browse files
authored
Merge pull request #1717 from RohitRelevanceLab/topic-performance
C50-586 Backend: Botengine Diagnostics and Health
2 parents 3ca28d5 + f297f03 commit de71356

7 files changed

Lines changed: 261 additions & 4 deletions

File tree

server/app/app.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ catalystSync.executeScheduledBots();
248248
catalystSync.executeNewScheduledBots();
249249
catalystSync.getBotAuditLogData();
250250
botAuditTrailSummary.createCronJob();
251+
catalystSync.botengineHealth();
251252
server.listen(app.get('port'), function () {
252253
logger.debug('Express server listening on port ' + app.get('port'));
253254
require('_pr/services/noticeService.js').init(io,server.address());

server/app/cronjobs/catalyst-scheduler/catalystScheduler.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var taskDao = require('_pr/model/classes/tasks/tasks.js');
44
var botOld = require('_pr/model/bots/1.0/botOld.js');
55
var botDao = require('_pr/model/bots/1.1/bot.js');
66
var schedulerService = require('_pr/services/schedulerService');
7+
var botengineHealthService = require('_pr/services/botengineHealthService');
78
var async = require('async');
89
var cronTab = require('node-crontab');
910
var auditQueue = require('_pr/config/global-data.js');
@@ -216,6 +217,33 @@ catalystSync.executeNewScheduledBots = function executeNewScheduledBots() {
216217
});
217218
}
218219

220+
catalystSync.botengineHealth = function botengineHealth() {
221+
setInterval( function () {
222+
logger.info("inside catalyst scheduler");
223+
schedulerService.botengineHealth(function(err, data){
224+
if (err) {
225+
logger.error("Failed to sync: ", err);
226+
return;
227+
}else{
228+
console.logs("Sync started for scheduler");
229+
return data;
230+
}
231+
232+
});
233+
logger.info("inside botenginehealth");
234+
botengineHealthService.getTotalAvailability(function(err, data){
235+
if(err){
236+
logger.error("Failed to sync: ", err);
237+
return;
238+
}else{
239+
console.logs("Sync started for availability");
240+
return data;
241+
}
242+
243+
});
244+
},120000)
245+
}
246+
219247
catalystSync.getBotAuditLogData = function getBotAuditLogData(){
220248
logger.debug("Get Bot Audit log Data updating.....")
221249
var limitLogdisplay = 1;

server/app/model/d4dmasters/d4dmastersmodelnew.js

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1687,7 +1687,36 @@ var d4dMastersRemoteBotServer = new mongoose.Schema({
16871687
type: String,
16881688
required: true,
16891689
trim: true
1690-
}
1690+
},
1691+
createdAt: {
1692+
type: String,
1693+
required: true,
1694+
trim: true
1695+
},
1696+
updatedAt: {
1697+
type: String,
1698+
required: true,
1699+
trim: true
1700+
},
1701+
availability: {
1702+
type: Number,
1703+
default:0
1704+
},from_date:{
1705+
type: String,
1706+
required: true,
1707+
default:0
1708+
},
1709+
to_date:{
1710+
type: String,
1711+
required: true,
1712+
default:0
1713+
},
1714+
lastSync: {
1715+
type: Date,
1716+
required: true
1717+
},
1718+
},{
1719+
timestamps: true
16911720
}, {
16921721
collection: 'd4dmastersnew'
16931722
});

server/app/routes/v1.0/routes_audit_trails.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var instanceLogModel = require('_pr/model/log-trail/instanceLog.js');
2424
var containerLogModel = require('_pr/model/log-trail/containerLog.js');
2525
var apiUtil = require('_pr/lib/utils/apiUtil.js');
2626
var moment = require('moment');
27+
var schedulerService = require('_pr/services/schedulerService');
2728

2829
module.exports.setRoutes = function(app, sessionVerificationFunc) {
2930
app.all('/audit-trail*', sessionVerificationFunc);
@@ -33,6 +34,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) {
3334
//adding user to query
3435
req.query.user = req.session.user.cn;
3536
logger.info(req.query.user)
37+
console.log("....................",req.query.user,req.query);
3638
auditTrailService.getAuditTrail(req.query,function(err,auditTrailList){
3739
if(err){
3840
logger.error(err);
@@ -42,6 +44,18 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) {
4244
})
4345
});
4446

47+
app.get('/audit-trail/botengine-health', function(req,res){
48+
49+
// console.log("&&&&&&&&&&&&&&&",req.query.user,req.data);
50+
schedulerService.botengineHealth(req.data,function(err,healthData){
51+
if(err){
52+
logger.error(err);
53+
return res.status(500).send(err);
54+
}
55+
return res.status(200).send(healthData);
56+
})
57+
});
58+
4559
//API for getting the upper metric
4660

4761
app.get('/audit-trail/uppermetric', function(req,res){

server/app/routes/v1.0/routes_d4dMasters.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ var settingsService = require('_pr/services/settingsService');
4545
var organizationService = require('_pr/services/organizationService');
4646
var settingWizard = require('_pr/model/setting-wizard');
4747
var request = require('request');
48+
var schedulerService = require('_pr/services/schedulerService');
4849

4950

5051
module.exports.setRoutes = function (app, sessionVerification) {
@@ -875,6 +876,7 @@ module.exports.setRoutes = function (app, sessionVerification) {
875876
});
876877
} else if (req.params.id === '32') {
877878
// For BOTs Remote Server Detail
879+
console.log("botengine",req.body);
878880
masterUtil.getBotRemoteServerDetails(orgList, function(err, botRemoteServerList) {
879881
if (err) {
880882
res.status(500).send('Not able to fetch BOTs Remote Server Details');
@@ -3044,6 +3046,9 @@ module.exports.setRoutes = function (app, sessionVerification) {
30443046
if(err){
30453047
logger.error("Unable to connect remote server");
30463048
bodyJson["active"] =false;
3049+
bodyJson["lastSync"] =new Date().getTime();
3050+
bodyJson["availability"] =0;
3051+
bodyJson["from_date"] =new Date().getTime();
30473052
var remoteBotServerModel = new d4dModelNew.d4dModelMastersBOTsRemoteServer(bodyJson);
30483053
remoteBotServerModel.save(function (err, data) {
30493054
if (err) {
@@ -3057,6 +3062,8 @@ module.exports.setRoutes = function (app, sessionVerification) {
30573062
});
30583063
}else{
30593064
bodyJson["active"] =true;
3065+
bodyJson["lastSync"] =new Date().getTime();
3066+
bodyJson["availability"] =availability;
30603067
var remoteBotServerModel = new d4dModelNew.d4dModelMastersBOTsRemoteServer(bodyJson);
30613068
remoteBotServerModel.save(function (err, data) {
30623069
if (err) {
@@ -3434,7 +3441,8 @@ module.exports.setRoutes = function (app, sessionVerification) {
34343441
hostPort:bodyJson["hostPort"],
34353442
active:false,
34363443
name:bodyJson["name"],
3437-
osType:bodyJson["osType"]
3444+
osType:bodyJson["osType"],
3445+
lastSync:bodyJson["lastSync"]
34383446
};
34393447
d4dModelNew.d4dModelMastersBOTsRemoteServer.update({
34403448
rowid: bodyJson["rowid"],
@@ -3459,7 +3467,8 @@ module.exports.setRoutes = function (app, sessionVerification) {
34593467
hostIP:bodyJson["hostIP"],
34603468
hostPort:bodyJson["hostPort"],
34613469
active:true,
3462-
name:bodyJson["name"]
3470+
name:bodyJson["name"],
3471+
lastSync:bodyJson["lastSync"]
34633472
};
34643473
d4dModelNew.d4dModelMastersBOTsRemoteServer.update({
34653474
rowid: bodyJson["rowid"],
@@ -3488,7 +3497,8 @@ module.exports.setRoutes = function (app, sessionVerification) {
34883497
hostPort:bodyJson["hostPort"],
34893498
active:false,
34903499
name:bodyJson["name"],
3491-
osType:bodyJson["osType"]
3500+
osType:bodyJson["osType"],
3501+
lastSync:bodyJson["lastSync"]
34923502
};
34933503
d4dModelNew.d4dModelMastersBOTsRemoteServer.update({
34943504
rowid: bodyJson["rowid"],
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
var logger = require('_pr/logger')(module);
2+
var async = require("async");
3+
var crontab = require('node-crontab');
4+
var d4dModelNew = require('_pr/model/d4dmasters/d4dmastersmodelnew.js');
5+
var dateUtil = require('_pr/lib/utils/dateUtil')
6+
7+
8+
var botengineHealthService = module.exports = {};
9+
10+
var date = new Date();
11+
var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
12+
13+
botengineHealthService.getTotalAvailability = function getTotalAvailability(totalUnplannedOutageTime,callback) {
14+
15+
var availabilty = [];
16+
var available = [];
17+
var totalUnplannedOutageTime = [];
18+
var lastSync = [];
19+
var lastSync = new Date().getTime();
20+
var curr_time = new Date().getTime();
21+
var totalTime = [];
22+
23+
d4dModelNew.d4dModelMastersBOTsRemoteServer.find({
24+
25+
id: '32'
26+
}, function (err, remoteServerDetails) {
27+
if (err) {
28+
callback(err,null);
29+
return;
30+
}else{
31+
32+
if (remoteServerDetails) {
33+
for(var i=0;i<remoteServerDetails.length;i++){
34+
var lastSync = remoteServerDetails[i].lastSync;
35+
if (remoteServerDetails[i].createdAt < new Date(firstDay).getTime()) {
36+
totalTime[i] = (new Date().getTime() - new Date(firstDay).getTime());
37+
//totalTime[i] = (new Date(firstDay).getTime() - remoteServerDetails[i].lastSync);
38+
//console.log("total timeeeeeee",totalTime[i]);
39+
if(remoteServerDetails[i].active == false){
40+
41+
totalUnplannedOutageTime[i] = (new Date().getTime() - remoteServerDetails[i].from_date);
42+
availabilty[i]= ((Number(totalUnplannedOutageTime[i]) - totalTime[i]) / totalTime[i]) * 100;
43+
//console.log("unplanned outage.........",totalUnplannedOutageTime[i]);
44+
d4dModelNew.d4dModelMastersBOTsRemoteServer.update({
45+
id: '32',
46+
rowid: remoteServerDetails[i].rowid
47+
}, { $set: { availability: availabilty[i]} }, function (err, data) {
48+
if (err) {
49+
logger.error('Error in Updating State of Bot-Engine', err);
50+
}
51+
else{
52+
53+
// console.log("Botengine updated successfully")
54+
}
55+
});
56+
57+
58+
}else{
59+
totalUnplannedOutageTime[i] = 0;
60+
availabilty[i]= ((Number(totalUnplannedOutageTime[i]) - totalTime[i]) / totalTime[i]) * 100;
61+
d4dModelNew.d4dModelMastersBOTsRemoteServer.update({
62+
id: '32',
63+
rowid: remoteServerDetails[i].rowid
64+
}, { $set: { availability: availabilty[i]} }, function (err, data) {
65+
if (err) {
66+
logger.error('Error in Updating State of Bot-Engine', err);
67+
}
68+
else{
69+
70+
//console.log("Botengine updated successfully")
71+
}
72+
});
73+
}
74+
75+
}
76+
else {
77+
totalTime[i] = (new Date().getTime() - Number(remoteServerDetails[i].createdAt));
78+
//totalTime[i] = (new Date(firstDay).getTime() - remoteServerDetails[i].lastSync);
79+
if(remoteServerDetails[i].active == false){
80+
81+
totalUnplannedOutageTime[i] = (new Date().getTime() - remoteServerDetails[i].from_date);
82+
availabilty[i]= ((Number(totalUnplannedOutageTime[i]) - totalTime[i]) / totalTime[i]) * 100;
83+
d4dModelNew.d4dModelMastersBOTsRemoteServer.update({
84+
id: '32',
85+
rowid: remoteServerDetails[i].rowid
86+
}, { $set: { availability: availabilty[i]} }, function (err, data) {
87+
if (err) {
88+
logger.error('Error in Updating State of Bot-Engine', err);
89+
}
90+
else{
91+
92+
// console.log("Botengine updated successfully")
93+
}
94+
});
95+
96+
97+
}else{
98+
totalUnplannedOutageTime[i] = 0;
99+
availabilty[i]= ((Number(totalUnplannedOutageTime[i]) - totalTime[i]) / totalTime[i]) * 100;
100+
d4dModelNew.d4dModelMastersBOTsRemoteServer.update({
101+
id: '32',
102+
rowid: remoteServerDetails[i].rowid
103+
}, { $set: { availability: availabilty[i]} }, function (err, data) {
104+
if (err) {
105+
logger.error('Error in Updating State of Bot-Engine', err);
106+
}
107+
else{
108+
109+
console.log("Botengine updated successfully")
110+
}
111+
});
112+
}
113+
}
114+
}
115+
}
116+
117+
}
118+
119+
});
120+
}
121+
122+

server/app/services/schedulerService.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ var client = new Client();
2222
var request = require('request');
2323
var auditQueue = require('_pr/config/global-data.js');
2424
var noticeService = require('_pr/services/noticeService.js');
25+
var d4dModelNew = require('_pr/model/d4dmasters/d4dmastersmodelnew.js');
26+
var botengineHealthService = require('_pr/services/botengineHealthService.js');
2527

2628

2729
var schedulerService = module.exports = {};
@@ -415,6 +417,57 @@ schedulerService.getExecutorAuditTrailDetails = function getExecutorAuditTrailDe
415417
});
416418
}
417419

420+
schedulerService.botengineHealth = function botengineHealth(data, callback){
421+
var lastSync = new Date().getTime();
422+
423+
d4dModelNew.d4dModelMastersBOTsRemoteServer.find({
424+
425+
id: '32'
426+
},function (err,remoteServerDetails) {
427+
428+
if(err){
429+
430+
callback(null);
431+
return;
432+
}else{
433+
for(var i=0;i<remoteServerDetails.length;i++){
434+
435+
var options = {
436+
url: "http://" + remoteServerDetails[i]["hostIP"] + ":" + remoteServerDetails[i]["hostPort"],
437+
headers: {
438+
'Content-Type': 'application/json'
439+
}
440+
};
441+
442+
request.get(options, function (err, response, body) {
443+
if (err) {
444+
var lastSync = [];
445+
var lastSync = new Date().getTime();
446+
botengineHealthService.getTotalAvailability();
447+
448+
//logger.info("Last Sync is updated successfully in error case" , ' lastSync-' + lastSync);
449+
450+
} else {
451+
452+
botengineHealthService.getTotalAvailability();
453+
454+
455+
}
456+
if (typeof callback === "function"){
457+
return callback(remoteServerDetails);
458+
}
459+
460+
});
461+
//console.log("Final result for list of Botengine",remoteServerDetails);
462+
463+
}
464+
465+
}
466+
467+
});
468+
469+
}
470+
418471

419472

420473
schedulerService.executeNewScheduledBots = function executeNewScheduledBots(bots,callback) {

0 commit comments

Comments
 (0)