@tiledesk/tiledesk-server 2.3.21 → 2.3.23

Sign up to get free protection for your applications and to get access to all the features.
package/app.js CHANGED
@@ -33,6 +33,9 @@ var roleChecker = require('./middleware/has-role');
33
33
  const MaskData = require("maskdata");
34
34
  var winston = require('./config/winston');
35
35
 
36
+
37
+ // DATABASE CONNECTION
38
+
36
39
  // https://bretkikehara.wordpress.com/2013/05/02/nodejs-creating-your-first-global-module/
37
40
  var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI || config.database;
38
41
 
@@ -78,7 +81,7 @@ mongoose.set('useCreateIndex', true);
78
81
  mongoose.set('useUnifiedTopology', false);
79
82
 
80
83
 
81
-
84
+ // ROUTES DECLARATION
82
85
  var auth = require('./routes/auth');
83
86
  var authtest = require('./routes/authtest');
84
87
  var authtestWithRoleCheck = require('./routes/authtestWithRoleCheck');
@@ -124,19 +127,26 @@ var bootDataLoader = require('./services/bootDataLoader');
124
127
  var settingDataLoader = require('./services/settingDataLoader');
125
128
  var schemaMigrationService = require('./services/schemaMigrationService');
126
129
  var RouterLogger = require('./models/routerLogger');
130
+ var cacheEnabler = require("./services/cacheEnabler");
127
131
 
128
132
  require('./services/mongoose-cache-fn')(mongoose);
129
133
 
134
+
130
135
  var subscriptionNotifier = require('./services/subscriptionNotifier');
131
136
  subscriptionNotifier.start();
132
137
 
133
138
  var botSubscriptionNotifier = require('./services/BotSubscriptionNotifier');
134
139
  botSubscriptionNotifier.start();
135
140
 
141
+ // job_here
142
+
136
143
 
137
144
  var geoService = require('./services/geoService');
138
145
  geoService.listen();
139
146
 
147
+
148
+
149
+
140
150
  var faqBotHandler = require('./services/faqBotHandler');
141
151
  faqBotHandler.listen();
142
152
 
@@ -148,6 +158,7 @@ channelManager.listen();
148
158
 
149
159
  var IPFilter = require('./middleware/ipFilter');
150
160
 
161
+ // job_here
151
162
  var BanUserNotifier = require('./services/banUserNotifier');
152
163
  BanUserNotifier.listen();
153
164
 
