Blame view

lib/custom-ping.js 3.29 KB
fa547d305   Adhidarma Hadiwinoto   Add custom-ping
1
2
3
4
  const MODULE_NAME = 'CUSTOM-PING';
  
  const uniqid = require('uniqid');
  const config = require('komodo-sdk/config');
39e412b9c   Adhidarma Hadiwinoto   Tektrans-logger d...
5
  const logger = require('tektrans-logger');
fa547d305   Adhidarma Hadiwinoto   Add custom-ping
6

dcbdd261d   Adhidarma Hadiwinoto   Create sender module
7
  const sender = require('./sender');
40a07aa47   Adhidarma Hadiwinoto   Use isVerbose on ...
8
  const isVerbose = !!(config.custom_ping && config.custom_ping.verbose);
27022872e   Adhidarma Hadiwinoto   Add log isVerbosi...
9
10
11
  logger.verbose(`${MODULE_NAME} CE44F47F: Verbosity initialized`, {
      isVerbose,
  });
40a07aa47   Adhidarma Hadiwinoto   Use isVerbose on ...
12

fa547d305   Adhidarma Hadiwinoto   Add custom-ping
13
  let bot;
39e412b9c   Adhidarma Hadiwinoto   Tektrans-logger d...
14
15
16
  const allowedFromPartnerList = (
      (config.custom_ping && config.custom_ping.allowed_from_partners) || []
  )
fa547d305   Adhidarma Hadiwinoto   Add custom-ping
17
18
19
      .filter((item) => typeof item === 'string')
      .map((item) => (item || '').trim().toUpperCase())
      .filter((item) => item);
fa547d305   Adhidarma Hadiwinoto   Add custom-ping
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  const isPingMessage = (msg) => {
      if (!msg) return false;
      if (typeof msg !== 'string') return false;
  
      return ((msg || '').trim().toUpperCase().search(/^PING($| )/) === 0);
  };
  exports.isPingMessage = isPingMessage;
  
  const isPongMessage = (msg) => {
      if (!msg) return false;
      if (typeof msg !== 'string') return false;
  
      return ((msg || '').trim().toUpperCase().search(/^PONG($| )/) === 0);
  };
  exports.isPongMessage = isPongMessage;
  
  const isAllowedPartner = (partner) => {
      if (!config.custom_ping) return false;
      if (config.custom_ping.disable_pong) return false;
  
      if (config.custom_ping.allowed_from_all) return true;
      return allowedFromPartnerList.indexOf((partner || '').trim().toUpperCase()) >= 0;
  };
  exports.isAllowedPartner = isAllowedPartner;
  
  const sendPong = (xid, partner, pingMessage) => {
      if (!bot) return;
      if (!partner || typeof partner !== 'string' || !partner.trim()) return;
  
      const tokens = pingMessage.trim().split(/ +/);
  
      const pongMessage = [
          'PONG',
          (tokens && tokens[1]) || null,
      ].filter((item) => item)
          .join(' ');
40a07aa47   Adhidarma Hadiwinoto   Use isVerbose on ...
56
      if (isVerbose) {
fa547d305   Adhidarma Hadiwinoto   Add custom-ping
57
58
59
60
          logger.verbose(`${MODULE_NAME} F0D18EF4: Responding PING message`, {
              xid, partner, pongMessage,
          });
      }
39836a169   Adhidarma Hadiwinoto   Fix silent sender...
61
      sender.send(partner.trim(), pongMessage, null, !isVerbose);
fa547d305   Adhidarma Hadiwinoto   Add custom-ping
62
63
  };
  exports.sendPong = sendPong;
ccd4f6b5b   Adhidarma Hadiwinoto   Lock mutex on sen...
64
65
66
67
68
69
70
  const sleepMs = (ms) => new Promise((resolve) => {
      setTimeout(() => {
          resolve(true);
      }, ms);
  });
  
  const pingSender = async () => {
fa547d305   Adhidarma Hadiwinoto   Add custom-ping
71
      const xid = uniqid();
ccd4f6b5b   Adhidarma Hadiwinoto   Lock mutex on sen...
72

043ce9c67   Adhidarma Hadiwinoto   Change pingSender...
73
      if (bot) {
493e4fa09   Adhidarma Hadiwinoto   Fix log on pingSe...
74
          const msg = `PING ${xid}`;
ccd4f6b5b   Adhidarma Hadiwinoto   Lock mutex on sen...
75

39836a169   Adhidarma Hadiwinoto   Fix silent sender...
76
          sender.send(config.username, msg, xid, !isVerbose);
9a9dc5bca   Adhidarma Hadiwinoto   Ping to ourself
77

043ce9c67   Adhidarma Hadiwinoto   Change pingSender...
78
79
80
81
82
83
84
          if (
              config.custom_ping
              && config.custom_ping.send_to
              && Array.isArray(config.custom_ping.send_to)
          ) {
              const partnerCount = config.custom_ping.send_to.length;
              for (let i = 0; i < partnerCount; i += 1) {
dcbdd261d   Adhidarma Hadiwinoto   Create sender module
85
                  const additionalDelay = Math.random() * 1000;
043ce9c67   Adhidarma Hadiwinoto   Change pingSender...
86
                  // eslint-disable-next-line no-await-in-loop
dcbdd261d   Adhidarma Hadiwinoto   Create sender module
87
                  await sleepMs(1000 + additionalDelay);
043ce9c67   Adhidarma Hadiwinoto   Change pingSender...
88
89
  
                  const partner = config.custom_ping.send_to[i];
40a07aa47   Adhidarma Hadiwinoto   Use isVerbose on ...
90
                  if (isVerbose) {
043ce9c67   Adhidarma Hadiwinoto   Change pingSender...
91
92
93
94
95
96
                      logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, {
                          xid,
                          partner,
                          msg,
                      });
                  }
39836a169   Adhidarma Hadiwinoto   Fix silent sender...
97
                  sender.send(partner, msg, xid, !isVerbose);
ccd4f6b5b   Adhidarma Hadiwinoto   Lock mutex on sen...
98
              }
fa547d305   Adhidarma Hadiwinoto   Add custom-ping
99
          }
ccd4f6b5b   Adhidarma Hadiwinoto   Lock mutex on sen...
100
      }
043ce9c67   Adhidarma Hadiwinoto   Change pingSender...
101
102
103
  
      await sleepMs(3 * 1000);
      pingSender();
fa547d305   Adhidarma Hadiwinoto   Add custom-ping
104
  };
043ce9c67   Adhidarma Hadiwinoto   Change pingSender...
105
106
107
108
109
110
  const setBot = (botFromCaller) => {
      logger.verbose(`${MODULE_NAME} A063F39F: Bot registered for custom ping`);
      bot = botFromCaller;
      pingSender();
  };
  exports.setBot = setBot;