Commit e5065a9b61f2a6adc21a9cd5bfe5d18b4e9ff18e

Authored by Adhidarma Hadiwinoto
1 parent c75a88136f
Exists in master

MODEM-CHOOSER: bugfix

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