im-probe.js
1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
"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;