Commit 02503ffcaac60f2d7078c79f3b4942710d6baa8c

Authored by Adhidarma Hadiwinoto
1 parent b8d3a4b0d7
Exists in master

Hapus modem dari list jika terjadi pergeseran

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

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