Commit 9556bc2b32927348eb9ed3dae0dde03518429ec2

Authored by Adhidarma Hadiwinoto
1 parent fd468d1bd4
Exists in master

im-probe

Showing 2 changed files with 97 additions and 0 deletions Side-by-side Diff

... ... @@ -0,0 +1,81 @@
  1 +"use strict";
  2 +
  3 +var config;
  4 +var matrix;
  5 +var sendMessage;
  6 +
  7 +var probers = [];
  8 +
  9 +function init(options) {
  10 + config = options.config;
  11 + if (!config) {
  12 + console.trace('Undefined options.config');
  13 + process.exit(1);
  14 + }
  15 +
  16 + matrix = options.matrix;
  17 + if (!matrix) {
  18 + console.trace('Undefined options.matrix');
  19 + process.exit(1);
  20 + }
  21 +
  22 + logger = options.logger;
  23 + if (!logger) {
  24 + console.trace('Undefined options.logger');
  25 + process.exit(1);
  26 + }
  27 +
  28 + sendMessage = options.sendMessage;
  29 + if (!sendMessage) {
  30 + console.trace('Undefined options.sendMessage');
  31 + process.exit(1);
  32 + }
  33 +
  34 + setInterval(pingAll, 60000);
  35 +}
  36 +
  37 +function getPartnersFromString(partners) {
  38 + let _partners = partners.trim().replace(/^[,\s]+/, '').replace(/[,\s]+$/, '').split(/[,\s]+/);
  39 + let _partnersCount = _partners.length;
  40 +
  41 + let cleaned = [];
  42 + for (let i=0; i<_partnersCount; i++) {
  43 +
  44 + let partner = _partners[i];
  45 + if (!partner) { continue; }
  46 +
  47 + if (cleaned.indexOf(partner) < 0) {
  48 + cleaned.push(partner);
  49 + }
  50 + }
  51 + return cleaned;
  52 +}
  53 +
  54 +function getProbeMessage() {
  55 + return config.h2h_out.probe_message;
  56 +}
  57 +
  58 +function pingAll() {
  59 + let msg = getProbeMessage();
  60 + if (!msg) {
  61 + return;
  62 + }
  63 +
  64 + let destinations = getPartnersFromString(config.h2h_out.partner + ',' + config.h2h_out.allow_response_from);
  65 + let destinationsCount = destinations.length;
  66 +
  67 + for (let i = 0; i < destinationsCount; i++) {
  68 +
  69 + let destination = destinations[i];
  70 + let randomDelay = Math.random(5000);
  71 +
  72 + setTimeout(function() {
  73 + logger.verbose('Sending probe message', {destination: destination, msg: msg});
  74 + sendMessage(destination, msg);
  75 + }, randomDelay);
  76 +
  77 + }
  78 +}
  79 +
  80 +exports.init = init;
  81 +exports.getPartnersFromString = getPartnersFromString;
... ... @@ -3,6 +3,7 @@ var redis = require(&#39;redis&#39;);
3 3 var moment = require('moment');
4 4 var LRU = require('lru-cache');
5 5 var CircularBuffer = require('circular-buffer');
  6 +var imProbe = require('./im-probe');
6 7  
7 8 var maxRegisterResendDelayRetry = 30;
8 9  
... ... @@ -516,6 +517,10 @@ function onOnline() {
516 517 catch(e) {
517 518 logger.warn('Exception on resuming aaa module: ' + e);
518 519 }
  520 +
  521 + if (Number(config.globals.probe_partners)) {
  522 + _initProbe();
  523 + }
519 524 }
520 525  
521 526 function onPM(from, msg) {
... ... @@ -713,6 +718,17 @@ function getRandomPartnerId(forceOnlyHealthPartners) {
713 718 return partners[selectedPartnerIdx];
714 719 }
715 720  
  721 +function _initProbe() {
  722 + var probeOptions = {
  723 + config: config,
  724 + matrix: matrix,
  725 + logger: logger,
  726 + sendMessage: imAdaptor.sendMessage
  727 + }
  728 +
  729 + imProbe.init(probeOptions);
  730 +}
  731 +
716 732 exports.init = init;
717 733 exports.start = init;
718 734 exports.getPatternFromMessage = getPatternFromMessage;