Commit 2e601f8db932ad3a585614456e8c6ebd9a34b5ae

Authored by Adhidarma Hadiwinoto
1 parent 30b2d328a5
Exists in master

More debug on modem chooser

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