Commit 3522ae5bc90b9d74d68b13e80a3d69ab3fe73fb1

Authored by Adhidarma Hadiwinoto
1 parent e18eb1b3b6
Exists in master

MODEM-INFO: stuck detector

Showing 4 changed files with 25 additions and 3 deletions Side-by-side Diff

1 1 {
2   - "name": "SMS0",
  2 + "name": "USB0",
3 3 "modem": {
4 4 "device": "/dev/ttyUSB0",
5 5 "options": {
6 6 "baudRate": 115200
7 7 }
8 8 },
  9 +
9 10 "report_url": {
10 11 "incoming_sms": "http://localhost:16481/apikey/PLEASE_CHANGE_ME/on-sms",
11 12 "register_modem": "http://localhost:16481/apikey/PLEASE_CHANGE_ME/modems/set"
12 13 },
  14 +
13 15 "http_command_server": {
14 16 "apikey": "PLEASE_CHANGE_ME",
15 17 "listen_port": "2110"
... ... @@ -17,5 +19,7 @@
17 19  
18 20 "interval_beetwen_signal_strength_ms": 30000,
19 21 "sleep_after_send_sms_ms": 2000,
20   - "disable_delete_inbox_on_startup": false
  22 + "disable_delete_inbox_on_startup": false,
  23 + "disable_idle_check": false,
  24 + "max_last_data_age_ms": 120000
21 25 }
22 26 \ No newline at end of file
lib/modem-commands.js
... ... @@ -13,6 +13,7 @@ let port;
13 13  
14 14 function writeToPort(data) {
15 15 return new Promise((resolve) => {
  16 + modemInfo.lastWriteTs = new Date();
16 17 port.write(data, (err, bytesWritten) => {
17 18 if (err) logger.warn(`ERROR: ${err.toString()}`);
18 19  
  1 +const MAX_LAST_DATA_AGE_MS = 2 * 60 * 1000;
  2 +const INTERVAL_BETWEEN_IDLE_CHECK_MS = 30 * 1000;
  3 +
1 4 const config = require('komodo-sdk/config');
  5 +const logger = require('komodo-sdk/logger');
2 6  
3 7 const modemInfo = {
4 8 device: config.modem.device,
... ... @@ -6,13 +10,25 @@ const modemInfo = {
6 10 model: null,
7 11 imei: null,
8 12 imsi: null,
9   - msisdn: null,
10 13 cops: null,
11 14 networkId: null,
12 15 networkName: null,
13 16 signalStrength: null,
14 17 signalStrengthTs: null,
15 18 signalStrengthTsReadable: null,
  19 + startTime: new Date(),
  20 + lastWriteTs: null,
  21 + lastReadTs: null,
16 22 };
17 23  
  24 +if (!config.disable_idle_check) {
  25 + setInterval(() => {
  26 + const deltaMs = new Date() - Math.max(modemInfo.lastWriteTs, modemInfo.startTime);
  27 + if (deltaMs >= (config.max_last_data_age_ms || MAX_LAST_DATA_AGE_MS)) {
  28 + logger.warn(`Modem idle for ${deltaMs} ms. Modem stucked? Terminating!`);
  29 + process.exit(1);
  30 + }
  31 + }, INTERVAL_BETWEEN_IDLE_CHECK_MS);
  32 +}
  33 +
18 34 module.exports = modemInfo;
lib/serialport-parsers.js
... ... @@ -106,6 +106,7 @@ function isResultCodeIs(data, resultCode) {
106 106  
107 107 const parserReadline = new ParserReadline({ delimiter: PARSER_READLINE_DELIMITER });
108 108 parserReadline.on('data', (data) => {
  109 + modemInfo.lastReadTs = new Date();
109 110 logger.verbose('INCOMING', { data: `${data.toString()}${PARSER_READLINE_DELIMITER}`, parser: 'parserReadLine' });
110 111  
111 112 if (!data) return;