Commit 30b2d328a545161ee38ca60c5e3d9ecc212940cd

Authored by Adhidarma Hadiwinoto
1 parent bf65ed88cf
Exists in master

DEBUG on modem-chooser

Showing 1 changed file with 10 additions and 2 deletions Inline Diff

lib/modem-chooser.js
1 'use strict'; 1 'use strict';
2 2
3 const prefixes = require('./prefixes'); 3 const prefixes = require('./prefixes');
4 const modems = require('./modems2'); 4 const modems = require('./modems2');
5 const partnerLastSeen = require('./partner-last-seen'); 5 const partnerLastSeen = require('./partner-last-seen');
6 6
7 function filterOutCandidates(candidates) { 7 function filterOutCandidates(candidates) {
8 const logger = global.KOMODO_LOGGER;
9
8 if (!Array.isArray(candidates)) { 10 if (!Array.isArray(candidates)) {
9 return []; 11 return [];
10 } 12 }
11 13
12 if (!candidates.length) return []; 14 if (!candidates.length) return [];
13 15
14 return candidates.filter((item) => { 16 const filtered = candidates.filter((item) => {
15 if (typeof item !== 'string') return false; 17 if (typeof item !== 'string') return false;
16 if (item.indexOf('#') >= 0) return false; 18 if (item.indexOf('#') >= 0) return false;
17 19
18 const modem = modems.get('imsi', item); 20 const modem = modems.get('imsi', item);
19 if (!modem) return false; 21 if (!modem) {
22 if (logger) logger.verbose(`MODEM-CHOOSER: No modem with IMSI ${item} found, removing from candidates`);
23 return false;
24 }
20 25
21 return true; 26 return true;
22 }); 27 });
28
29 if (logger) logger.verbose('MODEM-CHOOSER: Senders candidates reduced', { candidates, filtered });
30 return filtered;
23 } 31 }
24 32
25 exports.chooser = async function chooser(destination, config) { 33 exports.chooser = async function chooser(destination, config) {
26 const logger = global.KOMODO_LOGGER; 34 const logger = global.KOMODO_LOGGER;
27 35
28 let prefixName = await prefixes.lookup(destination); 36 let prefixName = await prefixes.lookup(destination);
29 if (typeof prefixName === 'string') { 37 if (typeof prefixName === 'string') {
30 prefixName = prefixName.toUpperCase(); 38 prefixName = prefixName.toUpperCase();
31 } 39 }
32 40
33 if (logger) logger.verbose('MODEM-CHOOSER: Choosing suitable senders', { destination, prefixName }); 41 if (logger) logger.verbose('MODEM-CHOOSER: Choosing suitable senders', { destination, prefixName });
34 42
35 let sendersImsi = []; 43 let sendersImsi = [];
36 if (config.senders_imsi && prefixName && config.senders_imsi.prefix_names && config.senders_imsi.prefix_names[prefixName]) { 44 if (config.senders_imsi && prefixName && config.senders_imsi.prefix_names && config.senders_imsi.prefix_names[prefixName]) {
37 sendersImsi = filterOutCandidates(config.senders_imsi.prefix_names[prefixName]); 45 sendersImsi = filterOutCandidates(config.senders_imsi.prefix_names[prefixName]);
38 if (logger) logger.verbose('MODEM-CHOOSER: Try to use imsi senders by prefix name', { destination, prefixName, sendersImsi, candidates: config.senders_imsi.prefix_names[prefixName] }); 46 if (logger) logger.verbose('MODEM-CHOOSER: Try to use imsi senders by prefix name', { destination, prefixName, sendersImsi, candidates: config.senders_imsi.prefix_names[prefixName] });
39 } 47 }
40 48
41 if (!sendersImsi.length && config.senders_imsi && config.senders_imsi.unknown_prefix) { 49 if (!sendersImsi.length && config.senders_imsi && config.senders_imsi.unknown_prefix) {
42 sendersImsi = filterOutCandidates(config.senders_imsi.unknown_prefix); 50 sendersImsi = filterOutCandidates(config.senders_imsi.unknown_prefix);
43 if (logger) logger.verbose('MODEM-CHOOSER: Try to use senders for unknown prefix', { destination, prefixName, sendersImsi, candidates: config.senders_imsi.unknown_prefix }); 51 if (logger) logger.verbose('MODEM-CHOOSER: Try to use senders for unknown prefix', { destination, prefixName, sendersImsi, candidates: config.senders_imsi.unknown_prefix });
44 } 52 }
45 53
46 if (!sendersImsi.length) { 54 if (!sendersImsi.length) {
47 sendersImsi = filterOutCandidates([ await partnerLastSeen.get(destination) ]); 55 sendersImsi = filterOutCandidates([ await partnerLastSeen.get(destination) ]);
48 if (logger) logger.verbose('MODEM-CHOOSER: Try to use sender by last seen', { destination, prefixName, sendersImsi }); 56 if (logger) logger.verbose('MODEM-CHOOSER: Try to use sender by last seen', { destination, prefixName, sendersImsi });
49 } 57 }
50 58
51 if (!sendersImsi.length && config.senders_imsi && config.senders_imsi.default) { 59 if (!sendersImsi.length && config.senders_imsi && config.senders_imsi.default) {
52 sendersImsi = filterOutCandidates(config.senders_imsi.default); 60 sendersImsi = filterOutCandidates(config.senders_imsi.default);
53 if (logger) logger.verbose('MODEM-CHOOSER: Try to use default senders', { destination, prefixName, sendersImsi, candidates: config.senders_imsi.default }); 61 if (logger) logger.verbose('MODEM-CHOOSER: Try to use default senders', { destination, prefixName, sendersImsi, candidates: config.senders_imsi.default });
54 } 62 }
55 63
56 if (!sendersImsi.length) { 64 if (!sendersImsi.length) {
57 if (logger) logger.warn('MODEM-CHOOSER: No suitable sender found', { destination, prefixName }); 65 if (logger) logger.warn('MODEM-CHOOSER: No suitable sender found', { destination, prefixName });
58 return; 66 return;
59 } 67 }
60 68
61 const count = sendersImsi.length; 69 const count = sendersImsi.length;
62 const idx = Math.round(Math.random() * (count - 1)); 70 const idx = Math.round(Math.random() * (count - 1));
63 const imsiChoosed = sendersImsi[idx]; 71 const imsiChoosed = sendersImsi[idx];
64 72
65 if (logger) logger.verbose(`MODEM-CHOOSER: gonna use modem with IMSI ${imsiChoosed}`, { destination, prefixName, imsiSenders: sendersImsi }); 73 if (logger) logger.verbose(`MODEM-CHOOSER: gonna use modem with IMSI ${imsiChoosed}`, { destination, prefixName, imsiSenders: sendersImsi });
66 74
67 return imsiChoosed; 75 return imsiChoosed;
68 } 76 }