Commit 3efc03c61f58889cad74033277948a34547e425f
1 parent
ad677761b0
Exists in
master
Add silent parameter on sender.send
Showing 2 changed files with 11 additions and 9 deletions Inline Diff
lib/custom-ping.js
1 | const MODULE_NAME = 'CUSTOM-PING'; | 1 | const MODULE_NAME = 'CUSTOM-PING'; |
2 | 2 | ||
3 | const uniqid = require('uniqid'); | 3 | const uniqid = require('uniqid'); |
4 | const config = require('komodo-sdk/config'); | 4 | const config = require('komodo-sdk/config'); |
5 | const logger = require('tektrans-logger'); | 5 | const logger = require('tektrans-logger'); |
6 | 6 | ||
7 | const sender = require('./sender'); | 7 | const sender = require('./sender'); |
8 | 8 | ||
9 | let bot; | 9 | let bot; |
10 | 10 | ||
11 | const allowedFromPartnerList = ( | 11 | const allowedFromPartnerList = ( |
12 | (config.custom_ping && config.custom_ping.allowed_from_partners) || [] | 12 | (config.custom_ping && config.custom_ping.allowed_from_partners) || [] |
13 | ) | 13 | ) |
14 | .filter((item) => typeof item === 'string') | 14 | .filter((item) => typeof item === 'string') |
15 | .map((item) => (item || '').trim().toUpperCase()) | 15 | .map((item) => (item || '').trim().toUpperCase()) |
16 | .filter((item) => item); | 16 | .filter((item) => item); |
17 | 17 | ||
18 | const isPingMessage = (msg) => { | 18 | const isPingMessage = (msg) => { |
19 | if (!msg) return false; | 19 | if (!msg) return false; |
20 | if (typeof msg !== 'string') return false; | 20 | if (typeof msg !== 'string') return false; |
21 | 21 | ||
22 | return ((msg || '').trim().toUpperCase().search(/^PING($| )/) === 0); | 22 | return ((msg || '').trim().toUpperCase().search(/^PING($| )/) === 0); |
23 | }; | 23 | }; |
24 | exports.isPingMessage = isPingMessage; | 24 | exports.isPingMessage = isPingMessage; |
25 | 25 | ||
26 | const isPongMessage = (msg) => { | 26 | const isPongMessage = (msg) => { |
27 | if (!msg) return false; | 27 | if (!msg) return false; |
28 | if (typeof msg !== 'string') return false; | 28 | if (typeof msg !== 'string') return false; |
29 | 29 | ||
30 | return ((msg || '').trim().toUpperCase().search(/^PONG($| )/) === 0); | 30 | return ((msg || '').trim().toUpperCase().search(/^PONG($| )/) === 0); |
31 | }; | 31 | }; |
32 | exports.isPongMessage = isPongMessage; | 32 | exports.isPongMessage = isPongMessage; |
33 | 33 | ||
34 | const isAllowedPartner = (partner) => { | 34 | const isAllowedPartner = (partner) => { |
35 | if (!config.custom_ping) return false; | 35 | if (!config.custom_ping) return false; |
36 | if (config.custom_ping.disable_pong) return false; | 36 | if (config.custom_ping.disable_pong) return false; |
37 | 37 | ||
38 | if (config.custom_ping.allowed_from_all) return true; | 38 | if (config.custom_ping.allowed_from_all) return true; |
39 | return allowedFromPartnerList.indexOf((partner || '').trim().toUpperCase()) >= 0; | 39 | return allowedFromPartnerList.indexOf((partner || '').trim().toUpperCase()) >= 0; |
40 | }; | 40 | }; |
41 | exports.isAllowedPartner = isAllowedPartner; | 41 | exports.isAllowedPartner = isAllowedPartner; |
42 | 42 | ||
43 | const sendPong = (xid, partner, pingMessage) => { | 43 | const sendPong = (xid, partner, pingMessage) => { |
44 | if (!bot) return; | 44 | if (!bot) return; |
45 | if (!partner || typeof partner !== 'string' || !partner.trim()) return; | 45 | if (!partner || typeof partner !== 'string' || !partner.trim()) return; |
46 | 46 | ||
47 | const tokens = pingMessage.trim().split(/ +/); | 47 | const tokens = pingMessage.trim().split(/ +/); |
48 | 48 | ||
49 | const pongMessage = [ | 49 | const pongMessage = [ |
50 | 'PONG', | 50 | 'PONG', |
51 | (tokens && tokens[1]) || null, | 51 | (tokens && tokens[1]) || null, |
52 | ].filter((item) => item) | 52 | ].filter((item) => item) |
53 | .join(' '); | 53 | .join(' '); |
54 | 54 | ||
55 | if (config.custom_ping && config.custom_ping.verbose) { | 55 | if (config.custom_ping && config.custom_ping.verbose) { |
56 | logger.verbose(`${MODULE_NAME} F0D18EF4: Responding PING message`, { | 56 | logger.verbose(`${MODULE_NAME} F0D18EF4: Responding PING message`, { |
57 | xid, partner, pongMessage, | 57 | xid, partner, pongMessage, |
58 | }); | 58 | }); |
59 | } | 59 | } |
60 | 60 | ||
61 | sender.send(partner.trim(), pongMessage); | 61 | sender.send(partner.trim(), pongMessage, null, true); |
62 | }; | 62 | }; |
63 | exports.sendPong = sendPong; | 63 | exports.sendPong = sendPong; |
64 | 64 | ||
65 | const sleepMs = (ms) => new Promise((resolve) => { | 65 | const sleepMs = (ms) => new Promise((resolve) => { |
66 | setTimeout(() => { | 66 | setTimeout(() => { |
67 | resolve(true); | 67 | resolve(true); |
68 | }, ms); | 68 | }, ms); |
69 | }); | 69 | }); |
70 | 70 | ||
71 | const pingSender = async () => { | 71 | const pingSender = async () => { |
72 | const xid = uniqid(); | 72 | const xid = uniqid(); |
73 | 73 | ||
74 | if (bot) { | 74 | if (bot) { |
75 | const msg = `PING ${xid}`; | 75 | const msg = `PING ${xid}`; |
76 | 76 | ||
77 | sender.send(config.username, msg); | 77 | sender.send(config.username, msg, xid, true); |
78 | 78 | ||
79 | if ( | 79 | if ( |
80 | config.custom_ping | 80 | config.custom_ping |
81 | && config.custom_ping.send_to | 81 | && config.custom_ping.send_to |
82 | && Array.isArray(config.custom_ping.send_to) | 82 | && Array.isArray(config.custom_ping.send_to) |
83 | ) { | 83 | ) { |
84 | const partnerCount = config.custom_ping.send_to.length; | 84 | const partnerCount = config.custom_ping.send_to.length; |
85 | for (let i = 0; i < partnerCount; i += 1) { | 85 | for (let i = 0; i < partnerCount; i += 1) { |
86 | const additionalDelay = Math.random() * 1000; | 86 | const additionalDelay = Math.random() * 1000; |
87 | 87 | ||
88 | // eslint-disable-next-line no-await-in-loop | 88 | // eslint-disable-next-line no-await-in-loop |
89 | await sleepMs(1000 + additionalDelay); | 89 | await sleepMs(1000 + additionalDelay); |
90 | 90 | ||
91 | const partner = config.custom_ping.send_to[i]; | 91 | const partner = config.custom_ping.send_to[i]; |
92 | 92 | ||
93 | if (config.custom_ping.verbose) { | 93 | if (config.custom_ping.verbose) { |
94 | logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, { | 94 | logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, { |
95 | xid, | 95 | xid, |
96 | partner, | 96 | partner, |
97 | msg, | 97 | msg, |
98 | }); | 98 | }); |
99 | } | 99 | } |
100 | 100 | ||
101 | sender.send(partner, msg, xid); | 101 | sender.send(partner, msg, xid, true); |
102 | } | 102 | } |
103 | } | 103 | } |
104 | } | 104 | } |
105 | 105 | ||
106 | await sleepMs(3 * 1000); | 106 | await sleepMs(3 * 1000); |
107 | pingSender(); | 107 | pingSender(); |
108 | }; | 108 | }; |
109 | 109 | ||
110 | const setBot = (botFromCaller) => { | 110 | const setBot = (botFromCaller) => { |
111 | logger.verbose(`${MODULE_NAME} A063F39F: Bot registered for custom ping`); | 111 | logger.verbose(`${MODULE_NAME} A063F39F: Bot registered for custom ping`); |
112 | bot = botFromCaller; | 112 | bot = botFromCaller; |
113 | pingSender(); | 113 | pingSender(); |
114 | }; | 114 | }; |
115 | exports.setBot = setBot; | 115 | exports.setBot = setBot; |
116 | 116 |
lib/sender.js
1 | const MODULE_NAME = 'SENDER'; | 1 | const MODULE_NAME = 'SENDER'; |
2 | 2 | ||
3 | const logger = require('tektrans-logger'); | 3 | const logger = require('tektrans-logger'); |
4 | 4 | ||
5 | let bot; | 5 | let bot; |
6 | 6 | ||
7 | const init = (botFromCaller) => { | 7 | const init = (botFromCaller) => { |
8 | logger.verbose(`${MODULE_NAME} D74B30FF: Sender initialized`); | 8 | logger.verbose(`${MODULE_NAME} D74B30FF: Sender initialized`); |
9 | bot = botFromCaller; | 9 | bot = botFromCaller; |
10 | }; | 10 | }; |
11 | exports.init = init; | 11 | exports.init = init; |
12 | 12 | ||
13 | const send = (partner, msg, xid) => { | 13 | const send = (partner, msg, xid, silent) => { |
14 | if (!bot) { | 14 | if (!bot) { |
15 | logger.verbose(`${MODULE_NAME} 78B04B3B: Not sending message because bot has not been initialized`, { | 15 | logger.verbose(`${MODULE_NAME} 78B04B3B: Not sending message because bot has not been initialized`, { |
16 | xid, | 16 | xid, |
17 | partner, | 17 | partner, |
18 | msg, | 18 | msg, |
19 | }); | 19 | }); |
20 | 20 | ||
21 | return; | 21 | return; |
22 | } | 22 | } |
23 | 23 | ||
24 | logger.verbose(`${MODULE_NAME} 648A5F17: Sending message`, { | 24 | if (!silent) { |
25 | xid, | 25 | logger.verbose(`${MODULE_NAME} 648A5F17: Sending message`, { |
26 | partner, | 26 | xid, |
27 | msg, | 27 | partner, |
28 | }); | 28 | msg, |
29 | }); | ||
30 | } | ||
29 | 31 | ||
30 | try { | 32 | try { |
31 | bot.send(partner, msg); | 33 | bot.send(partner, msg); |
32 | } catch (e) { | 34 | } catch (e) { |
33 | logger.warn(`${MODULE_NAME} C50237D8: Exception on sending message`, { | 35 | logger.warn(`${MODULE_NAME} C50237D8: Exception on sending message`, { |
34 | xid, | 36 | xid, |
35 | eCode: e.code, | 37 | eCode: e.code, |
36 | eMessage: e.message || e, | 38 | eMessage: e.message || e, |
37 | }); | 39 | }); |
38 | } | 40 | } |
39 | }; | 41 | }; |
40 | exports.send = send; | 42 | exports.send = send; |
41 | 43 |