From 3522ae5bc90b9d74d68b13e80a3d69ab3fe73fb1 Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <me@adhisimon.org> Date: Wed, 4 Sep 2019 10:53:40 +0700 Subject: [PATCH] MODEM-INFO: stuck detector --- config.sample.json | 8 ++++++-- lib/modem-commands.js | 1 + lib/modem-info.js | 18 +++++++++++++++++- lib/serialport-parsers.js | 1 + 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/config.sample.json b/config.sample.json index cd222b5..83ccb90 100644 --- a/config.sample.json +++ b/config.sample.json @@ -1,15 +1,17 @@ { - "name": "SMS0", + "name": "USB0", "modem": { "device": "/dev/ttyUSB0", "options": { "baudRate": 115200 } }, + "report_url": { "incoming_sms": "http://localhost:16481/apikey/PLEASE_CHANGE_ME/on-sms", "register_modem": "http://localhost:16481/apikey/PLEASE_CHANGE_ME/modems/set" }, + "http_command_server": { "apikey": "PLEASE_CHANGE_ME", "listen_port": "2110" @@ -17,5 +19,7 @@ "interval_beetwen_signal_strength_ms": 30000, "sleep_after_send_sms_ms": 2000, - "disable_delete_inbox_on_startup": false + "disable_delete_inbox_on_startup": false, + "disable_idle_check": false, + "max_last_data_age_ms": 120000 } \ No newline at end of file diff --git a/lib/modem-commands.js b/lib/modem-commands.js index 7553562..6fde986 100644 --- a/lib/modem-commands.js +++ b/lib/modem-commands.js @@ -13,6 +13,7 @@ let port; function writeToPort(data) { return new Promise((resolve) => { + modemInfo.lastWriteTs = new Date(); port.write(data, (err, bytesWritten) => { if (err) logger.warn(`ERROR: ${err.toString()}`); diff --git a/lib/modem-info.js b/lib/modem-info.js index 5583d04..6a087ec 100644 --- a/lib/modem-info.js +++ b/lib/modem-info.js @@ -1,4 +1,8 @@ +const MAX_LAST_DATA_AGE_MS = 2 * 60 * 1000; +const INTERVAL_BETWEEN_IDLE_CHECK_MS = 30 * 1000; + const config = require('komodo-sdk/config'); +const logger = require('komodo-sdk/logger'); const modemInfo = { device: config.modem.device, @@ -6,13 +10,25 @@ const modemInfo = { model: null, imei: null, imsi: null, - msisdn: null, cops: null, networkId: null, networkName: null, signalStrength: null, signalStrengthTs: null, signalStrengthTsReadable: null, + startTime: new Date(), + lastWriteTs: null, + lastReadTs: null, }; +if (!config.disable_idle_check) { + setInterval(() => { + const deltaMs = new Date() - Math.max(modemInfo.lastWriteTs, modemInfo.startTime); + if (deltaMs >= (config.max_last_data_age_ms || MAX_LAST_DATA_AGE_MS)) { + logger.warn(`Modem idle for ${deltaMs} ms. Modem stucked? Terminating!`); + process.exit(1); + } + }, INTERVAL_BETWEEN_IDLE_CHECK_MS); +} + module.exports = modemInfo; diff --git a/lib/serialport-parsers.js b/lib/serialport-parsers.js index 8c8ed7d..9c6b39b 100644 --- a/lib/serialport-parsers.js +++ b/lib/serialport-parsers.js @@ -106,6 +106,7 @@ function isResultCodeIs(data, resultCode) { const parserReadline = new ParserReadline({ delimiter: PARSER_READLINE_DELIMITER }); parserReadline.on('data', (data) => { + modemInfo.lastReadTs = new Date(); logger.verbose('INCOMING', { data: `${data.toString()}${PARSER_READLINE_DELIMITER}`, parser: 'parserReadLine' }); if (!data) return; -- 1.9.0