Commit d3a56a071a4f942f0aaf0be6aa117287257ecd47

Authored by Adhidarma Hadiwinoto
1 parent 275364f334
Exists in master

Log ip

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}. Total registered IMSIs before: ${Object.keys(modemList.by_imsi).length}`, { device: val.device }); 56 logger.info(`First registration of modem with IMSI ${val.imsi}. Total registered IMSIs before: ${Object.keys(modemList.by_imsi).length}`, { ip: val.reportIp, device: val.device });
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 logger.info(`Modem with IMSI ${val.imsi} change from ${modemList.byName[oldName].device} to ${val.device}`); 61 logger.info(`Modem with IMSI ${val.imsi} change from ${modemList.byName[oldName].device} to ${val.device}`);
62 delete modemList.by_name[oldName]; 62 delete modemList.by_name[oldName];
63 } 63 }
64 64
65 modemList.by_imsi[val.imsi] = val; 65 modemList.by_imsi[val.imsi] = val;
66 } 66 }
67 67
68 /** 68 /**
69 * Update data sebuah modem berdasarkan MSISDN. 69 * Update data sebuah modem berdasarkan MSISDN.
70 * 70 *
71 * @param {ModemData} val - objek data modem 71 * @param {ModemData} val - objek data modem
72 */ 72 */
73 function touchByMSISDN(val) { 73 function touchByMSISDN(val) {
74 if (!val || !val.msisdn) return; 74 if (!val || !val.msisdn) return;
75 if (typeof val.msisdn !== 'string') return; 75 if (typeof val.msisdn !== 'string') return;
76 if (!val.msisdn.trim()) return; 76 if (!val.msisdn.trim()) return;
77 77
78 modemList.by_msisdn[val.msisdn] = val; 78 modemList.by_msisdn[val.msisdn] = val;
79 } 79 }
80 80
81 /** 81 /**
82 * Update data sebuah modem. 82 * Update data sebuah modem.
83 * 83 *
84 * @param {ModemData} val - objek data modem 84 * @param {ModemData} val - objek data modem
85 * @see ModemData 85 * @see ModemData
86 */ 86 */
87 function touch(val) { 87 function touch(val) {
88 if (!val || typeof val !== 'object') return; 88 if (!val || typeof val !== 'object') return;
89 89
90 val._ts = new Date(); 90 val._ts = new Date();
91 91
92 if (!val.reportIp) { 92 if (!val.reportIp) {
93 val.reportIp = '127.0.0.1'; 93 val.reportIp = '127.0.0.1';
94 } 94 }
95 95
96 touchByName(val); 96 touchByName(val);
97 touchByIMSI(val); 97 touchByIMSI(val);
98 touchByMSISDN(val); 98 touchByMSISDN(val);
99 } 99 }
100 /** 100 /**
101 * Ambil data sebuah modem. 101 * Ambil data sebuah modem.
102 * 102 *
103 * @param {string} selector - selector pencarian, valid jika bernilai salah satu dari: name, imsi, msisdn 103 * @param {string} selector - selector pencarian, valid jika bernilai salah satu dari: name, imsi, msisdn
104 * @param {string} keyword - kata kunci modem yang ingin diambil 104 * @param {string} keyword - kata kunci modem yang ingin diambil
105 * @returns {ModemData} data modem terkait 105 * @returns {ModemData} data modem terkait
106 */ 106 */
107 function get(selector, keyword) { 107 function get(selector, keyword) {
108 if (!selector || !keyword) return null; 108 if (!selector || !keyword) return null;
109 109
110 return modemList[`by_${selector}`] ? modemList[`by_${selector}`][keyword] : null; 110 return modemList[`by_${selector}`] ? modemList[`by_${selector}`][keyword] : null;
111 } 111 }
112 112
113 function dump() { 113 function dump() {
114 return modemList; 114 return modemList;
115 } 115 }
116 116
117 exports.touch = touch; 117 exports.touch = touch;
118 exports.set = touch; 118 exports.set = touch;
119 exports.get = get; 119 exports.get = get;
120 exports.dump = dump; 120 exports.dump = dump;