diff --git a/app.js b/app.js index 2dd91de..2a38c8d 100644 --- a/app.js +++ b/app.js @@ -64,16 +64,6 @@ api.on('connection', function(spark) { var info = Nodes.add(data); spark.emit('ready'); - if(Nodes.getHistory().requiresUpdate() && Nodes.canNodeUpdate(data.id) && (!askedForHistory || (new Date()).getTime() - askedForHistoryTime > 120000)) - { - var range = Nodes.getHistory().getHistoryRequestInterval(); - console.log("asked " + data.id + " for history"); - console.log('interval', range); - spark.emit('history', range); - askedForHistory = true; - askedForHistoryTime = (new Date()).getTime(); - } - client.write({action: 'add', data: info}); client.write({action: 'charts', data: Nodes.getCharts()}); } @@ -110,7 +100,8 @@ api.on('connection', function(spark) { askedForHistory = false; }); - spark.on('node-ping', function(data){ + spark.on('node-ping', function(data) + { spark.emit('node-pong'); }); @@ -121,6 +112,16 @@ api.on('connection', function(spark) { var stats = Nodes.updateLatency(data.id, data.latency); client.write({action: 'latency', data: stats}); + + if(Nodes.getHistory().requiresUpdate() && Nodes.canNodeUpdate(data.id) && (!askedForHistory || (new Date()).getTime() - askedForHistoryTime > 120000)) + { + var range = Nodes.getHistory().getHistoryRequestInterval(); + console.log("asked " + data.id + " for history"); + console.log('interval', range); + spark.emit('history', range); + askedForHistory = true; + askedForHistoryTime = (new Date()).getTime(); + } } }); diff --git a/models/collection.js b/models/collection.js index d2c81c9..819993c 100644 --- a/models/collection.js +++ b/models/collection.js @@ -139,9 +139,19 @@ Collection.prototype.getHistory = function() Collection.prototype.canNodeUpdate = function(id) { var node = this.getNode({id: id}); + if(!node) return false; - return node.canUpdate(); + + if(node.canUpdate()) + { + var diff = this._history.bestBlockNumber() - node.getBlockNumber(); + + if(diff <= 0) + return true; + } + + return false; } module.exports = Collection; \ No newline at end of file diff --git a/models/history.js b/models/history.js index 278646f..d190b58 100644 --- a/models/history.js +++ b/models/history.js @@ -128,11 +128,21 @@ History.prototype.prevMaxBlock = function(number) return this._items[index]; } -History.prototype.bestBlock = function(obj) +History.prototype.bestBlock = function() { return _.max(this._items, 'height'); } +History.prototype.bestBlockNumber = function() +{ + var best = this.bestBlock(); + + if(typeof best.height !== 'undefined') + return best.height; + + return 0; +} + History.prototype.getNodePropagation = function(id) { var propagation = new Array(MAX_PEER_PROPAGATION); diff --git a/models/node.js b/models/node.js index 8f479d3..a9ae4b6 100644 --- a/models/node.js +++ b/models/node.js @@ -150,6 +150,11 @@ Node.prototype.setState = function(active) this.uptime.history.push({status: (active ? 'up' : 'down'), time: (new Date()).getTime()}); } +Node.prototype.getBlockNumber = function() +{ + return this.stats.block.number; +} + Node.prototype.canUpdate = function() { return this.info.canUpdateHistory || false;