2014-12-04 22:35:09 +01:00
|
|
|
var geoip = require('geoip-lite');
|
|
|
|
|
2015-01-20 19:29:31 +01:00
|
|
|
require('es6-promise').polyfill();
|
|
|
|
|
|
|
|
var Node = function Node(options, id)
|
|
|
|
{
|
|
|
|
this.info = options;
|
|
|
|
this.info.geo = geoip.lookup(this.info.rpcHost);
|
2015-02-05 00:30:16 +01:00
|
|
|
this.info.id = parseInt(id);
|
2015-01-20 19:29:31 +01:00
|
|
|
this.info.stats = {
|
|
|
|
active: false,
|
|
|
|
peers: 0,
|
|
|
|
mining: false,
|
|
|
|
block: {
|
|
|
|
height: 0,
|
2015-01-28 22:57:45 +01:00
|
|
|
hash: '?',
|
|
|
|
timestamp: 0
|
2015-01-20 19:29:31 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this.web3 = require('ethereum.js');
|
|
|
|
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2015-01-28 01:41:04 +01:00
|
|
|
Node.prototype.update = function()
|
2015-01-20 19:29:31 +01:00
|
|
|
{
|
2015-01-29 00:41:52 +01:00
|
|
|
var sock = new this.web3.providers.HttpSyncProvider('http://' + this.info.rpcHost + ':' + this.info.rpcPort);
|
|
|
|
this.web3.setProvider(sock);
|
2015-01-20 19:29:31 +01:00
|
|
|
|
|
|
|
var eth = this.web3.eth;
|
|
|
|
|
2015-01-28 22:57:45 +01:00
|
|
|
try {
|
2015-01-29 00:41:52 +01:00
|
|
|
this.info.stats.peers = eth.peerCount;
|
2015-01-28 22:57:45 +01:00
|
|
|
}
|
|
|
|
catch (err) {
|
2015-01-29 00:41:52 +01:00
|
|
|
this.info.stats.peers = null;
|
2015-01-28 22:57:45 +01:00
|
|
|
}
|
|
|
|
|
2015-01-29 00:41:52 +01:00
|
|
|
if(this.info.stats.peers != null) {
|
2015-01-29 17:50:16 +01:00
|
|
|
this.info.stats.block.height = parseInt(eth.number);
|
2015-01-28 22:57:45 +01:00
|
|
|
var block = eth.block(this.info.stats.block.height)
|
|
|
|
this.info.stats.block.hash = block.hash;
|
|
|
|
this.info.stats.block.timestamp = block.timestamp;
|
|
|
|
this.info.stats.mining = eth.mining;
|
|
|
|
this.info.stats.active = true;
|
|
|
|
} else {
|
|
|
|
this.info.stats.active = false;
|
|
|
|
}
|
2015-01-20 19:29:31 +01:00
|
|
|
|
2015-01-28 01:41:04 +01:00
|
|
|
return this.info;
|
2015-01-20 19:29:31 +01:00
|
|
|
};
|
2014-12-04 22:35:09 +01:00
|
|
|
|
|
|
|
module.exports = Node;
|