@tiledesk/tiledesk-server 2.3.22 → 2.3.24

Sign up to get free protection for your applications and to get access to all the features.
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);