Commit ab91c1ebbabf2558382f13d88c48b144d5326432

Authored by Adhidarma Hadiwinoto
1 parent 8dbbfdd1ce
Exists in master

Verbose log

Showing 1 changed file with 7 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}`, { name: val.name, ip: val.reportIp, device: val.device }); 56 logger.verbose(`New IMSI registration`, {
57 imsi: val.imsi,
58 name: val.name,
59 ip: val.reportIp,
60 device: val.device,
61 imsi_registered: Object.keys(modemList.by_imsi).length + 1,
62 });
57 } 63 }
58 64
59 const oldName = modemList.by_imsi[val.imsi] ? modemList.by_imsi[val.imsi].name : null; 65 const oldName = modemList.by_imsi[val.imsi] ? modemList.by_imsi[val.imsi].name : null;
60 if (oldName && oldName !== val.name && modemList.by_name[oldName]) { 66 if (oldName && oldName !== val.name && modemList.by_name[oldName]) {
61 logger.info(`Modem with IMSI ${val.imsi} move detected`, { 67 logger.info(`Modem with IMSI ${val.imsi} move detected`, {
62 old_name: oldName, 68 old_name: oldName,
63 old_ip: modemList.by_name[oldName].reportIp, 69 old_ip: modemList.by_name[oldName].reportIp,
64 old_device: modemList.by_name[oldName].device, 70 old_device: modemList.by_name[oldName].device,
65 new_name: val.name, 71 new_name: val.name,
66 new_ip: val.reportIp, 72 new_ip: val.reportIp,
67 new_device: val.device, 73 new_device: val.device,
68 }); 74 });
69 delete modemList.by_name[oldName]; 75 delete modemList.by_name[oldName];
70 } 76 }
71 77
72 modemList.by_imsi[val.imsi] = val; 78 modemList.by_imsi[val.imsi] = val;
73 } 79 }
74 80
75 /** 81 /**
76 * Update data sebuah modem berdasarkan MSISDN. 82 * Update data sebuah modem berdasarkan MSISDN.
77 * 83 *
78 * @param {ModemData} val - objek data modem 84 * @param {ModemData} val - objek data modem
79 */ 85 */
80 function touchByMSISDN(val) { 86 function touchByMSISDN(val) {
81 if (!val || !val.msisdn) return; 87 if (!val || !val.msisdn) return;
82 if (typeof val.msisdn !== 'string') return; 88 if (typeof val.msisdn !== 'string') return;
83 if (!val.msisdn.trim()) return; 89 if (!val.msisdn.trim()) return;
84 90
85 modemList.by_msisdn[val.msisdn] = val; 91 modemList.by_msisdn[val.msisdn] = val;
86 } 92 }
87 93
88 /** 94 /**
89 * Update data sebuah modem. 95 * Update data sebuah modem.
90 * 96 *
91 * @param {ModemData} val - objek data modem 97 * @param {ModemData} val - objek data modem
92 * @see ModemData 98 * @see ModemData
93 */ 99 */
94 function touch(val) { 100 function touch(val) {
95 if (!val || typeof val !== 'object') return; 101 if (!val || typeof val !== 'object') return;
96 102
97 val._ts = new Date(); 103 val._ts = new Date();
98 104
99 if (!val.reportIp) { 105 if (!val.reportIp) {
100 val.reportIp = '127.0.0.1'; 106 val.reportIp = '127.0.0.1';
101 } 107 }
102 108
103 touchByName(val); 109 touchByName(val);
104 touchByIMSI(val); 110 touchByIMSI(val);
105 touchByMSISDN(val); 111 touchByMSISDN(val);
106 } 112 }
107 /** 113 /**
108 * Ambil data sebuah modem. 114 * Ambil data sebuah modem.
109 * 115 *
110 * @param {string} selector - selector pencarian, valid jika bernilai salah satu dari: name, imsi, msisdn 116 * @param {string} selector - selector pencarian, valid jika bernilai salah satu dari: name, imsi, msisdn
111 * @param {string} keyword - kata kunci modem yang ingin diambil 117 * @param {string} keyword - kata kunci modem yang ingin diambil
112 * @returns {ModemData} data modem terkait 118 * @returns {ModemData} data modem terkait
113 */ 119 */
114 function get(selector, keyword) { 120 function get(selector, keyword) {
115 if (!selector || !keyword) return null; 121 if (!selector || !keyword) return null;
116 122
117 return modemList[`by_${selector}`] ? modemList[`by_${selector}`][keyword] : null; 123 return modemList[`by_${selector}`] ? modemList[`by_${selector}`][keyword] : null;
118 } 124 }
119 125
120 function dump() { 126 function dump() {
121 return modemList; 127 return modemList;
122 } 128 }
123 129
124 exports.touch = touch; 130 exports.touch = touch;
125 exports.set = touch; 131 exports.set = touch;
126 exports.get = get; 132 exports.get = get;
127 exports.dump = dump; 133 exports.dump = dump;