Commit 66277927bc51526a20630df6b741059f576c0fa0

Authored by Adhidarma Hadiwinoto
1 parent a0f2ed6a5b
Exists in master

isPartnerHealthy

Showing 2 changed files with 31 additions and 0 deletions Side-by-side Diff

... ... @@ -54,6 +54,10 @@ function isPartnerOffline(partner) {
54 54 return matrixUtil.isPartnerOffline(partner);
55 55 }
56 56  
  57 +function isPartnerHealthy(partner) {
  58 + return matrixUtil.isPartnerHealthy(partner);
  59 +}
  60 +
57 61 function init(_username, _password, _logger, _callbacks) {
58 62 username = _username;
59 63 password = _password;
... ... @@ -2,6 +2,7 @@
2 2  
3 3 var moment = require('moment');
4 4 var momentFormat = 'YYYY-MM-DD HH:mm:ss';
  5 +var maxHealthyWaitMs = 60 * 1000;
5 6  
6 7 module.exports = MatrixUtil;
7 8  
... ... @@ -109,6 +110,32 @@ MatrixUtil.prototype.isPartnerOffline = function(partner) {
109 110 return true;
110 111 }
111 112  
  113 +MatrixUtil.prototype.isPartnerHealthy = function(partner) {
  114 + if (!partner) { return; }
  115 + partner = _cleanPartnerId(partner);
  116 +
  117 + if (this.isPartnerOffline(partner)) {
  118 + return;
  119 + }
  120 +
  121 + let matrix = this.matrix;
  122 + let logger = this.logger;
  123 +
  124 + if (!matrix) { return false; }
  125 +
  126 + if (!matrix.buddies[partner]) { return false; }
  127 + if (!matrix.buddies[partner]['waiting_for_response']) { return true; }
  128 + if (!matrix.buddies[partner]['last_outgoing']) { return true; }
  129 + if (!matrix.buddies[partner]['last_outgoing']['last_update_ts']) { return true; }
  130 +
  131 + let delta = Date.now() - Number(matrix.buddies[partner]['last_outgoing']['last_update_ts']);
  132 + let isHealthy = delta <= maxHealthyWaitMs;
  133 +
  134 + logger.verbose('Partner healthy analized', {partner: partner, isHealthy: isHealthy, delta: delta, maxHealthyWaitMs: maxHealthyWaitMs});
  135 + return isHealthy;
  136 +}
  137 +
  138 +
112 139 MatrixUtil.prototype._updateLastResponseTime = function(partner) {
113 140 let matrix = this.matrix;
114 141 let logger = this.logger;