Commit 1c0e584d5856c03f93bf79d53c1bdf77d68ad885

Authored by Adhidarma Hadiwinoto
1 parent 2e601f8db9
Exists in master

MODEM-CHOOSER handler imsi as number

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