From ccd4f6b5be0d74ba982f7c902a3f82319b471fc1 Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <adhisimon@gmail.com> Date: Wed, 27 Oct 2021 17:13:50 +0700 Subject: [PATCH] Lock mutex on sending --- lib/custom-ping.js | 40 ++++++++++++++++++++++++++++++---------- package-lock.json | 11 +++++++++++ package.json | 1 + 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/lib/custom-ping.js b/lib/custom-ping.js index ac5f214..3bcb7e5 100644 --- a/lib/custom-ping.js +++ b/lib/custom-ping.js @@ -1,10 +1,12 @@ const MODULE_NAME = 'CUSTOM-PING'; +const locks = require('locks'); const uniqid = require('uniqid'); const config = require('komodo-sdk/config'); const logger = require('tektrans-logger'); let bot; +const mutex = locks.createMutex(); const allowedFromPartnerList = ( (config.custom_ping && config.custom_ping.allowed_from_partners) || [] @@ -66,8 +68,15 @@ const sendPong = (xid, partner, pingMessage) => { }; exports.sendPong = sendPong; -const pingSender = () => { +const sleepMs = (ms) => new Promise((resolve) => { + setTimeout(() => { + resolve(true); + }, ms); +}); + +const pingSender = async () => { const xid = uniqid(); + if ( !bot || !config.custom_ping @@ -76,18 +85,29 @@ const pingSender = () => { || !config.custom_ping.send_to.length ) return; - config.custom_ping.send_to.forEach((partner) => { + if (mutex.tryLock()) { const msg = `PING ${xid}`; - if (config.custom_ping.verbose) { - logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, { - xid, - partner, - msg, - }); + + const partnerCount = config.custom_ping.send_to.length; + for (let i = 0; i < partnerCount; i += 1) { + const partner = config.custom_ping.send_to[i]; + + if (config.custom_ping.verbose) { + logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, { + xid, + partner, + msg, + }); + } + + bot.send(partner, msg); + + // eslint-disable-next-line no-await-in-loop + await sleepMs(1000); } - bot.send(partner, msg); - }); + mutex.unlock(); + } }; if (config.custom_ping && config.custom_ping.send_to) { diff --git a/package-lock.json b/package-lock.json index b31febf..08b6642 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "komodo-center-messaging-client-lib": "git+https://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git", "komodo-sdk": "^1.43.8", + "locks": "^0.2.2", "moment": "^2.29.1", "simple-xmpp": "^1.3.1", "tektrans-logger": "^1.2.2", @@ -2313,6 +2314,11 @@ "node": ">=4" } }, + "node_modules/locks": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/locks/-/locks-0.2.2.tgz", + "integrity": "sha1-JZkz0TJ8uvD9NmL4//3jaAnYTO0=" + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -5807,6 +5813,11 @@ "path-exists": "^3.0.0" } }, + "locks": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/locks/-/locks-0.2.2.tgz", + "integrity": "sha1-JZkz0TJ8uvD9NmL4//3jaAnYTO0=" + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", diff --git a/package.json b/package.json index 124714b..ae607dd 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "dependencies": { "komodo-center-messaging-client-lib": "git+https://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git", "komodo-sdk": "^1.43.8", + "locks": "^0.2.2", "moment": "^2.29.1", "simple-xmpp": "^1.3.1", "tektrans-logger": "^1.2.2", -- 1.9.0