Commit ccd4f6b5be0d74ba982f7c902a3f82319b471fc1

Authored by Adhidarma Hadiwinoto
1 parent b8e0f11e8a
Exists in master

Lock mutex on sending

Showing 3 changed files with 42 additions and 10 deletions Side-by-side Diff

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) {
... ... @@ -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",
... ... @@ -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",