Commit ccd4f6b5be0d74ba982f7c902a3f82319b471fc1
1 parent
b8e0f11e8a
Exists in
master
Lock mutex on sending
Showing 3 changed files with 42 additions and 10 deletions Side-by-side Diff
lib/custom-ping.js
1 | 1 | const MODULE_NAME = 'CUSTOM-PING'; |
2 | 2 | |
3 | +const locks = require('locks'); | |
3 | 4 | const uniqid = require('uniqid'); |
4 | 5 | const config = require('komodo-sdk/config'); |
5 | 6 | const logger = require('tektrans-logger'); |
6 | 7 | |
7 | 8 | let bot; |
9 | +const mutex = locks.createMutex(); | |
8 | 10 | |
9 | 11 | const allowedFromPartnerList = ( |
10 | 12 | (config.custom_ping && config.custom_ping.allowed_from_partners) || [] |
... | ... | @@ -66,8 +68,15 @@ const sendPong = (xid, partner, pingMessage) => { |
66 | 68 | }; |
67 | 69 | exports.sendPong = sendPong; |
68 | 70 | |
69 | -const pingSender = () => { | |
71 | +const sleepMs = (ms) => new Promise((resolve) => { | |
72 | + setTimeout(() => { | |
73 | + resolve(true); | |
74 | + }, ms); | |
75 | +}); | |
76 | + | |
77 | +const pingSender = async () => { | |
70 | 78 | const xid = uniqid(); |
79 | + | |
71 | 80 | if ( |
72 | 81 | !bot |
73 | 82 | || !config.custom_ping |
... | ... | @@ -76,18 +85,29 @@ const pingSender = () => { |
76 | 85 | || !config.custom_ping.send_to.length |
77 | 86 | ) return; |
78 | 87 | |
79 | - config.custom_ping.send_to.forEach((partner) => { | |
88 | + if (mutex.tryLock()) { | |
80 | 89 | const msg = `PING ${xid}`; |
81 | - if (config.custom_ping.verbose) { | |
82 | - logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, { | |
83 | - xid, | |
84 | - partner, | |
85 | - msg, | |
86 | - }); | |
90 | + | |
91 | + const partnerCount = config.custom_ping.send_to.length; | |
92 | + for (let i = 0; i < partnerCount; i += 1) { | |
93 | + const partner = config.custom_ping.send_to[i]; | |
94 | + | |
95 | + if (config.custom_ping.verbose) { | |
96 | + logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, { | |
97 | + xid, | |
98 | + partner, | |
99 | + msg, | |
100 | + }); | |
101 | + } | |
102 | + | |
103 | + bot.send(partner, msg); | |
104 | + | |
105 | + // eslint-disable-next-line no-await-in-loop | |
106 | + await sleepMs(1000); | |
87 | 107 | } |
88 | 108 | |
89 | - bot.send(partner, msg); | |
90 | - }); | |
109 | + mutex.unlock(); | |
110 | + } | |
91 | 111 | }; |
92 | 112 | |
93 | 113 | if (config.custom_ping && config.custom_ping.send_to) { |
package-lock.json
... | ... | @@ -11,6 +11,7 @@ |
11 | 11 | "dependencies": { |
12 | 12 | "komodo-center-messaging-client-lib": "git+https://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git", |
13 | 13 | "komodo-sdk": "^1.43.8", |
14 | + "locks": "^0.2.2", | |
14 | 15 | "moment": "^2.29.1", |
15 | 16 | "simple-xmpp": "^1.3.1", |
16 | 17 | "tektrans-logger": "^1.2.2", |
... | ... | @@ -2313,6 +2314,11 @@ |
2313 | 2314 | "node": ">=4" |
2314 | 2315 | } |
2315 | 2316 | }, |
2317 | + "node_modules/locks": { | |
2318 | + "version": "0.2.2", | |
2319 | + "resolved": "https://registry.npmjs.org/locks/-/locks-0.2.2.tgz", | |
2320 | + "integrity": "sha1-JZkz0TJ8uvD9NmL4//3jaAnYTO0=" | |
2321 | + }, | |
2316 | 2322 | "node_modules/lodash": { |
2317 | 2323 | "version": "4.17.21", |
2318 | 2324 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", |
... | ... | @@ -5807,6 +5813,11 @@ |
5807 | 5813 | "path-exists": "^3.0.0" |
5808 | 5814 | } |
5809 | 5815 | }, |
5816 | + "locks": { | |
5817 | + "version": "0.2.2", | |
5818 | + "resolved": "https://registry.npmjs.org/locks/-/locks-0.2.2.tgz", | |
5819 | + "integrity": "sha1-JZkz0TJ8uvD9NmL4//3jaAnYTO0=" | |
5820 | + }, | |
5810 | 5821 | "lodash": { |
5811 | 5822 | "version": "4.17.21", |
5812 | 5823 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", |
package.json
... | ... | @@ -28,6 +28,7 @@ |
28 | 28 | "dependencies": { |
29 | 29 | "komodo-center-messaging-client-lib": "git+https://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git", |
30 | 30 | "komodo-sdk": "^1.43.8", |
31 | + "locks": "^0.2.2", | |
31 | 32 | "moment": "^2.29.1", |
32 | 33 | "simple-xmpp": "^1.3.1", |
33 | 34 | "tektrans-logger": "^1.2.2", |