From 5a8de15542c4e63a79efdafe36a96979534118fd Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Fri, 7 Sep 2018 00:31:21 +0700
Subject: [PATCH] matrix.not_ready_ts dan kawan-kawan

---
 lib/partner-mkios.js | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

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) {
-- 
1.9.0