@tiledesk/tiledesk-server 2.3.6 → 2.3.7-1.2
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/.github/workflows/docker-community-worker-push-latest.yml +23 -0
- package/.github/workflows/docker-image-tag-worker-community-tag-push.yml +22 -0
- package/CHANGELOG.md +361 -3
- package/Dockerfile-jobs +31 -0
- package/app.js +62 -69
- package/channels/chat21/chat21Handler.js +37 -6
- package/channels/chat21/chat21WebHook.js +62 -34
- package/channels/chat21/package-lock.json +663 -706
- package/channels/chat21/package.json +2 -2
- package/config/labels/widget.json +337 -136
- package/deploy.sh +2 -0
- package/event/messageEvent.js +110 -9
- package/jobs.js +80 -0
- package/jobsManager.js +47 -0
- package/middleware/has-role.js +10 -3
- package/middleware/ipFilter.js +220 -0
- package/middleware/passport.js +8 -2
- package/models/department.js +1 -1
- package/models/faq.js +77 -25
- package/models/faq_kb.js +19 -0
- package/models/message.js +10 -8
- package/models/project.js +10 -0
- package/models/project_user.js +10 -0
- package/models/request.js +12 -1
- package/package.json +12 -11
- package/pubmodules/activities/activityArchiver.js +216 -90
- package/pubmodules/activities/routes/activity.js +1 -1
- package/pubmodules/apps/index.js +8 -0
- package/pubmodules/apps/listener.js +27 -0
- package/pubmodules/cache/index.js +2 -0
- package/pubmodules/cache/mongoose-cachegoose-fn.js +630 -0
- package/pubmodules/canned/cannedResponse.js +4 -0
- package/pubmodules/canned/cannedResponseRoute.js +10 -5
- package/pubmodules/dialogflow/index.js +10 -0
- package/pubmodules/dialogflow/listener.js +66 -0
- package/pubmodules/emailNotification/requestNotification.js +58 -28
- package/pubmodules/events/eventRoute.js +49 -24
- package/pubmodules/messageTransformer/messageHandlebarsTransformerInterceptor.js +6 -1
- package/pubmodules/messageTransformer/messageTransformerInterceptor.js +10 -4
- package/pubmodules/pubModulesManager.js +173 -7
- package/pubmodules/queue/index.js +4 -0
- package/pubmodules/queue/reconnect.js +331 -0
- package/pubmodules/queue/reconnectFanout.js +256 -0
- package/pubmodules/rasa/listener.js +5 -5
- package/pubmodules/routing-queue/index.js +3 -0
- package/pubmodules/routing-queue/listener.js +328 -0
- package/pubmodules/rules/conciergeBot.js +2 -2
- package/pubmodules/scheduler/tasks/closeAgentUnresponsiveRequestTask.js +6 -1
- package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +7 -1
- package/pubmodules/tilebot/index.js +11 -0
- package/pubmodules/tilebot/listener.js +85 -0
- package/pubmodules/trigger/rulesTrigger.js +137 -14
- package/pubmodules/trigger/start.js +5 -1
- package/pubmodules/whatsapp/index.js +7 -0
- package/pubmodules/whatsapp/listener.js +32 -0
- package/routes/auth.js +7 -2
- package/routes/campaigns.js +3 -3
- package/routes/department.js +3 -2
- package/routes/email.js +32 -2
- package/routes/faq.js +37 -2
- package/routes/faq_kb.js +496 -133
- package/routes/faqpub.js +5 -0
- package/routes/lead.js +56 -0
- package/routes/message.js +196 -14
- package/routes/messagesRoot.js +39 -0
- package/routes/project.js +76 -4
- package/routes/project_user.js +11 -1
- package/routes/project_user_test.js +19 -0
- package/routes/request.js +134 -30
- package/routes/troubleshooting.js +12 -0
- package/routes/users-util.js +39 -0
- package/routes/users.js +1 -1
- package/routes/widget.js +64 -2
- package/services/BotSubscriptionNotifier.js +5 -0
- package/services/banUserNotifier.js +86 -0
- package/services/cacheEnabler.js +56 -0
- package/services/chatbotService.js +101 -0
- package/services/departmentService.js +25 -3
- package/services/emailService.js +170 -28
- package/services/faqBotHandler.js +2 -3
- package/services/faqService.js +28 -3
- package/services/geoService.js +36 -6
- package/services/labelService.js +1 -1
- package/services/leadService.js +3 -2
- package/services/messageService.js +4 -2
- package/services/modulesManager.js +23 -76
- package/services/operatingHoursService.js +9 -4
- package/services/requestService.js +75 -39
- package/services/subscriptionNotifier.js +9 -4
- package/services/trainingService.js +106 -0
- package/template/email/assignedEmailMessage.html +21 -11
- package/template/email/assignedRequest.html +21 -11
- package/template/email/beenInvitedExistingUser.html +16 -6
- package/template/email/beenInvitedNewUser.html +16 -6
- package/template/email/emailDirect.html +130 -0
- package/template/email/newMessage.html +18 -8
- package/template/email/newMessageFollower.html +22 -12
- package/template/email/passwordChanged.html +15 -5
- package/template/email/pooledEmailMessage.html +21 -11
- package/template/email/pooledRequest.html +20 -10
- package/template/email/resetPassword.html +15 -5
- package/template/email/sendTranscript.html +7 -4
- package/template/email/ticket.html +17 -7
- package/template/email/verify.html +15 -5
- package/test/cannedRoute.js +157 -0
- package/test/chatbot-mock.js +127 -0
- package/test/example-json-intents.txt +1 -0
- package/test/example-json.txt +1 -0
- package/test/example.json +1 -0
- package/test/faqRoute.js +353 -208
- package/test/faqkbRoute.js +669 -64
- package/test/imageRoute.js +1 -1
- package/test/messageRoute.js +387 -5
- package/test/requestRoute.js +6 -6
- package/test/requestService.js +55 -4
- package/test-int/cache-project.js +90 -0
- package/test-int/cache-project_user.js +88 -0
- package/utils/UIDGenerator.js +20 -0
- package/utils/cacheUtil.js +2 -2
- package/utils/orgUtil.js +3 -3
- package/utils/promiseUtil.js +31 -0
- package/utils/recipientEmailUtil.js +66 -0
- package/utils/sendEmailUtil.js +34 -0
- package/utils/sendMessageUtil.js +1 -1
- package/utils/stringUtil.js +12 -0
- package/websocket/webSocketServer.js +33 -10
|
@@ -21,6 +21,12 @@ class PubModulesManager {
|
|
|
21
21
|
this.rasa = undefined;
|
|
22
22
|
this.rasaRoute = undefined;
|
|
23
23
|
|
|
24
|
+
this.apps = undefined;
|
|
25
|
+
this.appsRoute = undefined;
|
|
26
|
+
|
|
27
|
+
this.whatsapp = undefined;
|
|
28
|
+
this.whatsappRoute = undefined;
|
|
29
|
+
|
|
24
30
|
this.activityArchiver = undefined;
|
|
25
31
|
this.activityRoute = undefined;
|
|
26
32
|
|
|
@@ -31,6 +37,18 @@ class PubModulesManager {
|
|
|
31
37
|
this.trigger = undefined;
|
|
32
38
|
this.triggerRoute = undefined;
|
|
33
39
|
|
|
40
|
+
this.tilebot = undefined;
|
|
41
|
+
this.tilebotRoute = undefined;
|
|
42
|
+
|
|
43
|
+
this.queue = undefined;
|
|
44
|
+
|
|
45
|
+
this.jobsManager = undefined;
|
|
46
|
+
|
|
47
|
+
this.routingQueue = undefined;
|
|
48
|
+
|
|
49
|
+
this.cache = undefined;
|
|
50
|
+
|
|
51
|
+
this.dialogFlow = undefined;
|
|
34
52
|
}
|
|
35
53
|
|
|
36
54
|
|
|
@@ -41,6 +59,23 @@ class PubModulesManager {
|
|
|
41
59
|
app.use('/modules/rasa', this.rasaRoute);
|
|
42
60
|
winston.info("ModulesManager rasaRoute controller loaded");
|
|
43
61
|
}
|
|
62
|
+
if (this.appsRoute) {
|
|
63
|
+
app.use('/modules/apps', this.appsRoute);
|
|
64
|
+
winston.info("ModulesManager appsRoute controller loaded");
|
|
65
|
+
}
|
|
66
|
+
if (this.whatsappRoute) {
|
|
67
|
+
app.use('/modules/whatsapp', this.whatsappRoute);
|
|
68
|
+
winston.info("ModulesManager whatsappRoute controller loaded");
|
|
69
|
+
}
|
|
70
|
+
if (this.tilebotRoute) {
|
|
71
|
+
app.use('/modules/tilebot', this.tilebotRoute);
|
|
72
|
+
winston.info("ModulesManager tilebot controller loaded");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (this.dialogFlow) {
|
|
76
|
+
app.use("/modules/dialogFlow", this.dialogFlow.dialogflowRoute);
|
|
77
|
+
winston.info("ModulesManager dialogFlow controller loaded");
|
|
78
|
+
}
|
|
44
79
|
|
|
45
80
|
}
|
|
46
81
|
useUnderProjects(app) {
|
|
@@ -82,6 +117,8 @@ class PubModulesManager {
|
|
|
82
117
|
init(config) {
|
|
83
118
|
winston.debug("PubModulesManager init");
|
|
84
119
|
|
|
120
|
+
this.jobsManager = config.jobsManager;
|
|
121
|
+
|
|
85
122
|
try {
|
|
86
123
|
this.appRules = require('./rules/appRules');
|
|
87
124
|
// this.appRules.start();
|
|
@@ -122,7 +159,6 @@ class PubModulesManager {
|
|
|
122
159
|
}
|
|
123
160
|
|
|
124
161
|
|
|
125
|
-
|
|
126
162
|
try {
|
|
127
163
|
this.emailNotification = require('./emailNotification');
|
|
128
164
|
winston.debug("this.emailNotification:"+ this.emailNotification);
|
|
@@ -195,8 +231,38 @@ class PubModulesManager {
|
|
|
195
231
|
}
|
|
196
232
|
}
|
|
197
233
|
|
|
234
|
+
try {
|
|
235
|
+
this.apps = require('./apps');
|
|
236
|
+
winston.debug("this.apps: " + this.apps);
|
|
237
|
+
this.apps.listener.listen(config);
|
|
198
238
|
|
|
239
|
+
this.appsRoute = this.apps.appsRoute;
|
|
199
240
|
|
|
241
|
+
winston.info("PubModulesManager initialized apps.");
|
|
242
|
+
} catch(err) {
|
|
243
|
+
if (err.code == 'MODULE_NOT_FOUND') {
|
|
244
|
+
winston.info("PubModulesManager init apps module not found");
|
|
245
|
+
}else {
|
|
246
|
+
winston.info("PubModulesManager error initializing init apps module", err);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
try {
|
|
251
|
+
this.whatsapp = require('./whatsapp');
|
|
252
|
+
winston.debug("this.whatsapp: " + this.whatsapp);
|
|
253
|
+
this.whatsapp.listener.listen(config);
|
|
254
|
+
|
|
255
|
+
this.whatsappRoute = this.whatsapp.whatsappRoute;
|
|
256
|
+
|
|
257
|
+
winston.info("PubModulesManager initialized apps.");
|
|
258
|
+
} catch(err) {
|
|
259
|
+
if (err.code == 'MODULE_NOT_FOUND') {
|
|
260
|
+
winston.info("PubModulesManager init apps module not found");
|
|
261
|
+
}else {
|
|
262
|
+
winston.info("PubModulesManager error initializing init apps module", err);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
200
266
|
|
|
201
267
|
try {
|
|
202
268
|
this.activityArchiver = require('./activities').activityArchiver;
|
|
@@ -257,6 +323,84 @@ class PubModulesManager {
|
|
|
257
323
|
}
|
|
258
324
|
}
|
|
259
325
|
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
try {
|
|
330
|
+
this.tilebot = require('./tilebot');
|
|
331
|
+
winston.debug("this.tilebot:"+ this.tilebot);
|
|
332
|
+
this.tilebot.listener.listen(config);
|
|
333
|
+
this.tilebotRoute = this.tilebot.tilebotRoute;
|
|
334
|
+
|
|
335
|
+
winston.info("PubModulesManager initialized tilebot.");
|
|
336
|
+
} catch(err) {
|
|
337
|
+
if (err.code == 'MODULE_NOT_FOUND') {
|
|
338
|
+
winston.info("PubModulesManager init tilebot module not found");
|
|
339
|
+
}else {
|
|
340
|
+
winston.info("PubModulesManager error initializing init tilebot module", err);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
try {
|
|
348
|
+
this.queue = require('./queue');
|
|
349
|
+
winston.debug("this.queue:"+ this.queue);
|
|
350
|
+
|
|
351
|
+
winston.info("PubModulesManager initialized queue.");
|
|
352
|
+
} catch(err) {
|
|
353
|
+
if (err.code == 'MODULE_NOT_FOUND') {
|
|
354
|
+
winston.info("PubModulesManager init queue module not found");
|
|
355
|
+
}else {
|
|
356
|
+
winston.info("PubModulesManager error initializing init queue module", err);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
try {
|
|
364
|
+
this.routingQueue = require('./routing-queue').listener;
|
|
365
|
+
// this.routingQueue.listen();
|
|
366
|
+
winston.debug("this.routingQueue:"+ this.routingQueue);
|
|
367
|
+
|
|
368
|
+
winston.info("PubModulesManager routing queue initialized");
|
|
369
|
+
} catch(err) {
|
|
370
|
+
if (err.code == 'MODULE_NOT_FOUND') {
|
|
371
|
+
winston.info("PubModulesManager init routing queue module not found");
|
|
372
|
+
}else {
|
|
373
|
+
winston.error("PubModulesManager error initializing init routing queue module", err);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
try {
|
|
379
|
+
this.cache = require('./cache').cachegoose(config.mongoose);
|
|
380
|
+
winston.debug("this.cache:"+ this.cache);
|
|
381
|
+
winston.info("PubModulesManager cache initialized");
|
|
382
|
+
} catch(err) {
|
|
383
|
+
if (err.code == 'MODULE_NOT_FOUND') {
|
|
384
|
+
winston.info("PubModulesManager init cache module not found");
|
|
385
|
+
}else {
|
|
386
|
+
winston.error("PubModulesManager error initializing init cache module", err);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
try {
|
|
393
|
+
this.dialogFlow = require('./dialogflow');
|
|
394
|
+
winston.debug("this.dialogFlow:"+ this.dialogFlow);
|
|
395
|
+
this.dialogFlow.listener.listen(config);
|
|
396
|
+
winston.info("PubModulesManager dialogFlow initialized");
|
|
397
|
+
} catch(err) {
|
|
398
|
+
if (err.code == 'MODULE_NOT_FOUND') {
|
|
399
|
+
winston.info("PubModulesManager init dialogFlow module not found");
|
|
400
|
+
}else {
|
|
401
|
+
winston.error("PubModulesManager error initializing init dialogFlow module", err);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
260
404
|
}
|
|
261
405
|
|
|
262
406
|
start() {
|
|
@@ -291,9 +435,11 @@ class PubModulesManager {
|
|
|
291
435
|
|
|
292
436
|
}
|
|
293
437
|
|
|
438
|
+
// job_here
|
|
294
439
|
if (this.emailNotification) {
|
|
295
440
|
try {
|
|
296
|
-
this.emailNotification.requestNotification.listen();
|
|
441
|
+
// this.emailNotification.requestNotification.listen();
|
|
442
|
+
this.jobsManager.listenEmailNotification(this.emailNotification);
|
|
297
443
|
winston.info("PubModulesManager emailNotification started.");
|
|
298
444
|
} catch(err) {
|
|
299
445
|
winston.info("PubModulesManager error starting requestNotification module", err);
|
|
@@ -309,21 +455,41 @@ class PubModulesManager {
|
|
|
309
455
|
}
|
|
310
456
|
}
|
|
311
457
|
|
|
312
|
-
|
|
458
|
+
// job_here
|
|
313
459
|
if (this.activityArchiver) {
|
|
314
460
|
try {
|
|
315
|
-
this.activityArchiver.listen();
|
|
316
|
-
|
|
461
|
+
// this.activityArchiver.listen();
|
|
462
|
+
this.jobsManager.listenActivityArchiver(this.activityArchiver);
|
|
463
|
+
winston.info("PubModulesManager activityArchiver started");
|
|
464
|
+
} catch(err) {
|
|
465
|
+
winston.info("PubModulesManager error starting activityArchiver module", err);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
if (this.routingQueue) {
|
|
471
|
+
try {
|
|
472
|
+
this.routingQueue.listen();
|
|
473
|
+
winston.info("PubModulesManager routingQueue started");
|
|
317
474
|
} catch(err) {
|
|
318
|
-
winston.info("
|
|
475
|
+
winston.info("PubModulesManager error starting routingQueue module", err);
|
|
319
476
|
}
|
|
320
477
|
}
|
|
321
478
|
|
|
479
|
+
// if (this.dialogFlow) {
|
|
480
|
+
// try {
|
|
481
|
+
// this.dialogFlow.listen();
|
|
482
|
+
// winston.info("PubModulesManager dialogFlow started");
|
|
483
|
+
// } catch(err) {
|
|
484
|
+
// winston.info("PubModulesManager error starting dialogFlow module", err);
|
|
485
|
+
// }
|
|
486
|
+
// }
|
|
487
|
+
|
|
322
488
|
|
|
323
489
|
}
|
|
324
490
|
|
|
325
491
|
|
|
326
|
-
|
|
492
|
+
|
|
327
493
|
}
|
|
328
494
|
|
|
329
495
|
var pubModulesManager = new PubModulesManager();
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
var amqp = require('amqplib/callback_api');
|
|
2
|
+
var winston = require('../../config/winston');
|
|
3
|
+
const requestEvent = require('../../event/requestEvent');
|
|
4
|
+
const messageEvent = require('../../event/messageEvent');
|
|
5
|
+
const authEvent = require('../../event/authEvent');
|
|
6
|
+
// https://elements.heroku.com/addons/cloudamqp
|
|
7
|
+
// https://gist.github.com/carlhoerberg/006b01ac17a0a94859ba#file-reconnect-js
|
|
8
|
+
// http://www.rabbitmq.com/tutorials/tutorial-one-javascript.html
|
|
9
|
+
|
|
10
|
+
// if the connection is closed or fails to be established at all, we will reconnect
|
|
11
|
+
var amqpConn = null;
|
|
12
|
+
|
|
13
|
+
var url = process.env.CLOUDAMQP_URL + "?heartbeat=60" || "amqp://localhost";
|
|
14
|
+
// attento devi aggiornare configMap di PRE E PROD
|
|
15
|
+
// var url = process.env.AMQP_URL + "?heartbeat=60" || "amqp://localhost?heartbeat=60";
|
|
16
|
+
|
|
17
|
+
var exchange = 'amq.topic';
|
|
18
|
+
|
|
19
|
+
function start() {
|
|
20
|
+
amqp.connect(url, function(err, conn) {
|
|
21
|
+
if (err) {
|
|
22
|
+
winston.error("[AMQP]", err);
|
|
23
|
+
return setTimeout(start, 1000);
|
|
24
|
+
}
|
|
25
|
+
conn.on("error", function(err) {
|
|
26
|
+
if (err.message !== "Connection closing") {
|
|
27
|
+
winston.error("[AMQP] conn error", err);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
conn.on("close", function() {
|
|
31
|
+
winston.error("[AMQP] reconnecting");
|
|
32
|
+
return setTimeout(start, 1000);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
winston.info("[AMQP] connected");
|
|
36
|
+
amqpConn = conn;
|
|
37
|
+
|
|
38
|
+
whenConnected();
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function whenConnected() {
|
|
43
|
+
startPublisher();
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
let jobWorkerEnabled = false;
|
|
47
|
+
if (process.env.JOB_WORKER_ENABLED=="true" || process.env.JOB_WORKER_ENABLED == true) {
|
|
48
|
+
jobWorkerEnabled = true;
|
|
49
|
+
}
|
|
50
|
+
winston.info("JobsManager jobWorkerEnabled: "+ jobWorkerEnabled);
|
|
51
|
+
|
|
52
|
+
if (jobWorkerEnabled == false) {
|
|
53
|
+
winston.info("Queue Reconnect start worker");
|
|
54
|
+
startWorker();
|
|
55
|
+
} else {
|
|
56
|
+
winston.info("Queue Reconnect without worker because external worker is enabled");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
var pubChannel = null;
|
|
62
|
+
var offlinePubQueue = [];
|
|
63
|
+
function startPublisher() {
|
|
64
|
+
amqpConn.createConfirmChannel(function(err, ch) {
|
|
65
|
+
if (closeOnErr(err)) return;
|
|
66
|
+
ch.on("error", function(err) {
|
|
67
|
+
winston.error("[AMQP] channel error", err);
|
|
68
|
+
});
|
|
69
|
+
ch.on("close", function() {
|
|
70
|
+
winston.info("[AMQP] channel closed");
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
pubChannel = ch;
|
|
74
|
+
while (true) {
|
|
75
|
+
var m = offlinePubQueue.shift();
|
|
76
|
+
if (!m) break;
|
|
77
|
+
publish(m[0], m[1], m[2]);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// method to publish a message, will queue messages internally if the connection is down and resend later
|
|
83
|
+
function publish(exchange, routingKey, content) {
|
|
84
|
+
try {
|
|
85
|
+
pubChannel.publish(exchange, routingKey, content, { persistent: true },
|
|
86
|
+
function(err, ok) {
|
|
87
|
+
if (err) {
|
|
88
|
+
winston.error("[AMQP] publish", err);
|
|
89
|
+
offlinePubQueue.push([exchange, routingKey, content]);
|
|
90
|
+
pubChannel.connection.close();
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
} catch (e) {
|
|
94
|
+
winston.error("[AMQP] publish", e);
|
|
95
|
+
offlinePubQueue.push([exchange, routingKey, content]);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// A worker that acks messages only if processed succesfully
|
|
100
|
+
// var channel;
|
|
101
|
+
function startWorker() {
|
|
102
|
+
amqpConn.createChannel(function(err, ch) {
|
|
103
|
+
if (closeOnErr(err)) return;
|
|
104
|
+
ch.on("error", function(err) {
|
|
105
|
+
winston.error("[AMQP] channel error", err);
|
|
106
|
+
});
|
|
107
|
+
ch.on("close", function() {
|
|
108
|
+
winston.info("[AMQP] channel closed");
|
|
109
|
+
});
|
|
110
|
+
ch.prefetch(10);//leggila da env
|
|
111
|
+
ch.assertExchange(exchange, 'topic', {
|
|
112
|
+
durable: true
|
|
113
|
+
});
|
|
114
|
+
ch.assertQueue("jobs", { durable: true }, function(err, _ok) {
|
|
115
|
+
if (closeOnErr(err)) return;
|
|
116
|
+
ch.bindQueue(_ok.queue, exchange, "request_create", {}, function(err3, oka) {
|
|
117
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_create");
|
|
118
|
+
winston.info("Data queue", oka)
|
|
119
|
+
});
|
|
120
|
+
ch.bindQueue(_ok.queue, exchange, "request_update_preflight", {}, function(err3, oka) {
|
|
121
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_update_preflight");
|
|
122
|
+
winston.info("Data queue", oka)
|
|
123
|
+
});
|
|
124
|
+
ch.bindQueue(_ok.queue, exchange, "request_participants_update", {}, function(err3, oka) {
|
|
125
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_participants_update");
|
|
126
|
+
winston.info("Data queue", oka)
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
ch.bindQueue(_ok.queue, exchange, "request_update", {}, function(err3, oka) {
|
|
130
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_update");
|
|
131
|
+
winston.info("Data queue", oka)
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
ch.bindQueue(_ok.queue, exchange, "request_close", {}, function(err3, oka) {
|
|
135
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_close");
|
|
136
|
+
winston.info("Data queue", oka)
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
ch.bindQueue(_ok.queue, exchange, "request_close_extended", {}, function(err3, oka) {
|
|
140
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_close_extended");
|
|
141
|
+
winston.info("Data queue", oka)
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
ch.bindQueue(_ok.queue, exchange, "message_create", {}, function(err3, oka) {
|
|
145
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: message_create");
|
|
146
|
+
winston.info("Data queue", oka)
|
|
147
|
+
});
|
|
148
|
+
ch.bindQueue(_ok.queue, exchange, "project_user_update", {}, function(err3, oka) {
|
|
149
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: project_user_update");
|
|
150
|
+
winston.info("Data queue", oka)
|
|
151
|
+
});
|
|
152
|
+
ch.consume("jobs", processMsg, { noAck: false });
|
|
153
|
+
winston.info("Worker is started");
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
function processMsg(msg) {
|
|
158
|
+
work(msg, function(ok) {
|
|
159
|
+
try {
|
|
160
|
+
if (ok)
|
|
161
|
+
ch.ack(msg);
|
|
162
|
+
else
|
|
163
|
+
ch.reject(msg, true);
|
|
164
|
+
} catch (e) {
|
|
165
|
+
closeOnErr(e);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function work(msg, cb) {
|
|
173
|
+
const message_string = msg.content.toString();
|
|
174
|
+
const topic = msg.fields.routingKey //.replace(/[.]/g, '/');
|
|
175
|
+
|
|
176
|
+
winston.debug("Got msg topic:" + topic);
|
|
177
|
+
|
|
178
|
+
winston.debug("Got msg:"+ message_string + " topic:" + topic);
|
|
179
|
+
|
|
180
|
+
if (topic === 'request_create') {
|
|
181
|
+
winston.debug("reconnect here topic:" + topic);
|
|
182
|
+
// requestEvent.emit('request.create.queue', msg.content);
|
|
183
|
+
requestEvent.emit('request.create.queue', JSON.parse(message_string));
|
|
184
|
+
}
|
|
185
|
+
if (topic === 'request_update') {
|
|
186
|
+
winston.debug("reconnect here topic:" + topic);
|
|
187
|
+
// requestEvent.emit('request.update.queue', msg.content);
|
|
188
|
+
requestEvent.emit('request.update.queue', JSON.parse(message_string));
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (topic === 'request_update_preflight') {
|
|
192
|
+
winston.debug("reconnect here topic:" + topic);
|
|
193
|
+
// requestEvent.emit('request.update.queue', msg.content);
|
|
194
|
+
requestEvent.emit('request.update.preflight.queue', JSON.parse(message_string));
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
if (topic === 'request_participants_update') {
|
|
198
|
+
winston.debug("reconnect here topic:" + topic);
|
|
199
|
+
// requestEvent.emit('request.update.queue', msg.content);
|
|
200
|
+
requestEvent.emit('request.participants.update.queue', JSON.parse(message_string));
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
if (topic === 'request_close') {
|
|
204
|
+
winston.debug("reconnect here topic:" + topic);
|
|
205
|
+
// requestEvent.emit('request.update.queue', msg.content);
|
|
206
|
+
requestEvent.emit('request.close.queue', JSON.parse(message_string));
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (topic === 'request_close_extended') {
|
|
210
|
+
winston.debug("reconnect here topic:" + topic);
|
|
211
|
+
// requestEvent.emit('request.update.queue', msg.content);
|
|
212
|
+
requestEvent.emit('request.close.extended.queue', JSON.parse(message_string));
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (topic === 'message_create') {
|
|
216
|
+
winston.debug("reconnect here topic:" + topic);
|
|
217
|
+
// requestEvent.emit('request.create.queue', msg.content);
|
|
218
|
+
messageEvent.emit('message.create.queue', JSON.parse(message_string));
|
|
219
|
+
}
|
|
220
|
+
if (topic === 'project_user_update') {
|
|
221
|
+
winston.debug("reconnect here topic:" + topic);
|
|
222
|
+
// requestEvent.emit('request.create.queue', msg.content);
|
|
223
|
+
authEvent.emit('project_user.update.queue', JSON.parse(message_string));
|
|
224
|
+
}
|
|
225
|
+
cb(true);
|
|
226
|
+
// WebSocket.cb(true);
|
|
227
|
+
// requestEvent.on(msg.KEYYYYYYY+'.ws', msg.content);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
function closeOnErr(err) {
|
|
232
|
+
if (!err) return false;
|
|
233
|
+
winston.error("[AMQP] error", err);
|
|
234
|
+
amqpConn.close();
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// setInterval(function() {
|
|
239
|
+
// var d = new Date();
|
|
240
|
+
// publish(exchange, "request_create", Buffer.from("work work work: "+d));
|
|
241
|
+
// publish(exchange, "request_update", Buffer.from("work2 work work: "+d));
|
|
242
|
+
// }, 1000);
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
function listen() {
|
|
246
|
+
|
|
247
|
+
// http://www.squaremobius.net/amqp.node/channel_api.html
|
|
248
|
+
// https://docs.parseplatform.org/parse-server/guide/#scalability
|
|
249
|
+
|
|
250
|
+
requestEvent.on('request.create', function(request) {
|
|
251
|
+
setImmediate(() => {
|
|
252
|
+
winston.debug("reconnect request.create")
|
|
253
|
+
publish(exchange, "request_create", Buffer.from(JSON.stringify(request)));
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
requestEvent.on('request.update', function(request) {
|
|
258
|
+
setImmediate(() => {
|
|
259
|
+
winston.debug("reconnect request.update")
|
|
260
|
+
publish(exchange, "request_update", Buffer.from(JSON.stringify(request)));
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
requestEvent.on('request.participants.update', function(request) {
|
|
268
|
+
setImmediate(() => {
|
|
269
|
+
publish(exchange, "request_participants_update", Buffer.from(JSON.stringify(request)));
|
|
270
|
+
winston.debug("reconnect participants.update published")
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
requestEvent.on('request.update.preflight', function(request) {
|
|
275
|
+
setImmediate(() => {
|
|
276
|
+
// winston.info("reconnect request.update.preflight")
|
|
277
|
+
publish(exchange, "request_update_preflight", Buffer.from(JSON.stringify(request)));
|
|
278
|
+
winston.debug("reconnect request.update.preflight published")
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
requestEvent.on('request.close', function(request) {
|
|
284
|
+
setImmediate(() => {
|
|
285
|
+
publish(exchange, "request_close", Buffer.from(JSON.stringify(request)));
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
requestEvent.on('request.close.extended', function(request) {
|
|
290
|
+
setImmediate(() => {
|
|
291
|
+
publish(exchange, "request_close_extended", Buffer.from(JSON.stringify(request)));
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
messageEvent.on('message.create', function(message) {
|
|
298
|
+
setImmediate(() => {
|
|
299
|
+
publish(exchange, "message_create", Buffer.from(JSON.stringify(message)));
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
authEvent.on('project_user.update',function(data) {
|
|
304
|
+
setImmediate(() => {
|
|
305
|
+
let user = undefined;
|
|
306
|
+
let body = undefined;
|
|
307
|
+
if (data.req ) {
|
|
308
|
+
if (data.req.user) { //i think is null from chat21webhook
|
|
309
|
+
user = data.req.user;
|
|
310
|
+
}
|
|
311
|
+
if (data.req.body) {
|
|
312
|
+
body = data.req.body;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
var dat = {updatedProject_userPopulated: data.updatedProject_userPopulated, req: {user: user, body: body}}; //remove request
|
|
316
|
+
winston.debug("dat",dat);
|
|
317
|
+
publish(exchange, "project_user_update", Buffer.from(JSON.stringify(dat)));
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
if (process.env.QUEUE_ENABLED === "true") {
|
|
324
|
+
requestEvent.queueEnabled = true;
|
|
325
|
+
messageEvent.queueEnabled = true;
|
|
326
|
+
authEvent.queueEnabled = true;
|
|
327
|
+
listen();
|
|
328
|
+
start();
|
|
329
|
+
winston.info("Queue enabled. endpint: " + url );
|
|
330
|
+
}
|
|
331
|
+
|