From e46f7a4b435ea2dc51c02bc8ca559ed9ab656b11 Mon Sep 17 00:00:00 2001 From: Robert Martin-Legene <robert@nic.ar> Date: Sun, 3 Mar 2019 03:10:54 -0300 Subject: [PATCH] Arreglando varias cosas --- .gitignore | 3 +- bin/monitor.js | 198 ++++++++++++++++++++++++++----------------------- bin/start.sh | 8 +- 3 files changed, 116 insertions(+), 93 deletions(-) diff --git a/.gitignore b/.gitignore index d94a031..2940230 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ */lastseen */status cache -*/cache +*/*cache network*/node network*/bootnode network*/contracts/* +network/*.pid diff --git a/bin/monitor.js b/bin/monitor.js index 30877d1..228d43e 100755 --- a/bin/monitor.js +++ b/bin/monitor.js @@ -4,102 +4,118 @@ "use strict" -const Libbfa = require( process.env.BFAHOME + '/bin/libbfa.js'); -var bfa = new Libbfa(); -var web3 = bfa.newweb3(); -var lastUnlock = 0; +const Libbfa = require( process.env.BFAHOME + '/bin/libbfa.js'); +var bfa = new Libbfa(); +var web3 = bfa.newweb3(); +var lastUnlock = 0; -function peerlist() +function readPeersCache() +{ + if ( ! bfa.fs.existsSync( bfa.networkdir + '/peers.cache' ) ) + return []; + var data = bfa.fs.readFileSync( bfa.networkdir + '/peers.cache' ).toString(); + if ( data.length > 0 ) + var p = data.split(/\r?\n/); + // for some odd reason, I keep seeing empty entries + for ( var i = p.length; i > 0; i-- ) + if ( p[i] == '' ) + p.splice(i,1); + return p; +} + +function writePeersCache( peers ) +{ + // peers.cache is a list of peers we have connected out to in the past. + bfa.fs.writeFileSync( + bfa.networkdir + '/peers.cache', + peers.join("\n") + "\n", + { mode: 0o644 } + ); +} + +function writeStatus( peers ) { - web3.bfa.admin.peers( - function gotAdminPeers( nodelist ) { - var now = new Date(); - var nowpeers = []; - var peers = []; - var newpeers = []; - if ( bfa.fs.existsSync( bfa.networkdir + '/peers.cache' ) ) + // write network/status + bfa.fs.writeFileSync( + bfa.networkdir + '/status', + "UTC: " + new Date().toUTCString() + "\n" + + "BFA peers: " + peers.length + "\n" + + peers.sort().join("\n") + "\n", + { mode: 0o644 } + ); +} + +function parsenode( node ) +{ + if ( !n || !n.protocols || typeof n.protocols.eth != 'object' ) + return; + // default info - likely to get overwritten. + var n; + if ( ! node.network ) + return { info: "<"+node.id+">" }; + if ( typeof node.network.inbound == 'boolean' ) + n.dir = node.network.inbound ? "in" : "out"; + if ( typeof node.enode == 'string' ) + n.info = node.enode; + else + { + if ( node.id ) + n.info += "<" + node.id + ">"; + if ( node.network.remoteAddress ) + { + if ( n.info ) + n.info += "@"; + n.info += node.network.remoteAddress; + } + } + return n; +} + +function gotAdminPeers( nodelist ) +{ + var nowpeers = []; + var peers = readPeersCache(); + var outpeers = []; + var candidatenew = []; + nodelist.forEach( + function(node) { + var n = parsenode( node ); + if ( n ) { - var data = bfa.fs.readFileSync( bfa.networkdir + '/peers.cache' ).toString(); - if ( data.length > 0 ) - peers = data.split(/\r?\n/); - var i = peers.length; - // for some odd reason, I keep seeing empty entries - while ( i-- > 0 ) - if ( peers[i] == '' ) - peers.splice(i,1); - } - nodelist.forEach( - function(node) { - if ( 'object' == typeof(node.protocols.eth) ) - { - // default info - likely to get overwritten. - var info = "<" + node.id + ">"; - var dir = ""; - if ( undefined != node.network ) - { - if ( 'boolean' == typeof(node.network.inbound) ) - { - if ( node.network.inbound ) - dir = "in"; - else - dir = "out"; - } - if ( 'string' == typeof(node.enode) ) - { - info = node.enode; - if (peers.indexOf( node.enode ) == -1 && dir == "out" ) - newpeers.push( node.enode ); - } - else - { - info = ""; - if ( undefined != node.id ) - info += "<" + node.id + ">"; - if ( undefined != node.network.remoteAddress ) - { - if ( info != "" ) - info+= "@"; - info += node.network.remoteAddress; - } - } - } - nowpeers.push( "peer " + dir + ": " + info ); - } + nowpeers.push( "peer " + ( n.dir ? n.dir : '') + ": " + n.info ); + if ( peers.indexOf( n.info ) == -1 ) + { + if ( n.dir == 'out' ) + outpeers.push( n.info ); + candidatenew.push( n.info ); } - ); - // write network/status - bfa.fs.writeFileSync( - bfa.networkdir + '/status', - "UTC: " + now.toUTCString() + "\n" - + "BFA peers: " + nowpeers.length + "\n" - + nowpeers.sort().join("\n") + "\n", - { mode: 0o644 } - ); - // Try to connect to a random node if we have very few peers - if ( nowpeers.length < 5 && peers.length > 0 ) - { - var i = Math.floor( Math.random() * peers.length ); - var enode = peers[i]; - console.log( - "We have " - + nowpeers.length - + " peer" + ( nowpeers.length==1 ? '' : 's' ) + ", so will try to connect to " - + enode - ); - web3.bfa.admin.addPeer( enode ); } - // write network/peers.cache - // peers.cache is a list of peers we have connected out to in the past. - peers = peers.concat( newpeers ); - if (peers.length > 100) - peers.splice( 0, peers.length - 100 ); - bfa.fs.writeFileSync( - bfa.networkdir + '/peers.cache', - peers.join("\n") + "\n", - { mode: 0o644 } - ); } ); + writeStatus( nowpeers ); + // write peers.cache (max 100 entries, FIFO) + peers = peers.concat( outpeers ); + if (peers.length > 100) + peers.splice( 0, peers.length - 100 ); + writePeersCache( peers ); + // Try to connect to a random node if we have very few peers + if ( nowpeers.length < 5 && candidatenew.length > 0 ) + { + var i = Math.floor( Math.random() * candidatenew.length ); + var enode = candidatenew[i]; + console.log( + "We have " + + nowpeers.length + + " peer" + ( nowpeers.length==1 ? '' : 's' ) + ", so will try to connect to " + + enode + ); + web3.bfa.admin.addPeer( enode ); + } +} + +function peerlist() +{ + web3.bfa.admin.peers( gotAdminPeers ); } // Function to determine if our defaultAccount is allowed to seal/mine. @@ -109,8 +125,8 @@ function mayseal() var me = web3.eth.defaultAccount; if ( undefined == me ) { - console.log( "Failed to get default account information." ); - return; + // Failed to get default account information. + me = 'xxxx' } me = me.toLowerCase(); web3.eth.isMining(). diff --git a/bin/start.sh b/bin/start.sh index d0aee91..6ac2184 100755 --- a/bin/start.sh +++ b/bin/start.sh @@ -101,7 +101,13 @@ function startgeth echo '***' echo # (re)configure parameters (you never know if they changed) - flexargs="$( getsyncmode ) --extradata $( extradata )" + flexargs="$( getsyncmode )" + xtra=$( extradata ) + if [ -n "$xtra" ] + then + flexargs="${flexargs} --extradata $( extradata )" + fi + unset xtra if [ "$netport" != 30303 ] then flexargs="${flexargs} --net $netport" -- GitLab