Commit f2d51eef9e751eeafa3acb5d0ceb8078db07d537

Authored by Adhidarma Hadiwinoto
1 parent a21e7a161e
Exists in master

Ignore senders with '#'

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 if (!Array.isArray(candidates)) { 8 if (!Array.isArray(candidates)) {
9 return []; 9 return [];
10 } 10 }
11 11
12 return candidates.filter((item) => { 12 return candidates.filter((item) => {
13 const modem = modems.get('by_imsi', item); 13 if (item.indexOf('#') >= 0) return false;
14 14
15 const modem = modems.get('by_imsi', item);
15 if (!modem) return false; 16 if (!modem) return false;
17
16 return true; 18 return true;
17 }); 19 });
18 } 20 }
19 21
20 exports.chooser = async function chooser(destination, config) { 22 exports.chooser = async function chooser(destination, config) {
21 const logger = global.KOMODO_LOGGER; 23 const logger = global.KOMODO_LOGGER;
22 24
23 const prefixName = await prefixes.lookup(destination); 25 const prefixName = await prefixes.lookup(destination);
24 if (logger) logger.verbose('Choosing suitable senders', { destination, prefixName }); 26 if (logger) logger.verbose('Choosing suitable senders', { destination, prefixName });
25 27
26 let imsiSenders = []; 28 let imsiSenders = [];
27 if (config.imsi_senders && config.imsi_senders.prefix_names && config.imsi_senders.prefix_names[prefixName]) { 29 if (config.imsi_senders && config.imsi_senders.prefix_names && config.imsi_senders.prefix_names[prefixName]) {
28 imsiSenders = filterOutCandidates(config.imsi_senders.prefix_names[prefixName]); 30 imsiSenders = filterOutCandidates(config.imsi_senders.prefix_names[prefixName]);
29 if (logger) logger.verbose('Suitable senders by prefix name', { destination, prefixName, imsiSenders }); 31 if (logger) logger.verbose('Suitable senders by prefix name', { destination, prefixName, imsiSenders });
30 } 32 }
31 33
32 if (!imsiSenders.length && config.imsi_senders.default && Array.isArray(config.imsi_senders.default) && config.imsi_senders.default.length) { 34 if (!imsiSenders.length && config.imsi_senders.default && Array.isArray(config.imsi_senders.default) && config.imsi_senders.default.length) {
33 imsiSenders = filterOutCandidates(config.imsi_senders.default); 35 imsiSenders = filterOutCandidates(config.imsi_senders.default);
34 if (logger) logger.verbose('Suitable default senders', { destination, prefixName, imsiSenders }); 36 if (logger) logger.verbose('Suitable default senders', { destination, prefixName, imsiSenders });
35 } 37 }
36 38
37 if (!imsiSenders.length) { 39 if (!imsiSenders.length) {
38 imsiSenders = filterOutCandidates([ await partnerLastSeen.get(destination) ]); 40 imsiSenders = filterOutCandidates([ await partnerLastSeen.get(destination) ]);
39 if (logger) logger.verbose('Suitable senders by last seen', { destination, prefixName, imsiSenders }); 41 if (logger) logger.verbose('Suitable senders by last seen', { destination, prefixName, imsiSenders });
40 } 42 }
41 43
42 if (!imsiSenders.length) { 44 if (!imsiSenders.length) {
43 if (logger) logger.verbose('No suitable sender found', { destination, prefixName }); 45 if (logger) logger.verbose('No suitable sender found', { destination, prefixName });
44 return; 46 return;
45 } 47 }
46 48
47 const count = imsiSenders.length; 49 const count = imsiSenders.length;
48 const idx = Math.round(Math.random() * (count - 1)); 50 const idx = Math.round(Math.random() * (count - 1));
49 const imsiChoosed = imsiSenders[idx]; 51 const imsiChoosed = imsiSenders[idx];
52
50 if (logger) logger.verbose(`Choose modem with IMSI ${imsiChoosed}`, { destination, prefixName, imsiSenders }); 53 if (logger) logger.verbose(`Choose modem with IMSI ${imsiChoosed}`, { destination, prefixName, imsiSenders });
54
51 return imsiChoosed; 55 return imsiChoosed;
52 } 56 }