Commit 3522ae5bc90b9d74d68b13e80a3d69ab3fe73fb1
1 parent
e18eb1b3b6
Exists in
master
MODEM-INFO: stuck detector
Showing 4 changed files with 25 additions and 3 deletions Side-by-side Diff
config.sample.json
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
lib/modem-info.js
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; |