@@ -310,9 +321,13 @@ var projectSetter = function (req, res, next) {
310
321
  winston.debug("projectSetter projectid:" + projectid);
311
322
 
312
323
  if (projectid) {
313
- Project.findOne({_id: projectid, status: 100})
314
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "projects:id:"+projectid)
315
- .exec(function(err, project){
324
+
325
+ let q = Project.findOne({_id: projectid, status: 100});
326
+ if (cacheEnabler.trigger) {
327
+ q.cache(cacheUtil.defaultTTL, "projects:id:"+projectid) //project_cache
328
+ winston.debug('project cache enabled');
329
+ }
330
+ q.exec(function(err, project){
316
331
  if (err) {
317
332
  winston.warn("Problem getting project with id: " + projectid + " req.originalUrl: " + req.originalUrl);
318
333
  }
@@ -202,7 +202,7 @@ router.post('/', function (req, res) {
202
202
  }
203
203
 
204
204
 
205
-
205
+
206
206
 
207
207
 
208
208
  var new_request = {
@@ -210,7 +210,7 @@ router.post('/', function (req, res) {
210
210
  departmentid:departmentid, sourcePage:sourcePage, language:language, userAgent:client, status:requestStatus, createdBy: undefined,
211
211
  attributes:rAttributes, subject:undefined, preflight:false, channel:undefined, location:undefined,
212
212
  lead:createdLead, requester:project_user
213
-
213
+
214
214
  };
215
215
 
216
216
  winston.debug("new_request", new_request);
@@ -296,12 +296,10 @@ router.post('/', function (req, res) {
296
296
  // TODO it doesn't work for internal requests bacause participanets == message.sender⁄
297
297
  if (request.participants && request.participants.indexOf(message.sender) > -1) { //update waiitng time if write an agent (member of participants)
298
298
  winston.debug("updateWaitingTimeByRequestId");
299
-
300
299
  return requestService.updateWaitingTimeByRequestId(request.request_id, request.id_project).then(function(upRequest) {
301
300
  return res.json(upRequest);
302
301
  });
303
302
  }else {
304
-
305
303
  return res.json(savedMessage);
306
304
  }
307
305
  // });
@@ -380,9 +378,12 @@ router.post('/', function (req, res) {
380
378
  var query = {request_id: recipient_id, id_project: projectId};
381
379
  winston.debug('query:'+ projectId);
382
380
 
383
- return Request.findOne(query)
384
- //@DISABLED_CACHE cacheUtil.defaultTTL, projectId+":requests:request_id:"+recipient_id)
385
- .exec(function(err, request) {
381
+ let q = Request.findOne(query);
382
+ if (cacheEnabler.trigger) {
383
+ q.cache(cacheUtil.defaultTTL, projectId+":requests:request_id:"+recipient_id); //request_cache
384
+ winston.debug('project cache enabled');
385
+ }
386
+ return q.exec(function(err, request) {
386
387
 
387
388
  if (err) {
388
389
  winston.error("Error finding request with query ", query);
@@ -7,7 +7,7 @@ var MessageConstants = require("../models/messageConstants");
7
7
  var message2Event = require("../event/message2Event");
8
8
 
9
9
  var cacheUtil = require('../utils/cacheUtil');
10
- // var requestService = require("../services/requestService");
10
+ var cacheEnabler = require("../services/cacheEnabler");
11
11
 
12
12
 
13
13
  class MessageEvent extends EventEmitter {
@@ -56,20 +56,27 @@ function populateMessageWithRequest(message, eventPrefix) {
56
56
 
57
57
  // cacherequest // requestcachefarequi populaterequired cacheveryhightpriority
58
58
 
59
- Request.findOne({request_id: message.recipient, id_project: message.id_project}).
59
+ let q = Request.findOne({request_id: message.recipient, id_project: message.id_project}).
60
60
  populate('lead').
61
61
  populate('department').
62
62
  populate('participatingBots').
63
63
  populate('participatingAgents').
64
64
  populate({path:'requester',populate:{path:'id_user'}}).
65
- lean()
65
+ lean();
66
+
67
+
66
68
  //perche lean?
67
69
  // TODO availableAgentsCount nn c'è per il lean problema trigger
68
70
  // request.department._id DA CORREGGERE ANCHE PER REQUEST.CREATE
69
71
  // request.department.hasBot
70
72
  // request.isOpen
71
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient)
72
- .exec(function (err, request) {
73
+
74
+
75
+ if (cacheEnabler.request) {
76
+ q.cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient) //request_cache ma con lean????attento metti a parte
77
+ winston.debug('request cache enabled');
78
+ }
79
+ q.exec(function (err, request) {
73
80
 
74
81
  if (err) {
75
82
  winston.error("Error getting request on messageEvent.populateMessage",err );
@@ -163,6 +170,7 @@ messageEvent.on('message.update.simple', populateMessageUpdate);
163
170
 
164
171
 
165
172
  // riattiva commentato per performance
173
+ // // spostare su classe
166
174
 
167
175
 
168
176
  // var messageCreateKey = 'message.create';
@@ -138,7 +138,7 @@ module.exports = function(passport) {
138
138
 
139
139
  winston.debug("project id: "+ AudienceId );
140
140
  Project.findOne({_id: AudienceId, status: 100}).select('+jwtSecret')
141
- //@DISABLED_CACHE .cache(cacheUtil.queryTTL, "projects:query:id:status:100:"+AudienceId+":select:+jwtSecret")
141
+ //@DISABLED_CACHE .cache(cacheUtil.queryTTL, "projects:query:id:status:100:"+AudienceId+":select:+jwtSecret") //project_cache
142
142
  .exec(function (err, project){
143
143
  if (err) {
144
144
  winston.error("auth Project err: ", {error:err, decoded: decoded} );
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiledesk/tiledesk-server",
3
3
  "description": "The Tiledesk server module",
4
- "version": "2.3.21",
4
+ "version": "2.3.23",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -41,14 +41,14 @@
41
41
  "@tiledesk/tiledesk-chatbot-util": "^0.8.33",
42
42
  "@tiledesk/tiledesk-json-rules-engine": "^4.0.3",
43
43
  "@tiledesk/tiledesk-rasa-connector": "^1.0.10",
44
- "@tiledesk/tiledesk-tybot-connector": "^0.1.7",
44
+ "@tiledesk/tiledesk-tybot-connector": "^0.1.10",
45
45
  "app-root-path": "^3.0.0",
46
46
  "bcrypt-nodejs": "0.0.3",
47
47
  "body-parser": "^1.20.0",
48
+ "cachegoose": "^8.0.0",
48
49
  "cookie-parser": "^1.4.6",
49
50
  "cors": "^2.8.5",
50
51
  "csv-express": "^1.2.2",
51
- "cachegoose": "^8.0.0",
52
52
  "debug": "^4.3.4",
53
53
  "dotenv": "^8.6.0",
54
54
  "email-templates": "^8.1.0",
@@ -6,7 +6,8 @@
6
6
  var authEvent = require("../../event/authEvent");
7
7
  var labelEvent = require("../../event/labelEvent");
8
8
 
9
- // var subscriptionEvent = require("");
9
+ var triggerEventEmitter = require("../trigger/event/triggerEventEmitter");
10
+ var subscriptionEvent = require("../../event/subscriptionEvent");
10
11
 
11
12
  var winston = require('../../config/winston');
12
13
 
@@ -448,8 +449,82 @@
448
449
 
449
450
  // fai cache per subscription.create, .update .delete
450
451
 
451
- // fai cache per trigger.create, .update .delete
452
452
 
453
+ if (subscriptionEvent) {
454
+ subscriptionEvent.on('subscription.create', function(trigger) {
455
+ setImmediate(() => {
456
+
457
+ var key =trigger.id_project+":subscriptions:*";
458
+ winston.verbose("Deleting cache for subscription.create with key: " + key);
459
+ client.del(key, function (err, reply) {
460
+ winston.debug("Deleted cache for subscription.create",reply);
461
+ winston.verbose("Deleted cache for subscription.create",{err:err});
462
+ });
463
+ });
464
+ });
465
+
466
+ subscriptionEvent.on('subscription.update', function(trigger) {
467
+ setImmediate(() => {
468
+ var key =trigger.id_project+":subscriptions:*";
469
+ winston.verbose("Deleting cache for subscription.update with key: " + key);
470
+ client.del(key, function (err, reply) {
471
+ winston.debug("Deleted cache for subscription.update",reply);
472
+ winston.verbose("Deleted cache for subscription.update",{err:err});
473
+ });
474
+ });
475
+ });
476
+
477
+ subscriptionEvent.on("subscription.delete", function(trigger) {
478
+ setImmediate(() => {
479
+ var key =trigger.id_project+":subscriptions:*";
480
+ winston.verbose("Deleting cache for subscription.delete with key: " + key);
481
+ client.del(key, function (err, reply) {
482
+ winston.debug("Deleted cache for subscription.delete",reply);
483
+ winston.verbose("Deleted cache for subscription.delete",{err:err});
484
+ });
485
+ });
486
+ });
487
+
488
+ }
489
+
490
+
491
+ if (triggerEventEmitter) {
492
+ triggerEventEmitter.on('trigger.create', function(trigger) {
493
+ setImmediate(() => {
494
+
495
+ var key =trigger.id_project+":triggers:*";
496
+ winston.verbose("Deleting cache for trigger.create with key: " + key);
497
+ client.del(key, function (err, reply) {
498
+ winston.debug("Deleted cache for trigger.create",reply);
499
+ winston.verbose("Deleted cache for trigger.create",{err:err});
500
+ });
501
+ });
502
+ });
503
+
504
+ triggerEventEmitter.on('trigger.update', function(trigger) {
505
+ setImmediate(() => {
506
+ var key =trigger.id_project+":triggers:*";
507
+ winston.verbose("Deleting cache for trigger.update with key: " + key);
508
+ client.del(key, function (err, reply) {
509
+ winston.debug("Deleted cache for trigger.update",reply);
510
+ winston.verbose("Deleted cache for trigger.update",{err:err});
511
+ });
512
+ });
513
+ });
514
+
515
+ triggerEventEmitter.on("trigger.delete", function(trigger) {
516
+ setImmediate(() => {
517
+ var key =trigger.id_project+":triggers:*";
518
+ winston.verbose("Deleting cache for trigger.delete with key: " + key);
519
+ client.del(key, function (err, reply) {
520
+ winston.debug("Deleted cache for trigger.delete",reply);
521
+ winston.verbose("Deleted cache for trigger.delete",{err:err});
522
+ });
523
+ });
524
+ });
525
+
526
+ }
527
+
453
528
  //jwt
454
529
 
455
530
  // fai cache faq
@@ -4,6 +4,7 @@ const Request = require('../../models/request');
4
4
  var winston = require('../../config/winston');
5
5
  var cacheUtil = require('../../utils/cacheUtil');
6
6
  var handlebars = require('handlebars');
7
+ var cacheEnabler = require("../../services/cacheEnabler");
7
8
 
8
9
  class MessageHandlebarsTransformerInterceptor {
9
10
 
@@ -38,8 +39,12 @@ class MessageHandlebarsTransformerInterceptor {
38
39
  populate({path:'requester',populate:{path:'id_user'}});
39
40
  // }
40
41
 
42
+ if (cacheEnabler.request) {
43
+ q1.cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient) //request_cache
44
+ winston.debug('request cache enabled');
45
+ }
46
+
41
47
  var request = await q1
42
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient)
43
48
  .exec();
44
49
 
45
50
 
@@ -5,6 +5,7 @@ const Request = require('../../models/request');
5
5
  var winston = require('../../config/winston');
6
6
  var i8nUtil = require("../../utils/i8nUtil");
7
7
  var cacheUtil = require('../../utils/cacheUtil');
8
+ var cacheEnabler = require("../../services/cacheEnabler");
8
9
 
9
10
  //TODO rename to LabelMessageTransformerInterceptor
10
11
  class MessageTransformerInterceptor {
@@ -36,15 +37,20 @@ class MessageTransformerInterceptor {
36
37
 
37
38
  var language = "EN";
38
39
 
39
- // cacherequest // requestcachefarequi nocachepopulatereqired
40
- var request = await Request.findOne({request_id: message.recipient, id_project: message.id_project})
40
+ let q = Request.findOne({request_id: message.recipient, id_project: message.id_project});
41
41
  // populate('lead').
42
42
  // populate('department').
43
43
  // populate('participatingBots').
44
44
  // populate('participatingAgents').
45
45
  // populate({path:'requester',populate:{path:'id_user'}}).
46
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient)
47
- .exec();
46
+
47
+ if (cacheEnabler.request) {
48
+ q.cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient) //request_cache nocachepopulatereqired
49
+ winston.debug('request cache enabled');
50
+ }
51
+
52
+
53
+ var request = await q.exec();
48
54
 
49
55
  winston.debug('request mti: ', request);
50
56
 
@@ -157,7 +157,7 @@ class Listener {
157
157
  // departmentEvent.prependListener('operator.select', async (data) => {
158
158
 
159
159
  var operatorsResult = res.result;
160
- winston.info('operator.select.base2 res', res);
160
+ winston.debug('operator.select.base2 res', res);
161
161
 
162
162
 
163
163
  var disableWebHookCall = res.disableWebHookCall;
@@ -19,6 +19,7 @@ var LeadConstants = require('../../models/leadConstants');
19
19
  var operatingHoursService = require("../../services/operatingHoursService");
20
20
  var sendMessageUtil = require("../../utils/sendMessageUtil");
21
21
  var cacheUtil = require("../../utils/cacheUtil");
22
+ var cacheEnabler = require("../../services/cacheEnabler");
22
23
 
23
24
 
24
25
 
@@ -54,6 +55,8 @@ class RulesTrigger {
54
55
  setImmediate(() => {
55
56
 
56
57
  requestEvent.on('request.support_group.created', function(request) {
58
+
59
+
57
60
  // requestEvent.on('request.create', function(request) {
58
61
  var requestJson = request.toJSON();
59
62
  operatingHoursService.projectIsOpenNow(request.id_project, function (isOpen, err) {
@@ -865,11 +868,12 @@ class RulesTrigger {
865
868
  return requestService.create(new_request).then(function (savedRequest) {
866
869
 
867
870
 
871
+
868
872
  if (attributes) {
869
873
  attributes.sendnotification = false; // sembra nn funzionae
870
874
  }
871
875
 
872
- var senderFullname = fullname || 'Guest';
876
+ var senderFullname = fullname || 'Guest'; // guest_here
873
877
 
874
878
  // create(sender, senderFullname, recipient, text, id_project, createdBy, status, attributes, type, metadata, language) {
875
879
  return messageService.create( id_user, senderFullname , savedRequest.request_id, text,
@@ -925,9 +929,17 @@ class RulesTrigger {
925
929
 
926
930
  winston.debug('trigger query', query);
927
931
 
928
- Trigger.find(query)
929
- .cache(cacheUtil.longTTL, event.id_project+":triggers:trigger.key:"+eventKey)
930
- .exec(function(err, triggers) {
932
+ let q = Trigger.find(query);
933
+
934
+ if (cacheEnabler.trigger) {
935
+ q.cache(cacheUtil.longTTL, event.id_project+":triggers:trigger.key:"+eventKey) //CACHE_TRIGGER
936
+ winston.debug('trigger cache enabled');
937
+
938
+ }
939
+
940
+ q.exec(function(err, triggers) {
941
+
942
+
931
943
  if (err) {
932
944
  winston.error('Error gettting bots ', err);
933
945
  return 0;
package/routes/message.js CHANGED
@@ -13,7 +13,9 @@ var leadService = require('../services/leadService');
13
13
  var winston = require('../config/winston');
14
14
 
15
15
  var MessageConstants = require("../models/messageConstants");
16
+
16
17
  var cacheUtil = require('../utils/cacheUtil');
18
+ var cacheEnabler = require("../services/cacheEnabler");
17
19
 
18
20
  const { check, validationResult } = require('express-validator');
19
21
 
@@ -51,7 +53,7 @@ async (req, res) => {
51
53
  return res.status(422).json({ errors: errors.array() });
52
54
  }
53
55
 
54
-
56
+
55
57
  var project_user = req.projectuser;
56
58
  var sender = req.body.sender;
57
59
  var fullname = req.body.senderFullname || req.user.fullName;
@@ -60,15 +62,19 @@ async (req, res) => {
60
62
  let messageStatus = req.body.status || MessageConstants.CHAT_MESSAGE_STATUS.SENDING;
61
63
  winston.debug('messageStatus: ' + messageStatus);
62
64
 
65
+ let q = Request.findOne({request_id: req.params.request_id, id_project: req.projectid});
66
+ if (cacheEnabler.request) {
67
+ q.cache(cacheUtil.defaultTTL, req.projectid+":requests:request_id:"+req.params.request_id) //request_cache
68
+ winston.debug('request cache enabled');
69
+ }
63
70
  // cacherequest // requestcachefarequi nocachepopulatereqired
64
- return Request.findOne({request_id: req.params.request_id, id_project: req.projectid})
71
+ return q.exec(async(err, request) => {
65
72
  // .populate('lead')
66
73
  // .populate('department')
67
74
  // .populate('participatingBots')
68
75
  // .populate('participatingAgents')
69
76
  // .populate({path:'requester',populate:{path:'id_user'}})
70
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, req.projectid+":requests:request_id:"+req.params.request_id)
71
- .exec(async(err, request) => {
77
+
72
78
 
73
79
  if (err) {
74
80
  winston.log({
@@ -268,7 +274,7 @@ async (req, res) => {
268
274
  }).catch(function(err){
269
275
  winston.log({
270
276
  level: 'error',
271
- message: 'Error creating message: '+ JSON.stringify(err) + " " + JSON.stringify(req.body) ,
277
+ message: 'Error creating message endpoint: '+ JSON.stringify(err) + " " + JSON.stringify(req.body) ,
272
278
  label: req.projectid
273
279
  });
274
280
  // winston.error("Error creating message", err);
@@ -289,7 +295,6 @@ async (req, res) => {
289
295
  });
290
296
 
291
297
 
292
-
293
298
  // router.put('/:messageid', function(req, res) {
294
299
 
295
300
  // console.log(req.body);
package/routes/project.js CHANGED
@@ -18,7 +18,7 @@ var validtoken = require('../middleware/valid-token')
18
18
  var RoleConstants = require("../models/roleConstants");
19
19
  var cacheUtil = require('../utils/cacheUtil');
20
20
  var orgUtil = require("../utils/orgUtil");
21
-
21
+ var cacheEnabler = require("../services/cacheEnabler");
22
22
 
23
23
  router.post('/', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken], async (req, res) => {
24
24
 
@@ -430,6 +430,9 @@ router.delete('/:projectid/ban/:banid', [passport.authenticate(['basic', 'jwt'],
430
430
 
431
431
  // winston.info('quiiiiii');
432
432
  //cacheinvalidation
433
+
434
+
435
+ // devi prendere id utente prima di eliminarlo
433
436
  Project.findByIdAndUpdate(req.params.projectid, { $pull: { bannedUsers: { "_id": req.params.banid }}}, { new: true, upsert: false }, function (err, updatedProject) {
434
437
  if (err) {
435
438
  winston.error('Error putting project ', err);
@@ -447,9 +450,12 @@ Project.findByIdAndUpdate(req.params.projectid, { $pull: { bannedUsers: { "_id":
447
450
  //roleChecker.hasRole('agent') works because req.params.projectid is valid using :projectid of this method
448
451
  router.get('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['subscription'])], function (req, res) {
449
452
  winston.debug(req.body);
450
- Project.findOne({_id: req.params.projectid, status:100})
451
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "projects:id:"+req.params.projectid)
452
- .exec(function (err, project) {
453
+ let q = Project.findOne({_id: req.params.projectid, status:100});
454
+ if (cacheEnabler.trigger) {
455
+ q.cache(cacheUtil.defaultTTL, "projects:id:"+req.params.projectid) //project_cache
456
+ winston.debug('project cache enabled');
457
+ }
458
+ q.exec(function (err, project) {
453
459
  if (err) {
454
460
  winston.error('Error getting project ', err);
455
461
  return res.status(500).send({ success: false, msg: 'Error getting object.' });
package/routes/request.js CHANGED
@@ -16,7 +16,7 @@ var MessageConstants = require("../models/messageConstants");
16
16
  var Message = require("../models/message");
17
17
  var cacheUtil = require('../utils/cacheUtil');
18
18
  var RequestConstants = require("../models/requestConstants");
19
-
19
+ var cacheEnabler = require("../services/cacheEnabler");
20
20
 
21
21
  csv = require('csv-express');
22
22
  csv.separator = ';';
@@ -1257,17 +1257,22 @@ router.get('/:requestid', function (req, res) {
1257
1257
  var requestid = req.params.requestid;
1258
1258
  winston.debug("get request by id: "+requestid);
1259
1259
 
1260
- // cacherequest // requestcachefarequi populaterequired
1261
- Request.findOne({request_id: requestid, id_project: req.projectid})
1260
+
1261
+ let q = Request.findOne({request_id: requestid, id_project: req.projectid})
1262
1262
  // .select("+snapshot.agents")
1263
1263
  .populate('lead')
1264
1264
  .populate('department')
1265
1265
  .populate('participatingBots')
1266
1266
  .populate('participatingAgents')
1267
- .populate({path:'requester',populate:{path:'id_user'}})
1268
- // .cache(cacheUtil.defaultTTL, "/"+req.projectid+"/requests/request_id/"+requestid)
1267
+ .populate({path:'requester',populate:{path:'id_user'}});
1268
+
1269
+ if (cacheEnabler.request) {
1270
+ q.cache(cacheUtil.defaultTTL, "/"+req.projectid+"/requests/request_id/"+requestid) //request_cache
1271
+ winston.debug('request cache enabled');
1272
+ }
1273
+ //
1269
1274
  // .populate({path:'requester',populate:{path:'id_user', select:{'firstname':1, 'lastname':1}}})
1270
- .exec(function(err, request) {
1275
+ q.exec(function(err, request) {
1271
1276
  if (err) {
1272
1277
  winston.error("error getting request by id ", err);
1273
1278
  return res.status(500).send({ success: false, msg: 'Error getting object.' });
@@ -0,0 +1,45 @@
1
+
2
+ class CacheEnabler {
3
+ constructor() {
4
+ this.trigger = true;
5
+ if (process.env.CACHE_TRIGGER_ENABLED=="false" || process.env.CACHE_TRIGGER_ENABLED==false) {
6
+ this.trigger = false;
7
+ }
8
+
9
+ this.subscription = true;
10
+ if (process.env.CACHE_SUBSCRIPTION_ENABLED=="false" || process.env.CACHE_SUBSCRIPTION_ENABLED==false) {
11
+ this.subscription = false;
12
+ }
13
+
14
+ this.project = true;
15
+ if (process.env.CACHE_PROJECT_ENABLED=="false" || process.env.CACHE_PROJECT_ENABLED==false) {
16
+ this.project = false;
17
+ }
18
+
19
+ this.request = true;
20
+ if (process.env.CACHE_REQUEST_ENABLED=="false" || process.env.CACHE_REQUEST_ENABLED==false) {
21
+ this.request = false;
22
+ }
23
+
24
+ this.project_user = true;
25
+ if (process.env.CACHE_PROJECT_USER_ENABLED=="false" || process.env.CACHE_PROJECT_USER_ENABLED==false) {
26
+ this.project_user = false;
27
+ }
28
+
29
+ this.user = true;
30
+ if (process.env.CACHE_USER_ENABLED=="false" || process.env.CACHE_USER_ENABLED==false) {
31
+ this.user = false;
32
+ }
33
+
34
+ this.message = true;
35
+ if (process.env.CACHE_MESSAGE_ENABLED=="false" || process.env.CACHE_MESSAGE_ENABLED==false) {
36
+ this.message = false;
37
+ }
38
+ }
39
+ }
40
+
41
+
42
+ var cacheEnabler = new CacheEnabler();
43
+
44
+
45
+ module.exports = cacheEnabler;
@@ -4,16 +4,19 @@ var Project = require("../models/project");
4
4
  var moment_tz = require('moment-timezone');
5
5
  var winston = require('../config/winston');
6
6
  var cacheUtil = require('../utils/cacheUtil');
7
-
7
+ var cacheEnabler = require("../services/cacheEnabler");
8
8
 
9
9
  class OperatingHoursService {
10
10
 
11
11
  projectIsOpenNow(projectId, callback) {
12
12
 
13
13
  // winston.debug('O ---> [ OHS ] -> PROJECT ID ', projectId)
14
- Project.findOne({_id: projectId, status: 100})
15
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "projects:id:"+projectId)
16
- .exec(function (err, project) {
14
+ let q = Project.findOne({_id: projectId, status: 100});
15
+ if (cacheEnabler.trigger) {
16
+ q.cache(cacheUtil.defaultTTL, "projects:id:"+projectId) //project_cache
17
+ winston.debug('project cache enabled');
18
+ }
19
+ q.exec(function (err, project) {
17
20
  // winston.debug("XXXXXXXX project", project);
18
21
  if (err) {
19
22
  winston.error("O ---> [ OHS ] -> ERROR GETTING PROJECT ", err);
@@ -36,6 +39,7 @@ class OperatingHoursService {
36
39
 
37
40
  // IF THE TRIAL IS EXPIRED OR IF THE SUBSCIPTION IS NOT ACTIVE THE PROJECT IS ALWAYS OPEN EVEN IF activeOperatingHours IS SETTED TO true AND, FOR EXAMPLE,
38
41
  // THE USER HAS SETTED ALL DAYS TO CLOSED
42
+
39
43
  if (project.profile && (project.profile.type === 'free' && project.trialExpired === true) || (project.profile.type === 'payment' && project.isActiveSubscription === false)) {
40
44
  winston.debug('O ---> [ OHS ] -> trial Expired OR Subscription NOT Active - PROJECT ALWAYS OPEN')
41
45
  callback(true, null) ;
@@ -12,6 +12,7 @@ var RequestConstants = require("../models/requestConstants");
12
12
  var requestUtil = require("../utils/requestUtil");
13
13
  var cacheUtil = require("../utils/cacheUtil");
14
14
  var arrayUtil = require("../utils/arrayUtil");
15
+ var cacheEnabler = require("../services/cacheEnabler");
15
16
 
16
17
  class RequestService {
17
18
 
@@ -226,10 +227,14 @@ class RequestService {
226
227
  winston.debug("id_project:" + id_project);
227
228
  winston.debug("nobot:"+ nobot);
228
229
 
229
- return Request
230
- .findOne({request_id: request_id, id_project: id_project})
231
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, id_project+":requests:request_id:"+request_id)
232
- .exec( function(err, request) {
230
+ let q= Request
231
+ .findOne({request_id: request_id, id_project: id_project});
232
+
233
+ if (cacheEnabler.request) {
234
+ q.cache(cacheUtil.defaultTTL, id_project+":requests:request_id:"+request_id) //request_cache
235
+ winston.debug('request cache enabled');
236
+ }
237
+ return q.exec( function(err, request) {
233
238
 
234
239
  if (err) {
235
240
  winston.error(err);
@@ -378,10 +383,15 @@ class RequestService {
378
383
  // winston.debug("request_id", request_id);
379
384
  // winston.debug("newstatus", newstatus);
380
385
 
381
- return Request
382
- .findOne({request_id: request_id, id_project: id_project})
383
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, id_project+":requests:request_id:"+request_id)
384
- .exec( function(err, request) {
386
+ let q = Request
387
+ .findOne({request_id: request_id, id_project: id_project});
388
+
389
+ if (cacheEnabler.request) {
390
+ q.cache(cacheUtil.defaultTTL, id_project+":requests:request_id:"+request_id) //request_cache
391
+ winston.debug('request cache enabled');
392
+ }
393
+
394
+ return q.exec( function(err, request) {
385
395
 
386
396
  if (err) {
387
397
  winston.error(err);
@@ -502,6 +512,8 @@ class RequestService {
502
512
  try {
503
513
  // getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
504
514
  var result = await departmentService.getOperators(departmentid, id_project, false, undefined, context);
515
+ console.log("************* after get operator: "+new Date().toISOString());
516
+
505
517
  winston.debug("getOperators", result);
506
518
  } catch(err) {
507
519
  return reject(err);
@@ -933,25 +945,27 @@ class RequestService {
933
945
 
934
946
  }
935
947
 
936
- // unused
937
- incrementMessagesCountByRequestId(request_id, id_project) {
938
948
 
939
- return new Promise(function (resolve, reject) {
940
- // winston.debug("request_id", request_id);
941
- // winston.debug("newstatus", newstatus);
942
949
 
943
- return Request
944
- .findOneAndUpdate({request_id: request_id, id_project: id_project}, {$inc : {'messages_count' : 1}}, {new: true, upsert:false}, function(err, updatedRequest) {
945
- if (err) {
946
- winston.error(err);
947
- return reject(err);
948
- }
949
- winston.debug("Message count +1");
950
- return resolve(updatedRequest);
951
- });
952
- });
950
+ // unused
951
+ incrementMessagesCountByRequestId(request_id, id_project) {
953
952
 
954
- }
953
+ return new Promise(function (resolve, reject) {
954
+ // winston.debug("request_id", request_id);
955
+ // winston.debug("newstatus", newstatus);
956
+
957
+ return Request
958
+ .findOneAndUpdate({request_id: request_id, id_project: id_project}, {$inc : {'messages.messages_count' : 1}}, {new: true, upsert:false}, function(err, updatedRequest) {
959
+ if (err) {
960
+ winston.error(err);
961
+ return reject(err);
962
+ }
963
+ winston.debug("Message count +1");
964
+ return resolve(updatedRequest);
965
+ });
966
+ });
967
+
968
+ }
955
969
 
956
970
  updateWaitingTimeByRequestId(request_id, id_project) {
957
971
 
@@ -959,15 +973,19 @@ class RequestService {
959
973
  // winston.debug("request_id", request_id);
960
974
  // winston.debug("newstatus", newstatus);
961
975
 
962
- return Request
976
+ let q = Request
963
977
  .findOne({request_id: request_id, id_project: id_project})
964
978
  .populate('lead')
965
979
  .populate('department')
966
980
  .populate('participatingBots')
967
981
  .populate('participatingAgents')
968
- .populate({path:'requester',populate:{path:'id_user'}})
969
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, id_project+":requests:request_id:"+request_id)
970
- .exec(function(err, request) {
982
+ .populate({path:'requester',populate:{path:'id_user'}});
983
+
984
+ if (cacheEnabler.request) {
985
+ q.cache(cacheUtil.defaultTTL, id_project+":requests:request_id:"+request_id) //request_cache
986
+ winston.debug('request cache enabled');
987
+ }
988
+ q.exec(function(err, request) {
971
989
  if (err) {
972
990
  winston.error(err);
973
991
  return reject(err);
@@ -21,6 +21,7 @@ var jwt = require('jsonwebtoken');
21
21
  var config = require('../config/database'); // get db config file
22
22
  var cacheUtil = require("../utils/cacheUtil");
23
23
 
24
+ var cacheEnabler = require("../services/cacheEnabler");
24
25
 
25
26
  var webhook_origin = process.env.WEBHOOK_ORIGIN || "http://localhost:3000";
26
27
  winston.debug("webhook_origin: "+webhook_origin);
@@ -36,9 +37,13 @@ class SubscriptionNotifier {
36
37
 
37
38
  findSubscriber(event, id_project) {
38
39
  return new Promise(function (resolve, reject) {
39
- Subscription.find({event:event, $or:[{id_project: id_project}, {global: true}]})
40
- .cache(cacheUtil.longTTL, id_project+":subscriptions:event:"+event)
41
- .select("+secret +global")
40
+ let q = Subscription.find({event:event, $or:[{id_project: id_project}, {global: true}]});
41
+ if (cacheEnabler.subscription) {
42
+ q.cache(cacheUtil.longTTL, id_project+":subscriptions:event:"+event); //CACHE_SUBSCRIPTION
43
+ winston.debug('subscription cache enabled');
44
+ }
45
+
46
+ q.select("+secret +global")
42
47
  .exec(function (err, subscriptions) {
43
48
  // if (subscriptions && subscriptions.length>0) {
44
49
  // winston.debug("Subscription.notify", event, item , "length", subscriptions.length);
@@ -23,7 +23,7 @@ var mongoose = require('mongoose');
23
23
  const requestConstants = require("../models/requestConstants");
24
24
  var RoleConstants = require('../models/roleConstants');
25
25
  let configSecret = process.env.GLOBAL_SECRET || config.secret;
26
-
26
+ var cacheEnabler = require("../services/cacheEnabler");
27
27
 
28
28
 
29
29
  var lastRequestsLimit = process.env.WS_HISTORY_REQUESTS_LIMIT || 100;
@@ -185,9 +185,14 @@ class WebSocketServer {
185
185
  winston.debug('projectId: '+projectId);
186
186
 
187
187
 
188
- return Project.findOne({ _id: projectId, status: 100})
189
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "projects:id:"+projectId)
190
- .exec(function(err, project) {
188
+ let q = Project.findOne({ _id: projectId, status: 100})
189
+
190
+ if (cacheEnabler.trigger) {
191
+ q.cache(cacheUtil.defaultTTL, "projects:id:"+projectId) //project_cache
192
+ winston.debug('project cache enabled');
193
+ }
194
+
195
+ return q.exec(function(err, project) {
191
196
  if (err) {
192
197
  winston.error('WebSocket - Error getting Project', err);
193
198
  return reject(err);