Commit 30b2d328a545161ee38ca60c5e3d9ecc212940cd
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 | } |