Commit 275364f334f6d68ffbb3beb05e3ce51415c514fb

Authored by Adhidarma Hadiwinoto
1 parent 7865e7f5be
Exists in master

Log on modem change

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