Commit 02503ffcaac60f2d7078c79f3b4942710d6baa8c
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
lib/modems2.js
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; |