@tiledesk/tiledesk-server 2.3.23 → 2.3.25

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,38 @@
1
+ # 2.3.25
2
+ - Emebedded DialogFlow connector to 1.7.4
3
+
4
+ # 2.3.24
5
+ - Increased cache TTL from: standardTTL from 120 to 300, longTTL from 1200 to 3600
6
+ - Added cache request.create.simple, + cacheEnabler. name fix
7
+ - Disabled unapplicable cache for updateWaitingTimeByRequestId and find request by id REST API
8
+ - Updated dependency @tiledesk/tiledesk-tybot-connector to 0.1.14
9
+ - Restored populateMessageWithRequest. Bug with \agent command. Try to resolve performance with cache
10
+ - Added cache for chat21 webhook event type message. The cache key is without the project id
11
+ - Disabled cache for chat21 webhook conversation archived method
12
+ - Added cache for message event lookup
13
+ - Added cache for chat21 webhook event type message
14
+ - Added cache for getoperator method of department service
15
+
16
+ 💥 TILEDESK SERVER v2.3.23 💥
17
+ 🚀 TAGGED AND PUBLISHED ON NPM 🚀
18
+ 🚀 IN PRODUCTION 🚀
19
+ (https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.17)
1
20
 
21
+ # 2.3.23 -> PROD
22
+ - cacheEnabler + trigger cache + subscription cache
23
+ - project cache with cacheEnabler
24
+ - request cache with cacheEnabler
25
+ - Updated dependency @tiledesk/tiledesk-tybot-connector to 0.1.10
26
+ - Added trigger and subscription cache invalidation rules
27
+
28
+ # 2.3.22
29
+ - added cacheoose dep package.json
30
+ - Updated dependency @tiledesk/tiledesk-tybot-connector to 0.1.8
2
31
 
3
32
  # 2.3.21
33
+ - log fix
34
+ - Updated dependency @tiledesk/tiledesk-tybot-connector to 0.1.7
35
+ - Moved cache module to public module
4
36
  - filter request by smartAssignment
5
37
 
6
38
  # 2.3.20
@@ -11,14 +43,13 @@
11
43
  - Moved route-queue to public module
12
44
  - Disable queue module if JOB_WORKER_ENABLED is true
13
45
 
46
+ # 2.3.18.6 -> PROD
47
+ - logfix
14
48
 
49
+ # 2.3.18.1
50
+ - Updated dependency @tiledesk/tiledesk-tybot-connector to 0.1.10
15
51
 
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
52
+ # 2.3.18
22
53
  - Added profileStatus field to the project_user model
23
54
  - Added smartAssignment field to the request model
24
55
  - Canned responses default limit value increased from 40 to 1000
package/app.js CHANGED
@@ -142,8 +142,7 @@ botSubscriptionNotifier.start();
142
142
 
143
143
 
144
144
  var geoService = require('./services/geoService');
145
- geoService.listen();
146
-
145
+ geoService.listen();
147
146
 
148
147
 
149
148
 
