diff --git a/lib/partner-mkios.js b/lib/partner-mkios.js index eb21a9b..cda9b65 100644 --- a/lib/partner-mkios.js +++ b/lib/partner-mkios.js @@ -22,7 +22,12 @@ if (!config || !config.partner || !config.partner.pin) { } matrix.modem = {}; + matrix.not_ready = true; +matrix.not_ready_ts = null; +matrix.not_ready_ts_readable = null; +matrix.not_ready_max_age_secs = null; + matrix.stock = {}; const db = require('./local-db').getConnection(); @@ -145,7 +150,7 @@ function onUSSDResponse(data) { } deleteResumeHandler(last_trx_id);; - matrix.not_ready = false; + unsuspendPull(); report({ trx_id: last_trx_id, @@ -172,13 +177,7 @@ modem.open(function(err) { } logger.info('Modem open successfully, going to ready in 30 secs'); - setTimeout( - function() { - matrix.not_ready = false; - logger.info('Gateway is ready'); - }, - 30 * 1000 - ) + setTimeout( unsuspendPull, 30 * 1000 ) }) @@ -243,16 +242,28 @@ function getStockBalanceFromMesssage(msg, rules) { function suspendPull(trx_id) { logger.verbose('Set modem to not ready so no other task can be entered and registering delayed resume'); matrix.not_ready = true; + matrix.not_ready_ts = new Date(); + matrix.not_ready_ts_readable = moment(matrix.not_ready_ts).format('YYYY-MM-DD HH:mm:ss'); resumeHandlers['trx' + trx_id] = setTimeout(function() { logger.verbose('Resuming supsended modem', {trx_id: trx_id}); - matrix.not_ready = false; + unsuspendPull(); report({ trx_id: trx_id, rc: '68', message: 'USSD timeout' }) - }, Number(config.partner.modem.suspend_time_ms) || 20 * 1000 ) + }, Number(config.partner.modem.suspend_time_ms) || 20 * 1000 ); +} + +function unsuspendPull() { + matrix.not_ready = false; + + if (matrix.not_ready_ts) { + matrix.not_ready_max_age_secs = Math.max( (new Date() - matrix.not_ready_ts) / 1000, matrix.not_ready_max_age_secs ); + } + + logger.verbose('Modem is ready'); } function deleteResumeHandler(trx_id) { @@ -266,7 +277,7 @@ function deleteResumeHandler(trx_id) { function onTrxFinish(trx_id) { deleteResumeHandler(trx_id); pendingArchive.remove(trx_id); - matrix.not_ready = false; + unsuspendPull(); } function buy(task) {