@tiledesk/tiledesk-server 2.3.22 → 2.3.24

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/CHANGELOG.md CHANGED
@@ -1,6 +1,25 @@
1
1
 
2
2
 
3
+ 💥 TILEDESK SERVER v2.3.23 💥
4
+ 🚀 TAGGED AND PUBLISHED ON NPM 🚀
5
+ 🚀 IN PRODUCTION 🚀
6
+ (https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.17)
7
+
8
+ # 2.3.23 -> PROD
9
+ - cacheEnabler + trigger cache + subscription cache
10
+ - project cache with cacheEnabler
11
+ - request cache with cacheEnabler
12
+ - Updated dependency @tiledesk/tiledesk-tybot-connector to 0.1.10
13
+ - Added trigger and subscription cache invalidation rules
14
+
15
+ # 2.3.22
16
+ - added cacheoose dep package.json
17
+ - Updated dependency @tiledesk/tiledesk-tybot-connector to 0.1.8
18
+
3
19
  # 2.3.21
20
+ - log fix
21
+ - Updated dependency @tiledesk/tiledesk-tybot-connector to 0.1.7
22
+ - Moved cache module to public module
4
23
  - filter request by smartAssignment
5
24
 
6
25
  # 2.3.20
@@ -11,14 +30,13 @@
11
30
  - Moved route-queue to public module
12
31
  - Disable queue module if JOB_WORKER_ENABLED is true
13
32
 
33
+ # 2.3.18.2
34
+ - logfix
14
35
 
36
+ # 2.3.18.1
37
+ - Updated dependency @tiledesk/tiledesk-tybot-connector to 0.1.10
15
38
 
16
- 💥 TILEDESK SERVER v2.3.18 💥
17
- 🚀 TAGGED AND PUBLISHED ON NPM 🚀
18
- 🚀 IN PRODUCTION 🚀
19
- (https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.17)
20
-
21
- # 2.3.18 -> PROD
39
+ # 2.3.18
22
40
  - Added profileStatus field to the project_user model
23
41
  - Added smartAssignment field to the request model
24
42
  - Canned responses default limit value increased from 40 to 1000
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,18 +127,24 @@ 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
- geoService.listen();
145
+ geoService.listen();
146
+
147
+
139
148
 
140
149
  var faqBotHandler = require('./services/faqBotHandler');
141
150
  faqBotHandler.listen();
@@ -148,6 +157,7 @@ channelManager.listen();
148
157
 
149
158
  var IPFilter = require('./middleware/ipFilter');
150
159
 
160
+ // job_here
151
161
  var BanUserNotifier = require('./services/banUserNotifier');
152
162
  BanUserNotifier.listen();
153
163
 
