From 66277927bc51526a20630df6b741059f576c0fa0 Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <me@adhisimon.org> Date: Fri, 18 Nov 2016 13:50:42 +0700 Subject: [PATCH] isPartnerHealthy --- adaptor-xmpp.js | 4 ++++ matrix-util.js | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/adaptor-xmpp.js b/adaptor-xmpp.js index 21752ca..1e3dae8 100644 --- a/adaptor-xmpp.js +++ b/adaptor-xmpp.js @@ -54,6 +54,10 @@ function isPartnerOffline(partner) { return matrixUtil.isPartnerOffline(partner); } +function isPartnerHealthy(partner) { + return matrixUtil.isPartnerHealthy(partner); +} + function init(_username, _password, _logger, _callbacks) { username = _username; password = _password; diff --git a/matrix-util.js b/matrix-util.js index 779806a..1bae060 100644 --- a/matrix-util.js +++ b/matrix-util.js @@ -2,6 +2,7 @@ var moment = require('moment'); var momentFormat = 'YYYY-MM-DD HH:mm:ss'; +var maxHealthyWaitMs = 60 * 1000; module.exports = MatrixUtil; @@ -109,6 +110,32 @@ MatrixUtil.prototype.isPartnerOffline = function(partner) { return true; } +MatrixUtil.prototype.isPartnerHealthy = function(partner) { + if (!partner) { return; } + partner = _cleanPartnerId(partner); + + if (this.isPartnerOffline(partner)) { + return; + } + + let matrix = this.matrix; + let logger = this.logger; + + if (!matrix) { return false; } + + if (!matrix.buddies[partner]) { return false; } + if (!matrix.buddies[partner]['waiting_for_response']) { return true; } + if (!matrix.buddies[partner]['last_outgoing']) { return true; } + if (!matrix.buddies[partner]['last_outgoing']['last_update_ts']) { return true; } + + let delta = Date.now() - Number(matrix.buddies[partner]['last_outgoing']['last_update_ts']); + let isHealthy = delta <= maxHealthyWaitMs; + + logger.verbose('Partner healthy analized', {partner: partner, isHealthy: isHealthy, delta: delta, maxHealthyWaitMs: maxHealthyWaitMs}); + return isHealthy; +} + + MatrixUtil.prototype._updateLastResponseTime = function(partner) { let matrix = this.matrix; let logger = this.logger; -- 1.9.0