im-probe.js 1.83 KB
"use strict";

var config;
var matrix;
var sendMessage;

var probers = [];

function init(options) {
    config = options.config;
    if (!config) {
        console.trace('Undefined options.config');
        process.exit(1);
    }

    matrix = options.matrix;
    if (!matrix) {
        console.trace('Undefined options.matrix');
        process.exit(1);
    }

    logger = options.logger;
    if (!logger) {
        console.trace('Undefined options.logger');
        process.exit(1);
    }

    sendMessage = options.sendMessage;
    if (!sendMessage) {
        console.trace('Undefined options.sendMessage');
        process.exit(1);
    }

    setInterval(pingAll, 60000);
}

function getPartnersFromString(partners) {
    let _partners = partners.trim().replace(/^[,\s]+/, '').replace(/[,\s]+$/, '').split(/[,\s]+/);
    let _partnersCount = _partners.length;

    let cleaned = [];
    for (let i=0; i<_partnersCount; i++) {

        let partner = _partners[i];
        if (!partner) { continue; }

        if (cleaned.indexOf(partner) < 0) {
            cleaned.push(partner);
        }
    }
    return cleaned;
}

function getProbeMessage() {
    return config.h2h_out.probe_message;
}

function pingAll() {
    let msg = getProbeMessage();
    if (!msg) {
        return;
    }

    let destinations = getPartnersFromString(config.h2h_out.partner + ',' + config.h2h_out.allow_response_from);
    let destinationsCount = destinations.length;

    for (let i = 0; i < destinationsCount; i++) {

        let destination = destinations[i];
        let randomDelay = Math.random(5000);

        setTimeout(function() {
            logger.verbose('Sending probe message', {destination: destination, msg: msg});
            sendMessage(destination, msg);
        }, randomDelay);

    }
}

exports.init = init;
exports.getPartnersFromString = getPartnersFromString;