Commit 5d54d2e3d78bead628ba794d8dcbe2c2f84588fd

Authored by Adhidarma Hadiwinoto
1 parent fac58c4980
Exists in master

Add config.custom_ping.add_buddies_on_init

Showing 2 changed files with 24 additions and 0 deletions Inline Diff

1 { 1 {
2 "origin": "PLEASE_CHANGE_ME", 2 "origin": "PLEASE_CHANGE_ME",
3 "username": "PLEASE_CHANGE_ME", 3 "username": "PLEASE_CHANGE_ME",
4 "password": "PLEASE_CHANGE_ME", 4 "password": "PLEASE_CHANGE_ME",
5 "warming_up_ms": 1000, 5 "warming_up_ms": 1000,
6 "messaging_url": "http://localhost:32979/", 6 "messaging_url": "http://localhost:32979/",
7 "listen_port": 32989, 7 "listen_port": 32989,
8 "ping_interval_ms": 60000, 8 "ping_interval_ms": 60000,
9 "do_not_terminate_on_error": false, 9 "do_not_terminate_on_error": false,
10 "custom_ping": { 10 "custom_ping": {
11 "verbose": false, 11 "verbose": false,
12 "disable_pong": false, 12 "disable_pong": false,
13 "allowed_from_all": false, 13 "allowed_from_all": false,
14 "add_buddies_on_init": false,
14 "allowed_from_partners": [], 15 "allowed_from_partners": [],
15 "send_to": [] 16 "send_to": []
16 }, 17 },
17 "kill_on_idle": { 18 "kill_on_idle": {
18 "disable": false, 19 "disable": false,
19 "max_idle_ms": 60000 20 "max_idle_ms": 60000
20 } 21 }
21 } 22 }
22 23
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 const isVerbose = !!(config.custom_ping && config.custom_ping.verbose); 9 const isVerbose = !!(config.custom_ping && config.custom_ping.verbose);
10 logger.verbose(`${MODULE_NAME} CE44F47F: Verbosity initialized`, { 10 logger.verbose(`${MODULE_NAME} CE44F47F: Verbosity initialized`, {
11 isVerbose, 11 isVerbose,
12 }); 12 });
13 13
14 let bot; 14 let bot;
15 15
16 const allowedFromPartnerList = ( 16 const allowedFromPartnerList = (
17 (config.custom_ping && config.custom_ping.allowed_from_partners) || [] 17 (config.custom_ping && config.custom_ping.allowed_from_partners) || []
18 ) 18 )
19 .filter((item) => typeof item === 'string') 19 .filter((item) => typeof item === 'string')
20 .map((item) => (item || '').trim().toUpperCase()) 20 .map((item) => (item || '').trim().toUpperCase())
21 .filter((item) => item); 21 .filter((item) => item);
22 22
23 const isPingMessage = (msg) => { 23 const isPingMessage = (msg) => {
24 if (!msg) return false; 24 if (!msg) return false;
25 if (typeof msg !== 'string') return false; 25 if (typeof msg !== 'string') return false;
26 26
27 return ((msg || '').trim().toUpperCase().search(/^PING($| )/) === 0); 27 return ((msg || '').trim().toUpperCase().search(/^PING($| )/) === 0);
28 }; 28 };
29 exports.isPingMessage = isPingMessage; 29 exports.isPingMessage = isPingMessage;
30 30
31 const isPongMessage = (msg) => { 31 const isPongMessage = (msg) => {
32 if (!msg) return false; 32 if (!msg) return false;
33 if (typeof msg !== 'string') return false; 33 if (typeof msg !== 'string') return false;
34 34
35 return ((msg || '').trim().toUpperCase().search(/^PONG($| )/) === 0); 35 return ((msg || '').trim().toUpperCase().search(/^PONG($| )/) === 0);
36 }; 36 };
37 exports.isPongMessage = isPongMessage; 37 exports.isPongMessage = isPongMessage;
38 38
39 const isAllowedPartner = (partner) => { 39 const isAllowedPartner = (partner) => {
40 if (!config.custom_ping) return false; 40 if (!config.custom_ping) return false;
41 if (config.custom_ping.disable_pong) return false; 41 if (config.custom_ping.disable_pong) return false;
42 42
43 if (config.custom_ping.allowed_from_all) return true; 43 if (config.custom_ping.allowed_from_all) return true;
44 return allowedFromPartnerList.indexOf((partner || '').trim().toUpperCase()) >= 0; 44 return allowedFromPartnerList.indexOf((partner || '').trim().toUpperCase()) >= 0;
45 }; 45 };
46 exports.isAllowedPartner = isAllowedPartner; 46 exports.isAllowedPartner = isAllowedPartner;
47 47
48 const sendPong = (xid, partner, pingMessage) => { 48 const sendPong = (xid, partner, pingMessage) => {
49 if (!bot) return; 49 if (!bot) return;
50 if (!partner || typeof partner !== 'string' || !partner.trim()) return; 50 if (!partner || typeof partner !== 'string' || !partner.trim()) return;
51 51
52 const tokens = pingMessage.trim().split(/ +/); 52 const tokens = pingMessage.trim().split(/ +/);
53 53
54 const pongMessage = [ 54 const pongMessage = [
55 'PONG', 55 'PONG',
56 (tokens && tokens[1]) || null, 56 (tokens && tokens[1]) || null,
57 ].filter((item) => item) 57 ].filter((item) => item)
58 .join(' '); 58 .join(' ');
59 59
60 if (isVerbose) { 60 if (isVerbose) {
61 logger.verbose(`${MODULE_NAME} F0D18EF4: Responding PING message`, { 61 logger.verbose(`${MODULE_NAME} F0D18EF4: Responding PING message`, {
62 xid, partner, pongMessage, 62 xid, partner, pongMessage,
63 }); 63 });
64 } 64 }
65 65
66 sender.send(partner.trim(), pongMessage, null, !isVerbose); 66 sender.send(partner.trim(), pongMessage, null, !isVerbose);
67 }; 67 };
68 exports.sendPong = sendPong; 68 exports.sendPong = sendPong;
69 69
70 const sleepMs = (ms) => new Promise((resolve) => { 70 const sleepMs = (ms) => new Promise((resolve) => {
71 setTimeout(() => { 71 setTimeout(() => {
72 resolve(true); 72 resolve(true);
73 }, ms); 73 }, ms);
74 }); 74 });
75 75
76 const pingSender = async () => { 76 const pingSender = async () => {
77 const xid = uniqid(); 77 const xid = uniqid();
78 78
79 if (bot) { 79 if (bot) {
80 const msg = `PING ${xid}`; 80 const msg = `PING ${xid}`;
81 81
82 sender.send(config.username, msg, xid, !isVerbose); 82 sender.send(config.username, msg, xid, !isVerbose);
83 83
84 if ( 84 if (
85 config.custom_ping 85 config.custom_ping
86 && config.custom_ping.send_to 86 && config.custom_ping.send_to
87 && Array.isArray(config.custom_ping.send_to) 87 && Array.isArray(config.custom_ping.send_to)
88 ) { 88 ) {
89 const partnerCount = config.custom_ping.send_to.length; 89 const partnerCount = config.custom_ping.send_to.length;
90 for (let i = 0; i < partnerCount; i += 1) { 90 for (let i = 0; i < partnerCount; i += 1) {
91 const additionalDelay = Math.random() * 1000; 91 const additionalDelay = Math.random() * 1000;
92 92
93 // eslint-disable-next-line no-await-in-loop 93 // eslint-disable-next-line no-await-in-loop
94 await sleepMs(1000 + additionalDelay); 94 await sleepMs(1000 + additionalDelay);
95 95
96 const partner = config.custom_ping.send_to[i]; 96 const partner = config.custom_ping.send_to[i];
97 97
98 if (isVerbose) { 98 if (isVerbose) {
99 logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, { 99 logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, {
100 xid, 100 xid,
101 partner, 101 partner,
102 msg, 102 msg,
103 }); 103 });
104 } 104 }
105 105
106 sender.send(partner, msg, xid, !isVerbose); 106 sender.send(partner, msg, xid, !isVerbose);
107 } 107 }
108 } 108 }
109 } 109 }
110 110
111 await sleepMs(3 * 1000); 111 await sleepMs(3 * 1000);
112 pingSender(); 112 pingSender();
113 }; 113 };
114 114
115 const addBuddiesOnInit = () => {
116 if (
117 !config.custom_ping || !config.custom_ping.send_to
118 || !Array.isArray(config.custom_ping.send_to)
119 || !config.custom_ping.send_to.length
120 ) {
121 return;
122 }
123
124 logger.verbose(`${MODULE_NAME} 3BBD9A02: Adding custom ping targets as buddies`, {
125 targets: config.custom_ping.send_to,
126 });
127
128 config.custom_ping.send_to.forEach((target) => {
129 bot.subscribe(target);
130 });
131 };
132
115 const setBot = (botFromCaller) => { 133 const setBot = (botFromCaller) => {
116 logger.verbose(`${MODULE_NAME} A063F39F: Bot registered for custom ping`); 134 logger.verbose(`${MODULE_NAME} A063F39F: Bot registered for custom ping`);
117 bot = botFromCaller; 135 bot = botFromCaller;
136
137 if (config.custom_ping && config.custom_ping.add_buddies_on_init) {
138 addBuddiesOnInit();
139 }
140
118 pingSender(); 141 pingSender();
119 }; 142 };
120 exports.setBot = setBot; 143 exports.setBot = setBot;
121 144