Commit 9556bc2b32927348eb9ed3dae0dde03518429ec2
1 parent
fd468d1bd4
Exists in
master
im-probe
Showing 2 changed files with 97 additions and 0 deletions Side-by-side Diff
im-probe.js
... | ... | @@ -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; |
partner-im.js
... | ... | @@ -3,6 +3,7 @@ var redis = require('redis'); |
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; |