@tiledesk/tiledesk-server 2.3.21 → 2.3.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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);