@@ -310,9 +320,13 @@ var projectSetter = function (req, res, next) {
310
320
  winston.debug("projectSetter projectid:" + projectid);
311
321
 
312
322
  if (projectid) {
313
- Project.findOne({_id: projectid, status: 100})
314
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "projects:id:"+projectid)
315
- .exec(function(err, project){
323
+
324
+ let q = Project.findOne({_id: projectid, status: 100});
325
+ if (cacheEnabler.project) {
326
+ q.cache(cacheUtil.defaultTTL, "projects:id:"+projectid) //project_cache
327
+ winston.debug('project cache enabled');
328
+ }
329
+ q.exec(function(err, project){
316
330
  if (err) {
317
331
  winston.warn("Problem getting project with id: " + projectid + " req.originalUrl: " + req.originalUrl);
318
332
  }
@@ -9,6 +9,8 @@ var Project_user = require("../../models/project_user");
9
9
  var RequestConstants = require("../../models/requestConstants");
10
10
 
11
11
  var cacheUtil = require('../../utils/cacheUtil');
12
+ var cacheEnabler = require("../../services/cacheEnabler");
13
+
12
14
 
13
15
  var mongoose = require('mongoose');
14
16
  var winston = require('../../config/winston');
@@ -73,11 +75,17 @@ router.post('/', function (req, res) {
73
75
  winston.debug("Chat21 message", message);
74
76
 
75
77
  // requestcachefarequi nocachepopulatereqired
76
- return Request.findOne({request_id: message.recipient})
78
+ let q = Request.findOne({request_id: message.recipient})
79
+
80
+ if (cacheEnabler.request) {
81
+ q.cache(cacheUtil.defaultTTL, "requests:request_id:"+message.recipient+":simple"); //request_cache
82
+ // project_id not available
83
+ winston.debug('request cache enabled');
84
+ }
85
+ return q.exec(function(err, request) {
86
+
77
87
  // before request_id id_project unique - commented
78
- // return Request.findOne({request_id: message.recipient, id_project: projectid})
79
- // .cache(cacheUtil.defaultTTL, req.projectid+":requests:request_id:"+requestid) project_id not available
80
- .exec(function(err, request) {
88
+
81
89
 
82
90
  if (err) {
83
91
  return res.status(500).send({success: false, msg: 'Error getting the request.', err:err});
@@ -296,12 +304,10 @@ router.post('/', function (req, res) {
296
304
  // TODO it doesn't work for internal requests bacause participanets == message.sender⁄
297
305
  if (request.participants && request.participants.indexOf(message.sender) > -1) { //update waiitng time if write an agent (member of participants)
298
306
  winston.debug("updateWaitingTimeByRequestId");
299
-
300
307
  return requestService.updateWaitingTimeByRequestId(request.request_id, request.id_project).then(function(upRequest) {
301
308
  return res.json(upRequest);
302
309
  });
303
310
  }else {
304
-
305
311
  return res.json(savedMessage);
306
312
  }
307
313
  // });
@@ -380,9 +386,12 @@ router.post('/', function (req, res) {
380
386
  var query = {request_id: recipient_id, id_project: projectId};
381
387
  winston.debug('query:'+ projectId);
382
388
 
383
- return Request.findOne(query)
384
- //@DISABLED_CACHE cacheUtil.defaultTTL, projectId+":requests:request_id:"+recipient_id)
385
- .exec(function(err, request) {
389
+ let q = Request.findOne(query);
390
+ // if (cacheEnabler.request) {
391
+ // q.cache(cacheUtil.defaultTTL, projectId+":requests:request_id:"+recipient_id+":simple"); //request_cache NOT IMPORTANT HERE
392
+ // winston.debug('project cache enabled');
393
+ // }
394
+ return q.exec(function(err, request) {
386
395
 
387
396
  if (err) {
388
397
  winston.error("Error finding request with query ", query);
@@ -464,7 +473,7 @@ router.post('/', function (req, res) {
464
473
 
465
474
  // requestcachefarequi populaterequired
466
475
  return Request.findOne({request_id: request_id, id_project: id_project})
467
- .populate('lead') //TODO posso prenderlo da snapshot senza populate
476
+ .populate('lead') //TODO posso prenderlo da snapshot senza populate cache_attention
468
477
  .exec(function(err, request) {
469
478
  if (err){
470
479
  winston.error(err);
@@ -631,7 +640,7 @@ else if (req.body.event_type == "typing-start") {
631
640
  // requestcachefarequi nocachepopulatereqired
632
641
  return Request.findOne({request_id: recipient_id})
633
642
  //TOD errore cache sistemare e riabbilitare->
634
- // .cache(cacheUtil.defaultTTL, req.projectid+":requests:request_id:"+recipient_id)
643
+ // .cache(cacheUtil.defaultTTL, req.projectid+":requests:request_id:"+recipient_id) cache_attention
635
644
  .exec(function(err, request) {
636
645
  if (err){
637
646
  winston.error(err);
@@ -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 {
@@ -34,14 +34,18 @@ function emitCompleteMessage(message) {
34
34
  }
35
35
 
36
36
  messageEvent.on('message.create', emitCompleteMessage);
37
- messageEvent.on('message.update', emitCompleteMessage);
37
+
38
+ // messageEvent.on('message.update.simple', emitCompleteMessage); //if populateMessageUpdate is disabled then you must forward message.update event from message.update.simple
39
+ messageEvent.on('message.update', emitCompleteMessage); // i must restore populateMessageWithRequest. see below
38
40
 
39
41
  function populateMessageCreate(message) {
40
42
  return populateMessageWithRequest(message, 'message.create');
41
43
  }
42
44
  function populateMessageUpdate(message) {
43
- // return populateMessageWithRequest(message, 'message.update');
44
- return; // do not populate message.update it's not used by anyone. Not used by webhook. populate for message.update is slow.
45
+ return populateMessageWithRequest(message, 'message.update');
46
+ // return; // do not populate message.update it's not used by anyone.
47
+ ///it is used by \agent interceptor. Without populateMessageWithRequest \agent sent by bot doesn't work. i must restore populateMessageWithRequest
48
+ // Not used by webhook. populate for message.update is slow.
45
49
  }
46
50
 
47
51
 
@@ -56,26 +60,35 @@ function populateMessageWithRequest(message, eventPrefix) {
56
60
 
57
61
  // cacherequest // requestcachefarequi populaterequired cacheveryhightpriority
58
62
 
59
- Request.findOne({request_id: message.recipient, id_project: message.id_project}).
63
+ let q = Request.findOne({request_id: message.recipient, id_project: message.id_project}).
60
64
  populate('lead').
61
65
  populate('department').
62
66
  populate('participatingBots').
63
67
  populate('participatingAgents').
64
68
  populate({path:'requester',populate:{path:'id_user'}}).
65
- lean()
69
+ lean();
70
+
71
+
66
72
  //perche lean?
67
73
  // TODO availableAgentsCount nn c'è per il lean problema trigger
68
74
  // request.department._id DA CORREGGERE ANCHE PER REQUEST.CREATE
69
75
  // request.department.hasBot
70
76
  // request.isOpen
71
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient)
72
- .exec(function (err, request) {
77
+ winston.info('message Event populate');
78
+ if (cacheEnabler.request) {
79
+ q.cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient) //request_cache ma con lean????attento metti a parte
80
+ winston.debug('request cache enabled');
81
+ }
82
+ q.exec(function (err, request) {
73
83
 
74
84
  if (err) {
75
85
  winston.error("Error getting request on messageEvent.populateMessage",err );
76
86
  return messageEvent.emit(eventPrefix, message);
77
87
  }
78
88
 
89
+ winston.debug('message Event populate after query');
90
+
91
+
79
92
  if (request) {
80
93
  winston.debug("request is defined in messageEvent",request );
81
94
 
@@ -84,9 +97,14 @@ function populateMessageWithRequest(message, eventPrefix) {
84
97
 
85
98
  if (request.department && request.department.id_bot) {
86
99
  // if (request.department) {
87
- Faq_kb.findById(request.department.id_bot)
88
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":faq_kbs:id:"+request.department.id_bot)
89
- .exec(function(err, bot) {
100
+ let qbot = Faq_kb.findById(request.department.id_bot)
101
+
102
+ if (cacheEnabler.faq_kb) {
103
+ qbot.cache(cacheUtil.defaultTTL, message.id_project+":faq_kbs:id:"+request.department.id_bot)
104
+ winston.debug('faq_kb cache enabled');
105
+ }
106
+
107
+ qbot.exec(function(err, bot) {
90
108
  winston.debug('bot', bot);
91
109
  requestJson.department.bot = bot
92
110
 
@@ -162,7 +180,10 @@ messageEvent.on('message.update.simple', populateMessageUpdate);
162
180
 
163
181
 
164
182
 
165
- // riattiva commentato per performance
183
+ // // riattiva commentato per performance
184
+
185
+ // // spostare su classe
186
+
166
187
 
167
188
 
168
189
  // 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.22",
4
+ "version": "2.3.24",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -41,7 +41,7 @@
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.8",
44
+ "@tiledesk/tiledesk-tybot-connector": "^0.1.14",
45
45
  "app-root-path": "^3.0.0",
46
46
  "bcrypt-nodejs": "0.0.3",
47
47
  "body-parser": "^1.20.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
 
@@ -202,6 +203,35 @@
202
203
 
203
204
 
204
205
 
206
+ requestEvent.on("request.create.simple", function(request) {
207
+ setImmediate(() => {
208
+ var key = request.id_project+":requests:id:"+request.id+":simple";
209
+ winston.verbose("Creating cache for request.create.simple with key: " + key);
210
+
211
+ client.set(key, request, defaultTTL, (err, reply) => {
212
+ winston.debug("Created cache for request.create.simple",reply);
213
+ winston.verbose("Created cache for request.create.simple",{err:err});
214
+ });
215
+
216
+
217
+ var key = "requests:id:"+request.request_id+":simple"; //without project for chat21 webhook
218
+ winston.verbose("Creating cache for request.create.simple with key: " + key);
219
+
220
+ client.set(key, request, defaultTTL, (err, reply) => {
221
+ winston.debug("Created cache for request.create.simple",reply);
222
+ winston.verbose("Created cache for request.create.simple",{err:err});
223
+ });
224
+
225
+ var key = request.id_project+":requests:request_id:"+request.request_id+":simple";
226
+ winston.verbose("Creating cache for request.create.simple with key: " + key);
227
+ client.set(key, request, defaultTTL, (err, reply) => {
228
+ winston.debug("Created cache for request.create.simple",reply);
229
+ winston.verbose("Created cache for request.create.simple",{err:err});
230
+ });
231
+
232
+ })
233
+ });
234
+
205
235
  requestEvent.on("request.create", function(request) {
206
236
  setImmediate(() => {
207
237
  var key = request.id_project+":requests:id:"+request.id;
@@ -448,8 +478,82 @@
448
478
 
449
479
  // fai cache per subscription.create, .update .delete
450
480
 
451
- // fai cache per trigger.create, .update .delete
452
481
 
482
+ if (subscriptionEvent) {
483
+ subscriptionEvent.on('subscription.create', function(trigger) {
484
+ setImmediate(() => {
485
+
486
+ var key =trigger.id_project+":subscriptions:*";
487
+ winston.verbose("Deleting cache for subscription.create with key: " + key);
488
+ client.del(key, function (err, reply) {
489
+ winston.debug("Deleted cache for subscription.create",reply);
490
+ winston.verbose("Deleted cache for subscription.create",{err:err});
491
+ });
492
+ });
493
+ });
494
+
495
+ subscriptionEvent.on('subscription.update', function(trigger) {
496
+ setImmediate(() => {
497
+ var key =trigger.id_project+":subscriptions:*";
498
+ winston.verbose("Deleting cache for subscription.update with key: " + key);
499
+ client.del(key, function (err, reply) {
500
+ winston.debug("Deleted cache for subscription.update",reply);
501
+ winston.verbose("Deleted cache for subscription.update",{err:err});
502
+ });
503
+ });
504
+ });
505
+
506
+ subscriptionEvent.on("subscription.delete", function(trigger) {
507
+ setImmediate(() => {
508
+ var key =trigger.id_project+":subscriptions:*";
509
+ winston.verbose("Deleting cache for subscription.delete with key: " + key);
510
+ client.del(key, function (err, reply) {
511
+ winston.debug("Deleted cache for subscription.delete",reply);
512
+ winston.verbose("Deleted cache for subscription.delete",{err:err});
513
+ });
514
+ });
515
+ });
516
+
517
+ }
518
+
519
+
520
+ if (triggerEventEmitter) {
521
+ triggerEventEmitter.on('trigger.create', function(trigger) {
522
+ setImmediate(() => {
523
+
524
+ var key =trigger.id_project+":triggers:*";
525
+ winston.verbose("Deleting cache for trigger.create with key: " + key);
526
+ client.del(key, function (err, reply) {
527
+ winston.debug("Deleted cache for trigger.create",reply);
528
+ winston.verbose("Deleted cache for trigger.create",{err:err});
529
+ });
530
+ });
531
+ });
532
+
533
+ triggerEventEmitter.on('trigger.update', function(trigger) {
534
+ setImmediate(() => {
535
+ var key =trigger.id_project+":triggers:*";
536
+ winston.verbose("Deleting cache for trigger.update with key: " + key);
537
+ client.del(key, function (err, reply) {
538
+ winston.debug("Deleted cache for trigger.update",reply);
539
+ winston.verbose("Deleted cache for trigger.update",{err:err});
540
+ });
541
+ });
542
+ });
543
+
544
+ triggerEventEmitter.on("trigger.delete", function(trigger) {
545
+ setImmediate(() => {
546
+ var key =trigger.id_project+":triggers:*";
547
+ winston.verbose("Deleting cache for trigger.delete with key: " + key);
548
+ client.del(key, function (err, reply) {
549
+ winston.debug("Deleted cache for trigger.delete",reply);
550
+ winston.verbose("Deleted cache for trigger.delete",{err:err});
551
+ });
552
+ });
553
+ });
554
+
555
+ }
556
+
453
557
  //jwt
454
558
 
455
559
  // 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+":simple") //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+":simple") //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);
@@ -290,6 +296,8 @@ async (req, res) => {
290
296
 
291
297
 
292
298
 
299
+
300
+
293
301
  // router.put('/:messageid', function(req, res) {
294
302
 
295
303
  // 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.project) {
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) { cache disabled beacuse cacheoose don't support .populate without lean. here cache is not important
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,51 @@
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.faq_kb = true;
25
+ if (process.env.CACHE_FAQ_KB_ENABLED=="false" || process.env.CACHE_FAQ_KB_ENABLED==false) {
26
+ this.faq_kb = false;
27
+ }
28
+
29
+
30
+ // this.project_user = true;
31
+ // if (process.env.CACHE_PROJECT_USER_ENABLED=="false" || process.env.CACHE_PROJECT_USER_ENABLED==false) {
32
+ // this.project_user = false;
33
+ // }
34
+
35
+ // this.user = true;
36
+ // if (process.env.CACHE_USER_ENABLED=="false" || process.env.CACHE_USER_ENABLED==false) {
37
+ // this.user = false;
38
+ // }
39
+
40
+ // this.message = true;
41
+ // if (process.env.CACHE_MESSAGE_ENABLED=="false" || process.env.CACHE_MESSAGE_ENABLED==false) {
42
+ // this.message = false;
43
+ // }
44
+ }
45
+ }
46
+
47
+
48
+ var cacheEnabler = new CacheEnabler();
49
+
50
+
51
+ module.exports = cacheEnabler;
@@ -8,6 +8,8 @@ var winston = require('../config/winston');
8
8
  const departmentEvent = require('../event/departmentEvent');
9
9
  const Request = require('../models/request');
10
10
  const RoleConstants = require ('../models/roleConstants')
11
+ var cacheEnabler = require("../services/cacheEnabler");
12
+ var cacheUtil = require("../utils/cacheUtil");
11
13
 
12
14
  class DepartmentService {
13
15
 
@@ -86,7 +88,7 @@ roundRobin(operatorSelectedEvent) {
86
88
 
87
89
  // let lastRequests = await
88
90
  // requestcachefarequi nocachepopulatereqired
89
- Request.find(query).sort({_id:-1}).limit(1).exec(function (err, lastRequests) {
91
+ Request.find(query).sort({_id:-1}).limit(1).exec(function (err, lastRequests) { // cache_attention
90
92
  if (err) {
91
93
  winston.error('Error getting request for RoundRobinOperator', err);
92
94
  return reject(err);
@@ -190,7 +192,12 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
190
192
  // console.log("»»» »»» --> DEPT ID ", departmentid);
191
193
 
192
194
 
193
- return Project.findOne({_id: projectid, status: 100}, function(err, project) {
195
+ let q = Project.findOne({_id: projectid, status: 100})
196
+ if (cacheEnabler.project) {
197
+ q.cache(cacheUtil.defaultTTL, "projects:id:"+projectid) //project_cache
198
+ winston.debug('project cache enabled');
199
+ }
200
+ return q.exec(function(err, project){
194
201
  if (err) {
195
202
  winston.error('Project findById ', err);
196
203
  return reject(err);
@@ -205,6 +212,7 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
205
212
  // TODO questo lo abiliterei solo esplicitamete se si flagga opzione su progetto per performance
206
213
  if (disableWebHookCall==undefined) {
207
214
  //if pro enabled disableWebHookCall = false
215
+ //secondo me qui manca un parentesi tonda per gli or
208
216
  if (project.profile && (project.profile.type === 'free' && project.trialExpired === false) || (project.profile.type === 'payment' && project.isActiveSubscription === true)) {
209
217
  // winston.info('disableWebHookCall pro');
210
218
  disableWebHookCall = false;
@@ -389,6 +397,7 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
389
397
 
390
398
  let objectToReturn = { available_agents: _available_agents, agents: project_users, operators: selectedoperator, department: department, group: group, id_project: projectid, project: project, context: context };
391
399
 
400
+ // var objectToReturnRoundRobin = objectToReturn;
392
401
  that.roundRobin(objectToReturn).then(function(objectToReturnRoundRobin){
393
402
 
394
403
  winston.debug("context2",context);
@@ -450,6 +459,8 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
450
459
 
451
460
  let objectToReturn = { available_agents: _available_agents, agents: project_users, operators: selectedoperator, department: department, id_project: projectid, project: project, context: context };
452
461
 
462
+ // var objectToReturnRoundRobin = objectToReturn;
463
+
453
464
  that.roundRobin(objectToReturn).then(function(objectToReturnRoundRobin) {
454
465
  winston.debug("context2",context);
455
466
  departmentEvent.emit('operator.select.base1', {result:objectToReturnRoundRobin, disableWebHookCall: disableWebHookCall, resolve: resolve, reject: reject, context: context});
@@ -543,8 +554,19 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
543
554
 
544
555
  // console.log('-- > OPERATORS [ getRandomAvailableOperator ] - PROJECT USER AVAILABLE LENGHT ', project_users_available.length);
545
556
  if (project_users_available.length > 0) {
557
+
558
+
559
+ // new
560
+ // num between 0 and 1 * es 3 ->
561
+ // let randomIndex = Math.round(Math.random() * project_users_available.length);
562
+ // // let randomIndex = Math.floor(Math.random() * project_users_available.length);
563
+
564
+ // console.log("randomIndex",randomIndex);
565
+ // var operator = project_users_available[randomIndex];
566
+ // // console.log('OPERATORS - SELECTED MEMBER ID', operator.id_user);
567
+
546
568
  var operator = project_users_available[Math.floor(Math.random() * project_users_available.length)];
547
- // console.log('OPERATORS - SELECTED MEMBER ID', operator.id_user);
569
+
548
570
 
549
571
  return [{ id_user: operator.id_user }];
550
572
  // return [operator];
@@ -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.project) {
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,8 @@ 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
+
43
+ //secondo me qui manca un parentesi tonda per gli or
39
44
  if (project.profile && (project.profile.type === 'free' && project.trialExpired === true) || (project.profile.type === 'payment' && project.isActiveSubscription === false)) {
40
45
  winston.debug('O ---> [ OHS ] -> trial Expired OR Subscription NOT Active - PROJECT ALWAYS OPEN')
41
46
  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+":simple") //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+":simple") //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) { //attention this cache is not usable bacause cacheoose don't support populate without .lean.. so if cached populated field is not returned with cacheoose, updateWaitingTime is only used in chat21webhook but i thik it is important for messages route
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;
@@ -93,7 +93,7 @@ class WebSocketServer {
93
93
  // winston.debug('ok websocket');
94
94
 
95
95
  User.findOne({_id: identifier, status: 100}, 'email firstname lastname emailverified id')
96
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+identifier)
96
+ //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+identifier) //user_cache
97
97
  .exec(function (err, user) {
98
98
 
99
99
 
@@ -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.project) {
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);