@@ -323,7 +322,7 @@ var projectSetter = function (req, res, next) {
323
322
  if (projectid) {
324
323
 
325
324
  let q = Project.findOne({_id: projectid, status: 100});
326
- if (cacheEnabler.trigger) {
325
+ if (cacheEnabler.project) {
327
326
  q.cache(cacheUtil.defaultTTL, "projects:id:"+projectid) //project_cache
328
327
  winston.debug('project cache enabled');
329
328
  }
@@ -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});
@@ -202,7 +210,7 @@ router.post('/', function (req, res) {
202
210
  }
203
211
 
204
212
 
205
-
213
+
206
214
 
207
215
 
208
216
  var new_request = {
@@ -210,7 +218,7 @@ router.post('/', function (req, res) {
210
218
  departmentid:departmentid, sourcePage:sourcePage, language:language, userAgent:client, status:requestStatus, createdBy: undefined,
211
219
  attributes:rAttributes, subject:undefined, preflight:false, channel:undefined, location:undefined,
212
220
  lead:createdLead, requester:project_user
213
-
221
+
214
222
  };
215
223
 
216
224
  winston.debug("new_request", new_request);
@@ -379,10 +387,10 @@ router.post('/', function (req, res) {
379
387
  winston.debug('query:'+ projectId);
380
388
 
381
389
  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
- }
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
+ // }
386
394
  return q.exec(function(err, request) {
387
395
 
388
396
  if (err) {
@@ -465,7 +473,7 @@ router.post('/', function (req, res) {
465
473
 
466
474
  // requestcachefarequi populaterequired
467
475
  return Request.findOne({request_id: request_id, id_project: id_project})
468
- .populate('lead') //TODO posso prenderlo da snapshot senza populate
476
+ .populate('lead') //TODO posso prenderlo da snapshot senza populate cache_attention
469
477
  .exec(function(err, request) {
470
478
  if (err){
471
479
  winston.error(err);
@@ -632,7 +640,7 @@ else if (req.body.event_type == "typing-start") {
632
640
  // requestcachefarequi nocachepopulatereqired
633
641
  return Request.findOne({request_id: recipient_id})
634
642
  //TOD errore cache sistemare e riabbilitare->
635
- // .cache(cacheUtil.defaultTTL, req.projectid+":requests:request_id:"+recipient_id)
643
+ // .cache(cacheUtil.defaultTTL, req.projectid+":requests:request_id:"+recipient_id) cache_attention
636
644
  .exec(function(err, request) {
637
645
  if (err){
638
646
  winston.error(err);
@@ -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
 
@@ -70,8 +74,7 @@ function populateMessageWithRequest(message, eventPrefix) {
70
74
  // request.department._id DA CORREGGERE ANCHE PER REQUEST.CREATE
71
75
  // request.department.hasBot
72
76
  // request.isOpen
73
-
74
-
77
+ winston.info('message Event populate');
75
78
  if (cacheEnabler.request) {
76
79
  q.cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient) //request_cache ma con lean????attento metti a parte
77
80
  winston.debug('request cache enabled');
@@ -83,6 +86,9 @@ function populateMessageWithRequest(message, eventPrefix) {
83
86
  return messageEvent.emit(eventPrefix, message);
84
87
  }
85
88
 
89
+ winston.debug('message Event populate after query');
90
+
91
+
86
92
  if (request) {
87
93
  winston.debug("request is defined in messageEvent",request );
88
94
 
@@ -91,9 +97,14 @@ function populateMessageWithRequest(message, eventPrefix) {
91
97
 
92
98
  if (request.department && request.department.id_bot) {
93
99
  // if (request.department) {
94
- Faq_kb.findById(request.department.id_bot)
95
- //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":faq_kbs:id:"+request.department.id_bot)
96
- .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) {
97
108
  winston.debug('bot', bot);
98
109
  requestJson.department.bot = bot
99
110
 
@@ -169,10 +180,12 @@ messageEvent.on('message.update.simple', populateMessageUpdate);
169
180
 
170
181
 
171
182
 
172
- // riattiva commentato per performance
183
+ // // riattiva commentato per performance
184
+
173
185
  // // spostare su classe
174
186
 
175
187
 
188
+
176
189
  // var messageCreateKey = 'message.create';
177
190
  // if (messageEvent.queueEnabled) {
178
191
  // messageCreateKey = 'message.create.queue';
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.23",
4
+ "version": "2.3.25",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -29,7 +29,6 @@
29
29
  "tiledesk-server": "./bin/www"
30
30
  },
31
31
  "optionalDependencies": {
32
- "@tiledesk-ent/tiledesk-server-dialogflow": "^1.1.6",
33
32
  "@tiledesk-ent/tiledesk-server-jwthistory": "^1.1.9",
34
33
  "@tiledesk-ent/tiledesk-server-payments": "^1.1.6",
35
34
  "@tiledesk-ent/tiledesk-server-request-history": "^1.1.5",
@@ -41,7 +40,8 @@
41
40
  "@tiledesk/tiledesk-chatbot-util": "^0.8.33",
42
41
  "@tiledesk/tiledesk-json-rules-engine": "^4.0.3",
43
42
  "@tiledesk/tiledesk-rasa-connector": "^1.0.10",
44
- "@tiledesk/tiledesk-tybot-connector": "^0.1.10",
43
+ "@tiledesk/tiledesk-tybot-connector": "^0.1.14",
44
+ "@tiledesk/tiledesk-dialogflow-connector": "^1.7.4",
45
45
  "app-root-path": "^3.0.0",
46
46
  "bcrypt-nodejs": "0.0.3",
47
47
  "body-parser": "^1.20.0",
@@ -13,7 +13,7 @@
13
13
 
14
14
  var cachegoose = require('cachegoose');
15
15
 
16
- var defaultTTL = process.env.CACHE_DEFAULT_TTL || 120;
16
+ var defaultTTL = process.env.CACHE_DEFAULT_TTL || 300;
17
17
 
18
18
 
19
19
  function listen(client) {
@@ -203,6 +203,35 @@
203
203
 
204
204
 
205
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
+
206
235
  requestEvent.on("request.create", function(request) {
207
236
  setImmediate(() => {
208
237
  var key = request.id_project+":requests:id:"+request.id;
@@ -0,0 +1,10 @@
1
+ const listener = require("./listener");
2
+
3
+ const dialogflow = require("@tiledesk/tiledesk-dialogflow-connector");
4
+ const dialogflowRoute = dialogflow.router;
5
+
6
+
7
+
8
+
9
+
10
+ module.exports = { listener: listener, dialogflowRoute: dialogflowRoute };
@@ -0,0 +1,66 @@
1
+ const botEvent = require('../../event/botEvent');
2
+ var Faq_kb = require("../../models/faq_kb");
3
+ var winston = require('../../config/winston');
4
+ const df = require("@tiledesk/tiledesk-dialogflow-connector");
5
+ var configGlobal = require('../../config/global');
6
+
7
+ var port = process.env.PORT || '3000';
8
+
9
+ const BOT_DIALOGFLOW_ENDPOINT = process.env.BOT_DIALOGFLOW_ENDPOINT || "http://localhost:" + port+ "/modules/dialogflow";
10
+ winston.debug("BOT_DIALOGFLOW_ENDPOINT: " + BOT_DIALOGFLOW_ENDPOINT);
11
+
12
+ // if (BOT_DIALOGFLOW_ENDPOINT) {
13
+ winston.info("Dialogflow endpoint: " + BOT_DIALOGFLOW_ENDPOINT);
14
+ // } else {
15
+ // winston.info("Dialogflow endpoint not configured");
16
+ // }
17
+
18
+
19
+ const apiUrl = process.env.API_URL || configGlobal.apiUrl;
20
+ winston.info('Dialogflow apiUrl: '+ apiUrl);
21
+
22
+ class Listener {
23
+
24
+ listen(config) {
25
+
26
+ winston.debug('dialogflow Listener listen');
27
+
28
+ var that = this;
29
+
30
+
31
+ df.startApp(
32
+ {
33
+ MONGODB_URI: config.databaseUri,
34
+ API_ENDPOINT: apiUrl,
35
+ log: process.env.DIALOGFLOW_LOG
36
+ }, () => {
37
+ winston.info("Dialogflow route successfully started.");
38
+ }
39
+ );
40
+
41
+ botEvent.on('faqbot.create', function(bot) {
42
+ if (BOT_DIALOGFLOW_ENDPOINT) {
43
+
44
+ if (bot.type==="dialogflow") {
45
+ // bot.url = BOT_DIALOGFLOW_ENDPOINT;
46
+
47
+ Faq_kb.findByIdAndUpdate(bot.id, {"url":BOT_DIALOGFLOW_ENDPOINT}, { new: true, upsert: true }, function (err, savedFaq_kb) {
48
+
49
+ // bot.save(function (err, savedFaq_kb) {
50
+ if (err) {
51
+ return winston.error('error saving faqkb dialogflow ', err)
52
+ }
53
+ winston.verbose('Saved faqkb dialogflow', savedFaq_kb.toObject())
54
+ });
55
+ }
56
+ }
57
+ });
58
+
59
+ }
60
+
61
+ }
62
+
63
+ var listener = new Listener();
64
+
65
+
66
+ module.exports = listener;
@@ -45,7 +45,7 @@ class MessageTransformerInterceptor {
45
45
  // populate({path:'requester',populate:{path:'id_user'}}).
46
46
 
47
47
  if (cacheEnabler.request) {
48
- q.cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient) //request_cache nocachepopulatereqired
48
+ q.cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient+":simple") //request_cache nocachepopulatereqired
49
49
  winston.debug('request cache enabled');
50
50
  }
51
51
 
@@ -41,6 +41,8 @@ class PubModulesManager {
41
41
  this.routingQueue = undefined;
42
42
 
43
43
  this.cache = undefined;
44
+
45
+ this.dialogFlow = undefined;
44
46
  }
45
47
 
46
48
 
@@ -55,6 +57,11 @@ class PubModulesManager {
55
57
  app.use('/modules/tilebot', this.tilebotRoute);
56
58
  winston.info("ModulesManager tilebot controller loaded");
57
59
  }
60
+
61
+ if (this.dialogFlow) {
62
+ app.use("/modules/dialogFlow", this.dialogFlow.dialogflowRoute);
63
+ winston.info("ModulesManager dialogFlow controller loaded");
64
+ }
58
65
 
59
66
  }
60
67
  useUnderProjects(app) {
@@ -335,7 +342,20 @@ class PubModulesManager {
335
342
  }
336
343
  }
337
344
 
345
+
338
346
 
347
+ try {
348
+ this.dialogFlow = require('./dialogflow');
349
+ winston.debug("this.dialogFlow:"+ this.dialogFlow);
350
+ this.dialogFlow.listener.listen(config);
351
+ winston.info("PubModulesManager dialogFlow initialized");
352
+ } catch(err) {
353
+ if (err.code == 'MODULE_NOT_FOUND') {
354
+ winston.info("PubModulesManager init dialogFlow module not found");
355
+ }else {
356
+ winston.error("PubModulesManager error initializing init dialogFlow module", err);
357
+ }
358
+ }
339
359
  }
340
360
 
341
361
  start() {
@@ -411,11 +431,20 @@ class PubModulesManager {
411
431
  }
412
432
  }
413
433
 
434
+ // if (this.dialogFlow) {
435
+ // try {
436
+ // this.dialogFlow.listen();
437
+ // winston.info("PubModulesManager dialogFlow started");
438
+ // } catch(err) {
439
+ // winston.info("PubModulesManager error starting dialogFlow module", err);
440
+ // }
441
+ // }
442
+
414
443
 
415
444
  }
416
445
 
417
446
 
418
-
447
+
419
448
  }
420
449
 
421
450
  var pubModulesManager = new PubModulesManager();
package/routes/message.js CHANGED
@@ -53,7 +53,7 @@ async (req, res) => {
53
53
  return res.status(422).json({ errors: errors.array() });
54
54
  }
55
55
 
56
-
56
+
57
57
  var project_user = req.projectuser;
58
58
  var sender = req.body.sender;
59
59
  var fullname = req.body.senderFullname || req.user.fullName;
@@ -64,7 +64,7 @@ async (req, res) => {
64
64
 
65
65
  let q = Request.findOne({request_id: req.params.request_id, id_project: req.projectid});
66
66
  if (cacheEnabler.request) {
67
- q.cache(cacheUtil.defaultTTL, req.projectid+":requests:request_id:"+req.params.request_id) //request_cache
67
+ q.cache(cacheUtil.defaultTTL, req.projectid+":requests:request_id:"+req.params.request_id+":simple") //request_cache
68
68
  winston.debug('request cache enabled');
69
69
  }
70
70
  // cacherequest // requestcachefarequi nocachepopulatereqired
@@ -295,6 +295,9 @@ async (req, res) => {
295
295
  });
296
296
 
297
297
 
298
+
299
+
300
+
298
301
  // router.put('/:messageid', function(req, res) {
299
302
 
300
303
  // console.log(req.body);
package/routes/project.js CHANGED
@@ -451,7 +451,7 @@ Project.findByIdAndUpdate(req.params.projectid, { $pull: { bannedUsers: { "_id":
451
451
  router.get('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['subscription'])], function (req, res) {
452
452
  winston.debug(req.body);
453
453
  let q = Project.findOne({_id: req.params.projectid, status:100});
454
- if (cacheEnabler.trigger) {
454
+ if (cacheEnabler.project) {
455
455
  q.cache(cacheUtil.defaultTTL, "projects:id:"+req.params.projectid) //project_cache
456
456
  winston.debug('project cache enabled');
457
457
  }
package/routes/request.js CHANGED
@@ -1266,10 +1266,10 @@ router.get('/:requestid', function (req, res) {
1266
1266
  .populate('participatingAgents')
1267
1267
  .populate({path:'requester',populate:{path:'id_user'}});
1268
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
- }
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
1273
  //
1274
1274
  // .populate({path:'requester',populate:{path:'id_user', select:{'firstname':1, 'lastname':1}}})
1275
1275
  q.exec(function(err, request) {
@@ -21,20 +21,26 @@ class CacheEnabler {
21
21
  this.request = false;
22
22
  }
23
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;
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
27
  }
28
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
- }
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
+ // }
38
44
  }
39
45
  }
40
46
 
@@ -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];
@@ -36,12 +36,8 @@ class ModulesManager {
36
36
  this.facebookRoute = undefined;
37
37
  this.jwthistoryArchiver = undefined;
38
38
  this.jwthistoryRoute = undefined;
39
- this.dialogflowListener = undefined;
40
39
  this.requestHistoryArchiver = undefined;
41
- this.requestHistoryRoute = undefined;
42
- // this.routingQueue = undefined;
43
- // this.queue = undefined;
44
- // this.cache = undefined;
40
+ this.requestHistoryRoute = undefined;
45
41
  this.visitorCounterRoute = undefined;
46
42
  this.visitorCounterMiddleware = undefined;
47
43
  this.widgetsRoute = undefined;
@@ -202,62 +198,19 @@ class ModulesManager {
202
198
 
203
199
 
204
200
 
205
- try {
206
- this.dialogflowListener = require('@tiledesk-ent/tiledesk-server-dialogflow').listener;
207
- // this.dialogflowListener.listen();
208
- winston.debug("this.dialogflowListener:"+ this.dialogflowListener);
209
-
210
- winston.info("ModulesManager dialogflow initialized");
211
- } catch(err) {
212
- if (err.code == 'MODULE_NOT_FOUND') {
213
- winston.info("ModulesManager init dialogflow module not found");
214
- }else {
215
- winston.error("ModulesManager error initializing init dialogflow module", err);
216
- }
217
- }
218
-
219
-
220
201
  // try {
221
- // this.routingQueue = require('@tiledesk-ent/tiledesk-server-routing-queue').listener;
222
- // // this.routingQueue.listen();
223
- // winston.debug("this.routingQueue:"+ this.routingQueue);
202
+ // this.dialogflowListener = require('@tiledesk-ent/tiledesk-server-dialogflow').listener;
203
+ // // this.dialogflowListener.listen();
204
+ // winston.debug("this.dialogflowListener:"+ this.dialogflowListener);
224
205
 
225
- // winston.info("ModulesManager routing queue initialized");
206
+ // winston.info("ModulesManager dialogflow initialized");
226
207
  // } catch(err) {
227
208
  // if (err.code == 'MODULE_NOT_FOUND') {
228
- // winston.info("ModulesManager init routing queue module not found");
209
+ // winston.info("ModulesManager init dialogflow module not found");
229
210
  // }else {
230
- // winston.error("ModulesManager error initializing init routing queue module", err);
211
+ // winston.error("ModulesManager error initializing init dialogflow module", err);
231
212
  // }
232
- // }
233
-
234
-
235
-
236
- // try {
237
- // this.queue = require('@tiledesk-ent/tiledesk-server-queue');
238
- // winston.debug("this.queue:"+ this.queue);
239
-
240
- // winston.info("ModulesManager queue initialized");
241
- // } catch(err) {
242
- // if (err.code == 'MODULE_NOT_FOUND') {
243
- // winston.info("ModulesManager init queue module not found");
244
- // }else {
245
- // winston.error("ModulesManager error initializing init queue module", err);
246
- // }
247
- // }
248
-
249
-
250
- // try {
251
- // this.cache = require('@tiledesk-ent/tiledesk-server-cache').cachegoose(config.mongoose);
252
- // winston.debug("this.cache:"+ this.cache);
253
- // winston.info("ModulesManager cache initialized");
254
- // } catch(err) {
255
- // if (err.code == 'MODULE_NOT_FOUND') {
256
- // winston.info("ModulesManager init cache module not found");
257
- // }else {
258
- // winston.error("ModulesManager error initializing init cache module", err);
259
- // }
260
- // }
213
+ // }
261
214
 
262
215
 
263
216
 
@@ -330,22 +283,15 @@ class ModulesManager {
330
283
  winston.info("ModulesManager error starting requestHistoryArchiver module", err);
331
284
  }
332
285
  }
333
- // if (this.routingQueue) {
286
+
287
+ // if (this.dialogflowListener) {
334
288
  // try {
335
- // this.routingQueue.listen();
336
- // winston.info("ModulesManager routingQueue started");
289
+ // this.dialogflowListener.listen();
290
+ // winston.info("ModulesManager dialogflowListener started");
337
291
  // } catch(err) {
338
- // winston.info("ModulesManager error starting routingQueue module", err);
292
+ // winston.info("ModulesManager error starting dialogflowListener module", err);
339
293
  // }
340
294
  // }
341
- if (this.dialogflowListener) {
342
- try {
343
- this.dialogflowListener.listen();
344
- winston.info("ModulesManager dialogflowListener started");
345
- } catch(err) {
346
- winston.info("ModulesManager error starting dialogflowListener module", err);
347
- }
348
- }
349
295
 
350
296
 
351
297
 
@@ -12,7 +12,7 @@ class OperatingHoursService {
12
12
 
13
13
  // winston.debug('O ---> [ OHS ] -> PROJECT ID ', projectId)
14
14
  let q = Project.findOne({_id: projectId, status: 100});
15
- if (cacheEnabler.trigger) {
15
+ if (cacheEnabler.project) {
16
16
  q.cache(cacheUtil.defaultTTL, "projects:id:"+projectId) //project_cache
17
17
  winston.debug('project cache enabled');
18
18
  }
@@ -40,6 +40,7 @@ class OperatingHoursService {
40
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,
41
41
  // THE USER HAS SETTED ALL DAYS TO CLOSED
42
42
 
43
+ //secondo me qui manca un parentesi tonda per gli or
43
44
  if (project.profile && (project.profile.type === 'free' && project.trialExpired === true) || (project.profile.type === 'payment' && project.isActiveSubscription === false)) {
44
45
  winston.debug('O ---> [ OHS ] -> trial Expired OR Subscription NOT Active - PROJECT ALWAYS OPEN')
45
46
  callback(true, null) ;
@@ -231,7 +231,7 @@ class RequestService {
231
231
  .findOne({request_id: request_id, id_project: id_project});
232
232
 
233
233
  if (cacheEnabler.request) {
234
- q.cache(cacheUtil.defaultTTL, id_project+":requests:request_id:"+request_id) //request_cache
234
+ q.cache(cacheUtil.defaultTTL, id_project+":requests:request_id:"+request_id+":simple") //request_cache
235
235
  winston.debug('request cache enabled');
236
236
  }
237
237
  return q.exec( function(err, request) {
@@ -387,7 +387,7 @@ class RequestService {
387
387
  .findOne({request_id: request_id, id_project: id_project});
388
388
 
389
389
  if (cacheEnabler.request) {
390
- q.cache(cacheUtil.defaultTTL, id_project+":requests:request_id:"+request_id) //request_cache
390
+ q.cache(cacheUtil.defaultTTL, id_project+":requests:request_id:"+request_id+":simple") //request_cache
391
391
  winston.debug('request cache enabled');
392
392
  }
393
393
 
@@ -981,10 +981,10 @@ class RequestService {
981
981
  .populate('participatingAgents')
982
982
  .populate({path:'requester',populate:{path:'id_user'}});
983
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
- }
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
988
  q.exec(function(err, request) {
989
989
  if (err) {
990
990
  winston.error(err);
@@ -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
 
@@ -187,7 +187,7 @@ class WebSocketServer {
187
187
 
188
188
  let q = Project.findOne({ _id: projectId, status: 100})
189
189
 
190
- if (cacheEnabler.trigger) {
190
+ if (cacheEnabler.project) {
191
191
  q.cache(cacheUtil.defaultTTL, "projects:id:"+projectId) //project_cache
192
192
  winston.debug('project cache enabled');
193
193
  }