Commit bf4cb9aaaf212365ce1861f684f9b823be038de2

Authored by Adhidarma Hadiwinoto
1 parent e5065a9b61
Exists in master

Refactor config.imsi_senders to config.senders_imsi

Showing 2 changed files with 7 additions and 7 deletions Inline Diff

1 { 1 {
2 "name": "SMS", 2 "name": "SMS",
3 3
4 "# messaging_url": "messaging service url", 4 "# messaging_url": "messaging service url",
5 "messaging_url": "http://localhost:32979/", 5 "messaging_url": "http://localhost:32979/",
6 6
7 "# listen_port": "HTTP port untuk mendapat perintah dari CORE", 7 "# listen_port": "HTTP port untuk mendapat perintah dari CORE",
8 "listen_port": 16480, 8 "listen_port": 16480,
9 9
10 "apiserver": { 10 "apiserver": {
11 "# listen_port": "HTTP port untuk mendapat pesan masuk dari modem handler", 11 "# listen_port": "HTTP port untuk mendapat pesan masuk dari modem handler",
12 "listen_port": 16481, 12 "listen_port": 16481,
13 "apikey": "PLEASE_CHANGE_ME" 13 "apikey": "PLEASE_CHANGE_ME"
14 }, 14 },
15 15
16 "number_suffix": "@phonenumber", 16 "number_suffix": "@phonenumber",
17 17
18 "modems": { 18 "modems": {
19 "SMS0": { 19 "SMS0": {
20 "url": "http://localhost:2110/sms", 20 "url": "http://localhost:2110/sms",
21 "apikey": "PLEASE_CHANGE_ME" 21 "apikey": "PLEASE_CHANGE_ME"
22 } 22 }
23 }, 23 },
24 24
25 "do_not_trim_long_sms": false, 25 "do_not_trim_long_sms": false,
26 26
27 "default_modem": "SMS0", 27 "default_modem": "SMS0",
28 28
29 "# handler_chooser_algorithm": "algoritma untuk memilih modem dalam mengirim SMS. Pilihan: LAST-SEEN, FORCED. Default: LAST-SEEN", 29 "# handler_chooser_algorithm": "algoritma untuk memilih modem dalam mengirim SMS. Pilihan: LAST-SEEN, FORCED. Default: LAST-SEEN",
30 "handler_chooser_algorithm": "LAST-SEEN", 30 "handler_chooser_algorithm": "LAST-SEEN",
31 31
32 "# sending handler": "list modem yang dipakai untuk mengirim jika handler_chooser_algorithm === 'FORCED'", 32 "# sending handler": "list modem yang dipakai untuk mengirim jika handler_chooser_algorithm === 'FORCED'",
33 "sending_handler": [ 33 "sending_handler": [
34 "SMS0", 34 "SMS0",
35 "SMS1" 35 "SMS1"
36 ], 36 ],
37 37
38 "imsi_senders": { 38 "senders_imsi": {
39 "prefix_names": { 39 "prefix_names": {
40 "TELKOMSEL": [ 40 "TELKOMSEL": [
41 ], 41 ],
42 "XL": [ 42 "XL": [
43 ] 43 ]
44 }, 44 },
45 "unknown_prefix": [ 45 "unknown_prefix": [
46 ], 46 ],
47 "default": [ 47 "default": [
48 ] 48 ]
49 }, 49 },
50 50
51 "redis": { 51 "redis": {
52 "host": "127.0.0.1" 52 "host": "127.0.0.1"
53 } 53 }
54 } 54 }
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 []; 12 if (!candidates.length) return [];
13 13
14 return candidates.filter((item) => { 14 return candidates.filter((item) => {
15 if (typeof item !== 'string') return false; 15 if (typeof item !== 'string') return false;
16 if (item.indexOf('#') >= 0) return false; 16 if (item.indexOf('#') >= 0) return false;
17 17
18 const modem = modems.get('by_imsi', item); 18 const modem = modems.get('by_imsi', item);
19 if (!modem) return false; 19 if (!modem) return false;
20 20
21 return true; 21 return true;
22 }); 22 });
23 } 23 }
24 24
25 exports.chooser = async function chooser(destination, config) { 25 exports.chooser = async function chooser(destination, config) {
26 const logger = global.KOMODO_LOGGER; 26 const logger = global.KOMODO_LOGGER;
27 27
28 let prefixName = await prefixes.lookup(destination); 28 let prefixName = await prefixes.lookup(destination);
29 if (typeof prefixName === 'string') { 29 if (typeof prefixName === 'string') {
30 prefixName = prefixName.toUpperCase(); 30 prefixName = prefixName.toUpperCase();
31 } 31 }
32 32
33 if (logger) logger.verbose('MODEM-CHOOSER: Choosing suitable senders', { destination, prefixName }); 33 if (logger) logger.verbose('MODEM-CHOOSER: Choosing suitable senders', { destination, prefixName });
34 34
35 let imsiSenders = []; 35 let imsiSenders = [];
36 if (config.imsi_senders && prefixName && config.imsi_senders.prefix_names && config.imsi_senders.prefix_names[prefixName]) { 36 if (config.senders_imsi && prefixName && config.senders_imsi.prefix_names && config.senders_imsi.prefix_names[prefixName]) {
37 imsiSenders = filterOutCandidates(config.imsi_senders.prefix_names[prefixName]); 37 imsiSenders = filterOutCandidates(config.senders_imsi.prefix_names[prefixName]);
38 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 });
39 } 39 }
40 40
41 if (!imsiSenders.length && config.imsi_senders && config.imsi_senders.unknown_prefix) { 41 if (!imsiSenders.length && config.senders_imsi && config.senders_imsi.unknown_prefix) {
42 imsiSenders = filterOutCandidates(config.imsi_senders.unknown_prefix); 42 imsiSenders = filterOutCandidates(config.senders_imsi.unknown_prefix);
43 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 });
44 } 44 }
45 45
46 if (!imsiSenders.length) { 46 if (!imsiSenders.length) {
47 imsiSenders = filterOutCandidates([ await partnerLastSeen.get(destination) ]); 47 imsiSenders = filterOutCandidates([ await partnerLastSeen.get(destination) ]);
48 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 });
49 } 49 }
50 50
51 if (!imsiSenders.length && config.imsi_senders && config.imsi_senders.default) { 51 if (!imsiSenders.length && config.senders_imsi && config.senders_imsi.default) {
52 imsiSenders = filterOutCandidates(config.imsi_senders.default); 52 imsiSenders = filterOutCandidates(config.senders_imsi.default);
53 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 });
54 } 54 }
55 55
56 56
57 if (!imsiSenders.length) { 57 if (!imsiSenders.length) {
58 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 });
59 return; 59 return;
60 } 60 }
61 61
62 const count = imsiSenders.length; 62 const count = imsiSenders.length;
63 const idx = Math.round(Math.random() * (count - 1)); 63 const idx = Math.round(Math.random() * (count - 1));
64 const imsiChoosed = imsiSenders[idx]; 64 const imsiChoosed = imsiSenders[idx];
65 65
66 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 });
67 67
68 return imsiChoosed; 68 return imsiChoosed;
69 } 69 }