@tiledesk/tiledesk-server 2.3.36 → 2.3.38
Sign up to get free protection for your applications and to get access to all the features.
- 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 +6 -0
- package/Dockerfile-jobs +31 -0
- package/app.js +12 -2
- package/channels/chat21/chat21Handler.js +19 -3
- package/jobs.js +80 -0
- package/jobsManager.js +47 -0
- package/models/faq.js +5 -1
- package/package.json +1 -1
- package/pubmodules/activities/activityArchiver.js +197 -90
- package/pubmodules/emailNotification/requestNotification.js +16 -15
- package/pubmodules/events/eventRoute.js +3 -0
- package/pubmodules/pubModulesManager.js +5 -5
- package/pubmodules/queue/reconnect.js +96 -12
- package/pubmodules/queue/reconnectFanout.js +18 -12
- package/pubmodules/trigger/rulesTrigger.js +7 -1
- package/routes/faq.js +5 -1
- package/routes/faq_kb.js +131 -5
- package/routes/users-util.js +9 -1
- package/services/emailService.js +1 -1
- package/services/faqService.js +15 -0
- package/services/geoService.js +5 -5
- package/services/requestService.js +1 -0
- package/test/example-json.txt +1 -0
- package/test/faqRoute.js +47 -99
- package/test/faqkbRoute.js +204 -66
@@ -0,0 +1,23 @@
|
|
1
|
+
name: Docker Image Community latest CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
push_to_registry:
|
11
|
+
name: Push Docker image to Docker Hub
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
|
14
|
+
steps:
|
15
|
+
- uses: actions/checkout@v2
|
16
|
+
name: Check out the repo
|
17
|
+
- uses: docker/build-push-action@v1
|
18
|
+
with:
|
19
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
20
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
21
|
+
repository: tiledesk/tiledesk-server-worker
|
22
|
+
dockerfile: Dockerfile-jobs
|
23
|
+
tags: latest
|
@@ -0,0 +1,22 @@
|
|
1
|
+
name: Publish Docker Community image tags
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
tags:
|
6
|
+
- '**' # Push events to every tag including hierarchical tags like
|
7
|
+
jobs:
|
8
|
+
|
9
|
+
push_to_registry:
|
10
|
+
name: Push Docker image to Docker Hub
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
steps:
|
13
|
+
- name: Check out the repo
|
14
|
+
uses: actions/checkout@v2
|
15
|
+
- name: Push to Docker Hub
|
16
|
+
uses: docker/build-push-action@v1
|
17
|
+
with:
|
18
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
19
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
20
|
+
dockerfile: Dockerfile-jobs
|
21
|
+
repository: tiledesk/tiledesk-server-worker
|
22
|
+
tag_with_ref: true
|
package/CHANGELOG.md
CHANGED
@@ -4,6 +4,12 @@
|
|
4
4
|
🚀 IN PRODUCTION 🚀
|
5
5
|
(https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.35)
|
6
6
|
|
7
|
+
# Untagged
|
8
|
+
- Created a job worker for geo db, activities and email notification
|
9
|
+
|
10
|
+
# 2.3.36
|
11
|
+
- BugFix email secure with false value. https://tiledesk.discourse.group/t/error-sending-email/180
|
12
|
+
|
7
13
|
# 2.3.35
|
8
14
|
- Added user util endpoint for contact lookup from chat21
|
9
15
|
|
package/Dockerfile-jobs
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
FROM node:12
|
2
|
+
|
3
|
+
RUN apt-get update
|
4
|
+
|
5
|
+
# Create app directory
|
6
|
+
WORKDIR /usr/src/app
|
7
|
+
|
8
|
+
ARG NPM_TOKEN
|
9
|
+
|
10
|
+
RUN if [ "$NPM_TOKEN" ]; \
|
11
|
+
then RUN COPY .npmrc_ .npmrc \
|
12
|
+
else export SOMEVAR=world; \
|
13
|
+
fi
|
14
|
+
|
15
|
+
|
16
|
+
# Install app dependencies
|
17
|
+
# A wildcard is used to ensure both package.json AND package-lock.json are copied
|
18
|
+
# where available (npm@5+)
|
19
|
+
COPY package*.json ./
|
20
|
+
|
21
|
+
RUN npm install --production
|
22
|
+
|
23
|
+
RUN rm -f .npmrc
|
24
|
+
|
25
|
+
# Bundle app source
|
26
|
+
COPY . .
|
27
|
+
|
28
|
+
EXPOSE 3000
|
29
|
+
|
30
|
+
CMD [ "node", "jobs.js" ]
|
31
|
+
|
package/app.js
CHANGED
@@ -144,8 +144,18 @@ botSubscriptionNotifier.start();
|
|
144
144
|
|
145
145
|
|
146
146
|
var geoService = require('./services/geoService');
|
147
|
-
geoService.listen();
|
147
|
+
// geoService.listen();
|
148
148
|
|
149
|
+
let JobsManager = require('./jobsManager');
|
150
|
+
|
151
|
+
let jobWorkerEnabled = false;
|
152
|
+
if (process.env.JOB_WORKER_ENABLED=="true" || process.env.JOB_WORKER_ENABLED == true) {
|
153
|
+
jobWorkerEnabled = true;
|
154
|
+
}
|
155
|
+
winston.info("JobsManager jobWorkerEnabled: "+ jobWorkerEnabled);
|
156
|
+
|
157
|
+
let jobsManager = new JobsManager(jobWorkerEnabled,geoService);
|
158
|
+
jobsManager.listen();
|
149
159
|
|
150
160
|
|
151
161
|
|
@@ -153,7 +163,7 @@ var faqBotHandler = require('./services/faqBotHandler');
|
|
153
163
|
faqBotHandler.listen();
|
154
164
|
|
155
165
|
var pubModulesManager = require('./pubmodules/pubModulesManager');
|
156
|
-
pubModulesManager.init({express:express, mongoose:mongoose, passport:passport, databaseUri:databaseUri, routes:{}});
|
166
|
+
pubModulesManager.init({express:express, mongoose:mongoose, passport:passport, databaseUri:databaseUri, routes:{}, jobsManager:jobsManager});
|
157
167
|
|
158
168
|
var channelManager = require('./channels/channelManager');
|
159
169
|
channelManager.listen();
|
@@ -266,7 +266,8 @@ class Chat21Handler {
|
|
266
266
|
// TODO perche nn c'è setImmedite? per performace
|
267
267
|
|
268
268
|
|
269
|
-
winston.verbose("Chat21Sender on message.sending "
|
269
|
+
winston.verbose("Chat21Sender on message.sending: "+ message.text);
|
270
|
+
winston.debug("Chat21Sender on message.sending ", message);
|
270
271
|
|
271
272
|
if (message &&
|
272
273
|
message.status === MessageConstants.CHAT_MESSAGE_STATUS.SENDING &&
|
@@ -293,7 +294,8 @@ class Chat21Handler {
|
|
293
294
|
|
294
295
|
|
295
296
|
|
296
|
-
winston.verbose("Chat21Sender sending message.sending "
|
297
|
+
winston.verbose("Chat21Sender sending message.sending: "+ message.text);
|
298
|
+
winston.debug("Chat21Sender sending message.sending ", message);
|
297
299
|
|
298
300
|
// chat21Util.getParsedMessage().then(function(messageData) {
|
299
301
|
// message = messageData;
|
@@ -344,6 +346,8 @@ class Chat21Handler {
|
|
344
346
|
}
|
345
347
|
*/
|
346
348
|
|
349
|
+
// performance console log
|
350
|
+
// console.log("************* send message chat21: "+new Date().toISOString(), message.text );
|
347
351
|
|
348
352
|
return chat21.messages.sendToGroup(message.senderFullname, message.recipient,
|
349
353
|
recipient_fullname, message.text, message.sender, attributes, message.type, message.metadata, timestamp)
|
@@ -352,6 +356,10 @@ class Chat21Handler {
|
|
352
356
|
|
353
357
|
|
354
358
|
// chat21.conversations.stopTyping(message.recipient,message.sender);
|
359
|
+
|
360
|
+
|
361
|
+
// performance console log
|
362
|
+
// console.log("************* senttt message chat21: "+new Date().toISOString(), message.text );
|
355
363
|
|
356
364
|
chat21Event.emit('message.sent', data);
|
357
365
|
|
@@ -379,6 +387,7 @@ class Chat21Handler {
|
|
379
387
|
|
380
388
|
chat21.auth.setAdminToken(adminToken);
|
381
389
|
|
390
|
+
winston.debug("Chat21Sender");
|
382
391
|
// send: function(sender_fullname, recipient_id, recipient_fullname, text, sender_id, attributes, type, metadata){
|
383
392
|
return chat21.messages.send(message.senderFullname, message.recipient,
|
384
393
|
message.recipientFullname, message.text, message.sender, message.attributes, message.type, message.metadata)
|
@@ -584,10 +593,17 @@ class Chat21Handler {
|
|
584
593
|
if (request.subject) {
|
585
594
|
group_name = request.subject;
|
586
595
|
}
|
596
|
+
|
597
|
+
// performance console log
|
598
|
+
// console.log("************* before request.support_group.created: "+new Date().toISOString());
|
587
599
|
|
588
600
|
//TODO racecondition?
|
589
601
|
return chat21.groups.create(group_name, members, gAttributes, groupId).then(function(data) {
|
590
|
-
winston.verbose("Chat21 group created: " + JSON.stringify(data));
|
602
|
+
winston.verbose("Chat21 group created: " + JSON.stringify(data));
|
603
|
+
|
604
|
+
// performance console log
|
605
|
+
// console.log("************* after request.support_group.created: "+new Date().toISOString());
|
606
|
+
|
591
607
|
requestEvent.emit('request.support_group.created', request);
|
592
608
|
|
593
609
|
chat21Event.emit('group.create', data);
|
package/jobs.js
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
|
2
|
+
var dotenvPath = undefined;
|
3
|
+
|
4
|
+
if (process.env.DOTENV_PATH) {
|
5
|
+
dotenvPath = process.env.DOTENV_PATH;
|
6
|
+
console.log("load dotenv form DOTENV_PATH", dotenvPath);
|
7
|
+
}
|
8
|
+
|
9
|
+
if (process.env.LOAD_DOTENV_SUBFOLDER ) {
|
10
|
+
console.log("load dotenv form LOAD_DOTENV_SUBFOLDER");
|
11
|
+
dotenvPath = __dirname+'/confenv/.env';
|
12
|
+
}
|
13
|
+
|
14
|
+
require('dotenv').config({ path: dotenvPath});
|
15
|
+
|
16
|
+
|
17
|
+
var mongoose = require('mongoose');
|
18
|
+
|
19
|
+
let winston = require('./config/winston');
|
20
|
+
let JobsManager = require('./jobsManager');
|
21
|
+
|
22
|
+
|
23
|
+
let geoService = require('./services/geoService');
|
24
|
+
var config = require('./config/database');
|
25
|
+
|
26
|
+
|
27
|
+
//override JOB_WORKER_ENABLED to false when you start jobs.js
|
28
|
+
process.env.JOB_WORKER_ENABLED=false
|
29
|
+
|
30
|
+
var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI || config.database;
|
31
|
+
var autoIndex = true;
|
32
|
+
|
33
|
+
if (!databaseUri) { //TODO??
|
34
|
+
winston.warn('DATABASE_URI not specified, falling back to localhost.');
|
35
|
+
}
|
36
|
+
|
37
|
+
var connection = mongoose.connect(databaseUri, { "useNewUrlParser": true, "autoIndex": autoIndex }, function(err) {
|
38
|
+
if (err) {
|
39
|
+
winston.error('Failed to connect to MongoDB on ' + databaseUri + " ", err);
|
40
|
+
process.exit(1);
|
41
|
+
}
|
42
|
+
});
|
43
|
+
|
44
|
+
// winston.info("mongoose.connection",mongoose.connection);
|
45
|
+
// module.exports = jobsManager;
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
async function main()
|
50
|
+
{
|
51
|
+
|
52
|
+
require('./pubmodules/queue');
|
53
|
+
// require('@tiledesk-ent/tiledesk-server-queue');
|
54
|
+
|
55
|
+
let jobsManager = new JobsManager(undefined, geoService);
|
56
|
+
|
57
|
+
jobsManager.listen();
|
58
|
+
|
59
|
+
|
60
|
+
let emailNotification = require('./pubmodules/emailNotification');
|
61
|
+
jobsManager.listenEmailNotification(emailNotification);
|
62
|
+
|
63
|
+
|
64
|
+
let activityArchiver = require('./pubmodules/activities').activityArchiver;
|
65
|
+
jobsManager.listenActivityArchiver(activityArchiver);
|
66
|
+
|
67
|
+
winston.info("Jobs started");
|
68
|
+
|
69
|
+
await new Promise(function () {});
|
70
|
+
console.log('This text will never be printed');
|
71
|
+
}
|
72
|
+
|
73
|
+
function panic(error)
|
74
|
+
{
|
75
|
+
console.error(error);
|
76
|
+
process.exit(1);
|
77
|
+
}
|
78
|
+
|
79
|
+
// https://stackoverflow.com/a/46916601/1478566
|
80
|
+
main().catch(panic).finally(clearInterval.bind(null, setInterval(a=>a, 1E9)));
|
package/jobsManager.js
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
|
2
|
+
var winston = require('./config/winston');
|
3
|
+
|
4
|
+
class JobsManager {
|
5
|
+
constructor(jobWorkerEnabled, geoService) {
|
6
|
+
this.geoService = geoService;
|
7
|
+
this.emailNotificatio = undefined;
|
8
|
+
this.activityArchiver = undefined;
|
9
|
+
|
10
|
+
this.jobWorkerEnabled = jobWorkerEnabled;
|
11
|
+
// this.jobWorkerEnabled = false;
|
12
|
+
// if (process.env.JOB_WORKER_ENABLED=="true" || process.env.JOB_WORKER_ENABLED == true) {
|
13
|
+
// this.jobWorkerEnabled = true;
|
14
|
+
// }
|
15
|
+
// winston.info("JobsManager jobWorkerEnabled: "+ this.jobWorkerEnabled);
|
16
|
+
}
|
17
|
+
|
18
|
+
|
19
|
+
listen() {
|
20
|
+
winston.info("JobsManager listener started");
|
21
|
+
if ( this.jobWorkerEnabled == true) {
|
22
|
+
return winston.info("JobsManager jobWorkerEnabled is enabled. Skipping listeners");
|
23
|
+
}
|
24
|
+
this.geoService.listen();
|
25
|
+
}
|
26
|
+
|
27
|
+
listenEmailNotification(emailNotification) {
|
28
|
+
winston.info("JobsManager listenEmailNotification started");
|
29
|
+
if ( this.jobWorkerEnabled == true) {
|
30
|
+
return winston.info("JobsManager jobWorkerEnabled is enabled. Skipping listener for Email Notification");
|
31
|
+
}
|
32
|
+
this.emailNotification = emailNotification;
|
33
|
+
this.emailNotification.requestNotification.listen();
|
34
|
+
}
|
35
|
+
|
36
|
+
listenActivityArchiver(activityArchiver) {
|
37
|
+
winston.info("JobsManager listenActivityArchiver started");
|
38
|
+
if ( this.jobWorkerEnabled == true) {
|
39
|
+
return winston.info("JobsManager jobWorkerEnabled is enabled. Skipping listener for Activity Archiver");
|
40
|
+
}
|
41
|
+
this.activityArchiver = activityArchiver;
|
42
|
+
this.activityArchiver.listen();
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
module.exports = JobsManager;
|
package/models/faq.js
CHANGED
@@ -29,7 +29,7 @@ var FaqSchema = new Schema({
|
|
29
29
|
},
|
30
30
|
question: {
|
31
31
|
type: String,
|
32
|
-
required:
|
32
|
+
required: false
|
33
33
|
},
|
34
34
|
|
35
35
|
webhook_enabled: { //usa questo
|
@@ -83,6 +83,10 @@ var FaqSchema = new Schema({
|
|
83
83
|
createdBy: {
|
84
84
|
type: String,
|
85
85
|
required: true
|
86
|
+
},
|
87
|
+
form: {
|
88
|
+
type: Object,
|
89
|
+
required: false
|
86
90
|
}
|
87
91
|
},{
|
88
92
|
timestamps: true,
|