Commit 8dbbfdd1cedc2c7fb1bf0a13189c184dc77f5677

Authored by Adhidarma Hadiwinoto
1 parent e4814c6ce2
Exists in master

Another log

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