Blame view

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