Commit e48dc71092e421a823ee43e26c5b72d8b0423970

Authored by Adhidarma Hadiwinoto
1 parent 10604e23a3
Exists in master

More debug

Showing 1 changed file with 1 additions and 1 deletions Inline Diff

1 'use strict'; 1 'use strict';
2 2
3 const logger = global.KOMODO_LOGGER; 3 const logger = global.KOMODO_LOGGER;
4 4
5 if (logger) { 5 if (logger) {
6 logger.verbose('MODEMS: logger set using global logger'); 6 logger.verbose('MODEMS: logger set using global logger');
7 } 7 }
8 8
9 const modemList = { 9 const modemList = {
10 by_name: {}, 10 by_name: {},
11 by_imsi: {}, 11 by_imsi: {},
12 by_msisdn: {}, 12 by_msisdn: {},
13 }; 13 };
14 14
15 /** 15 /**
16 * Objek data sebuah modem. 16 * Objek data sebuah modem.
17 * 17 *
18 * @typedef {Object} ModemData 18 * @typedef {Object} ModemData
19 * @property {string} name - nama modem 19 * @property {string} name - nama modem
20 * @property {string} device - modem device path 20 * @property {string} device - modem device path
21 * @property {string} imsi - IMSI modem 21 * @property {string} imsi - IMSI modem
22 * @property {string} msisdn - MSISDN modem 22 * @property {string} msisdn - MSISDN modem
23 * @property {string} networkId - operator network id 23 * @property {string} networkId - operator network id
24 * @property {string} networkName - operator network name 24 * @property {string} networkName - operator network name
25 * @property {string} signalStrength - modem signal strength 25 * @property {string} signalStrength - modem signal strength
26 * @property {number} uptime - modem uptime in seconds 26 * @property {number} uptime - modem uptime in seconds
27 * @property {string} reportIp - IP modem 27 * @property {string} reportIp - IP modem
28 * @property {number} reportPort - TCP port modem 28 * @property {number} reportPort - TCP port modem
29 * @property {string} reportApikey - APIKEY modem 29 * @property {string} reportApikey - APIKEY modem
30 * @property {string} reportPathSms - url path untuk pengiriman SMS 30 * @property {string} reportPathSms - url path untuk pengiriman SMS
31 */ 31 */
32 32
33 /** 33 /**
34 * Update data sebuah modem berdasarkan nama modem. 34 * Update data sebuah modem berdasarkan nama modem.
35 * 35 *
36 * @param {ModemData} val - objek data modem 36 * @param {ModemData} val - objek data modem
37 */ 37 */
38 function touchByName(val) { 38 function touchByName(val) {
39 if (!val || !val.name) return; 39 if (!val || !val.name) return;
40 if (typeof val.name !== 'string') return; 40 if (typeof val.name !== 'string') return;
41 if (!val.name.trim()) return; 41 if (!val.name.trim()) return;
42 42
43 modemList.by_name[val.name] = val; 43 modemList.by_name[val.name] = val;
44 } 44 }
45 /** 45 /**
46 * Update data sebuah modem berdasarkan IMSI. 46 * Update data sebuah modem berdasarkan IMSI.
47 * 47 *
48 * @param {ModemData} val - objek data modem 48 * @param {ModemData} val - objek data modem
49 */ 49 */
50 function touchByIMSI(val) { 50 function touchByIMSI(val) {
51 if (!val || !val.imsi) return; 51 if (!val || !val.imsi) return;
52 if (typeof val.imsi !== 'string') return; 52 if (typeof val.imsi !== 'string') return;
53 if (!val.imsi.trim()) return; 53 if (!val.imsi.trim()) return;
54 54
55 if (logger && !modemList.by_imsi[val.imsi]) { 55 if (logger && !modemList.by_imsi[val.imsi]) {
56 logger.info(`First registration of modem with IMSI ${val.imsi}`); 56 logger.info(`First registration of modem with IMSI ${val.imsi}. Total registered IMSIs: ${Object.keys(modemList.by_imsi).length}`);
57 } 57 }
58 58
59 const oldName = modemList.by_imsi[val.imsi] ? modemList.by_imsi[val.imsi].name : null; 59 const oldName = modemList.by_imsi[val.imsi] ? modemList.by_imsi[val.imsi].name : null;
60 if (oldName && oldName !== val.name && modemList.by_name[oldName]) { 60 if (oldName && oldName !== val.name && modemList.by_name[oldName]) {
61 delete modemList.by_name[oldName]; 61 delete modemList.by_name[oldName];
62 } 62 }
63 63
64 modemList.by_imsi[val.imsi] = val; 64 modemList.by_imsi[val.imsi] = val;
65 } 65 }
66 66
67 /** 67 /**
68 * Update data sebuah modem berdasarkan MSISDN. 68 * Update data sebuah modem berdasarkan MSISDN.
69 * 69 *
70 * @param {ModemData} val - objek data modem 70 * @param {ModemData} val - objek data modem
71 */ 71 */
72 function touchByMSISDN(val) { 72 function touchByMSISDN(val) {
73 if (!val || !val.msisdn) return; 73 if (!val || !val.msisdn) return;
74 if (typeof val.msisdn !== 'string') return; 74 if (typeof val.msisdn !== 'string') return;
75 if (!val.msisdn.trim()) return; 75 if (!val.msisdn.trim()) return;
76 76
77 modemList.by_msisdn[val.msisdn] = val; 77 modemList.by_msisdn[val.msisdn] = val;
78 } 78 }
79 79
80 /** 80 /**
81 * Update data sebuah modem. 81 * Update data sebuah modem.
82 * 82 *
83 * @param {ModemData} val - objek data modem 83 * @param {ModemData} val - objek data modem
84 * @see ModemData 84 * @see ModemData
85 */ 85 */
86 function touch(val) { 86 function touch(val) {
87 if (!val || typeof val !== 'object') return; 87 if (!val || typeof val !== 'object') return;
88 88
89 val._ts = new Date(); 89 val._ts = new Date();
90 90
91 if (!val.reportIp) { 91 if (!val.reportIp) {
92 val.reportIp = '127.0.0.1'; 92 val.reportIp = '127.0.0.1';
93 } 93 }
94 94
95 touchByName(val); 95 touchByName(val);
96 touchByIMSI(val); 96 touchByIMSI(val);
97 touchByMSISDN(val); 97 touchByMSISDN(val);
98 } 98 }
99 /** 99 /**
100 * Ambil data sebuah modem. 100 * Ambil data sebuah modem.
101 * 101 *
102 * @param {string} selector - selector pencarian, valid jika bernilai salah satu dari: name, imsi, msisdn 102 * @param {string} selector - selector pencarian, valid jika bernilai salah satu dari: name, imsi, msisdn
103 * @param {string} keyword - kata kunci modem yang ingin diambil 103 * @param {string} keyword - kata kunci modem yang ingin diambil
104 * @returns {ModemData} data modem terkait 104 * @returns {ModemData} data modem terkait
105 */ 105 */
106 function get(selector, keyword) { 106 function get(selector, keyword) {
107 if (!selector || !keyword) return null; 107 if (!selector || !keyword) return null;
108 108
109 return modemList[`by_${selector}`] ? modemList[`by_${selector}`][keyword] : null; 109 return modemList[`by_${selector}`] ? modemList[`by_${selector}`][keyword] : null;
110 } 110 }
111 111
112 function dump() { 112 function dump() {
113 return modemList; 113 return modemList;
114 } 114 }
115 115
116 exports.touch = touch; 116 exports.touch = touch;
117 exports.set = touch; 117 exports.set = touch;
118 exports.get = get; 118 exports.get = get;
119 exports.dump = dump; 119 exports.dump = dump;