From e6baedd6ed7818f3c527f0c7828dcb58ad0fd7ca Mon Sep 17 00:00:00 2001 From: cubedro Date: Mon, 11 May 2015 21:41:37 +0300 Subject: [PATCH] added check for old inactive nodes --- models/collection.js | 25 +++++++++++++++++++++++++ models/node.js | 17 +++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/models/collection.js b/models/collection.js index 180f73f..e667bff 100644 --- a/models/collection.js +++ b/models/collection.js @@ -115,9 +115,34 @@ Collection.prototype.getNodeOrNew = function(search, data) Collection.prototype.all = function() { + this.removeOldNodes(); + return this._items; } +Collection.prototype.removeOldNodes = function() +{ + var deleteList = [] + + for(var i = this._items.length - 1; i >= 0; i--) + { + var node = this._items[i]; + + if( node.isInactiveAndOld() ) + { + deleteList.push(i); + } + } + + if(deleteList.length > 0) + { + for(var i = 0; i < deleteList.length; i++) + { + this._items.splice(deleteList[i], 1); + } + } +} + Collection.prototype.blockPropagationChart = function() { return this._blockchain.getBlockPropagation(); diff --git a/models/node.js b/models/node.js index 1de6db9..a5dbc1a 100644 --- a/models/node.js +++ b/models/node.js @@ -2,6 +2,7 @@ var geoip = require('geoip-lite'); var _ = require('lodash'); var MAX_HISTORY = 40; +var MAX_INACTIVE_TIME = 1000; var Node = function Node(data) { @@ -180,4 +181,20 @@ Node.prototype.canUpdate = function() return this.info.canUpdateHistory || false; } +Node.prototype.isInactiveAndOld = function() +{ + if(this.stats.active) + return false; + + var lastState = this.uptime.history[this.uptime.history.length -1]; + + if( !_.isUndefined(lastState) && !_.isUndefined(lastState.status) && !_.isUndefined(lastState.time) ) + { + if( lastState.status === 'down' && (_.now() - lastState.time) > MAX_INACTIVE_TIME ) + return true; + } + + return false; +} + module.exports = Node;