added lots more stats to /static/
authorForrest Voight <forrest@forre.st>
Sun, 15 Apr 2012 20:44:52 +0000 (16:44 -0400)
committerForrest Voight <forrest@forre.st>
Sun, 15 Apr 2012 20:44:52 +0000 (16:44 -0400)
p2pool/web.py
web-static/index.html

index 153eb90..44d8ee3 100644 (file)
@@ -110,6 +110,7 @@ def get_web_root(tracker, current_work, current_work2, get_current_txouts, datad
             pool_nonstale_hash_rate=nonstale_hash_rate,
             pool_hash_rate=nonstale_hash_rate/(1 - stale_prop),
             pool_stale_prop=stale_prop,
+            min_difficulty=bitcoin_data.target_to_difficulty(tracker.shares[current_work.value['best_share_hash']].max_target),
         )
     
     def get_local_stats():
@@ -159,6 +160,18 @@ def get_web_root(tracker, current_work, current_work2, get_current_txouts, datad
             miner_hash_rates=miner_hash_rates,
             miner_dead_hash_rates=miner_dead_hash_rates,
             efficiency_if_miner_perfect=(1 - stale_orphan_shares/shares)/(1 - global_stale_prop) if shares else None, # ignores dead shares because those are miner's fault and indicated by pseudoshare rejection
+            efficiency=(1 - (stale_orphan_shares+stale_doa_shares)/shares)/(1 - global_stale_prop) if shares else None,
+            peers=dict(
+                incoming=sum(1 for peer in p2p_node.peers.itervalues() if peer.incoming),
+                outgoing=sum(1 for peer in p2p_node.peers.itervalues() if not peer.incoming),
+            ),
+            shares=dict(
+                total=shares,
+                orphan=stale_orphan_shares,
+                dead=stale_doa_shares,
+            ),
+            uptime=time.time() - start_time,
+            block_value=current_work2.value['subsidy']*1e-8,
         )
     
     class WebInterface(resource.Resource):
index def6e24..4a87612 100644 (file)
@@ -7,14 +7,36 @@
         <script type="text/javascript">
             // based on goblin's p2pool-stats project
             
-            d3.json('/rate', function(rate) {
-                d3.select('#hashrate').text(rate / 1e9);
+            function values(o){ res = []; for(var x in o) res.push(o[x]); return res; }
+            
+            d3.json('/global_stats', function(global_stats) {
+                d3.select('#pool_rate').text(d3.format('.3s')(global_stats.pool_hash_rate) + 'H/s');
+                d3.select('#pool_stale').text(d3.format('.2p')(global_stats.pool_stale_prop));
+                d3.select('#difficulty').text(d3.format('.3r')(global_stats.min_difficulty));
+            });
+            
+            d3.json('/local_stats', function(local_stats) {
+                d3.select('#peers_in').text(local_stats.peers.incoming);
+                d3.select('#peers_out').text(local_stats.peers.outgoing);
+                
+                var local = d3.sum(values(local_stats.miner_hash_rates));
+                var local_dead = d3.sum(values(local_stats.miner_dead_hash_rates));
+                d3.select('#local_rate').text(d3.format('.3s')(local) + 'H/s');
+                d3.select('#local_doa').text(d3.format('.2p')(local_dead/local));
+                
+                d3.select('#shares_total').text(local_stats.shares.total);
+                d3.select('#shares_orphan').text(local_stats.shares.orphan);
+                d3.select('#shares_dead').text(local_stats.shares.dead);
+                
+                d3.select('#efficiency').text(local_stats.efficiency != null ? d3.format('.4p')(local_stats.efficiency) : '???')
+                d3.select('#uptime_days').text(d3.format('.3f')(local_stats.uptime / 60 / 60 / 24));
+                d3.select('#block_value').text(local_stats.block_value);
             });
             
             d3.json('/current_payouts', function(pays) {
                 d3.json('/payout_addr', function(addr) {
-                    d3.select('#payout').text(addr);
-                    d3.select('#amt').text(addr in pays ? pays[addr] : 0);
+                    d3.select('#payout_addr').text(addr);
+                    d3.select('#payout_amount').text(addr in pays ? pays[addr] : 0);
                 });
                 
                 var arr = []; for(var i in pays) arr.push(i); arr.sort(function(a, b){return pays[b] - pays[a]});
     <body>
         <h1>P2Pool</h1>
         <p><a href="graphs.html">Graphs</a></p>
-        <p>Total pool GH/s: <span id="hashrate"></span></p>
-        <p>My payout address: <span id="payout"></span></p>
-        <p>Payout if a block were found NOW: <span id="amt"></span> BTC</p>
+        <p>Pool rate: <span id="pool_rate"></span> (<span id="pool_stale"></span> stale) Share difficulty: <span id="difficulty"></span></p>
+        <p>Node uptime: <span id="uptime_days"></span> days Peers: <span id="peers_out"></span> out, <span id="peers_in"></span> in</p>
+        <p>Local rate: <span id="local_rate"></span> (<span id="local_doa"></span> DOA)</p>
+        <p>Shares: <span id="shares_total"></span> total (<span id="shares_orphan"></span> orphaned, <span id="shares_dead"></span> dead) Efficiency: <span id="efficiency"></span></p>
+        <p>Payout if a block were found NOW: <span id="payout_amount"></span> BTC to <span id="payout_addr"></span></p>
+        <p>Current block value: <span id="block_value"></span> BTC</p>
         
         <h2>Share explorer</h2>
         <p>Best share: <span id="best_share"></span></p>