Add timestamp offset for block header
[p2pool.git] / web-static / index.html
index a0b3be1..eb16a8f 100644 (file)
@@ -9,9 +9,28 @@
         <script type="text/javascript">
             // based on goblin's p2pool-stats project
             
+            function format_dt(dt) {
+                var pairs = [
+                    [365.2425*60*60*24, 'years'],
+                    [60*60*24, 'days'],
+                    [60*60, 'hours'],
+                    [60, 'minutes'],
+                    [1, 'seconds'],
+                ];
+                
+                for(var i in pairs) {
+                       var value = pairs[i][0];
+                       var name = pairs[i][1];
+                       
+                       if(dt > value) break;
+               }
+               
+               return d3.format('.1f')(dt/value) + ' ' + name;
+            }
+            
             function values(o){ res = []; for(var x in o) res.push(o[x]); return res; }
             
-            d3.json('/local_stats', function(local_stats) {
+            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);
                 
@@ -25,7 +44,7 @@
                 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('#uptime').text(format_dt(local_stats.uptime));
                 d3.select('#block_value').text(local_stats.block_value);
                 
                 d3.select('#warnings').selectAll().data(local_stats.warnings).enter().append('p')
                     .attr('style', 'color:red;border:1px solid red;padding:5px');
                 
                 var time_to_share = local_stats.attempts_to_share/local;
-                d3.select('#time_to_share').text(d3.format('.3r')(time_to_share/3600) + " hours");
+                d3.select('#time_to_share').text(format_dt(time_to_share));
                 
-                d3.json('/global_stats', function(global_stats) {
+                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));
                     
                     var time_to_block = local_stats.attempts_to_block/global_stats.pool_hash_rate;
-                    d3.select('#time_to_block').text(d3.format('.3r')(time_to_block/3600) + " hours");
+                    d3.select('#time_to_block').text(format_dt(time_to_block));
                     
                     d3.select('#expected_payout_amount').text(d3.format('.3r')(local/global_stats.pool_hash_rate*local_stats.block_value*(1-local_stats.donation_proportion)));
                 });
             });
             
-            d3.json('/web/version', function(version) {
+            d3.json('../web/version', function(version) {
                 d3.selectAll('#version').text(version);
             });
             
-            d3.json('/web/currency_info', function(currency_info) {
+            d3.json('../web/currency_info', function(currency_info) {
                 d3.selectAll('.symbol').text(currency_info.symbol);
                 
-                d3.json('/current_payouts', function(pays) {
-                    d3.json('/payout_addr', function(addr) {
+                d3.json('../current_payouts', function(pays) {
+                    d3.json('../payout_addr', function(addr) {
                         d3.select('#payout_addr').text(addr).attr('href', currency_info.address_explorer_url_prefix + addr);
                         d3.select('#payout_amount').text(addr in pays ? pays[addr] : 0);
                     });
@@ -71,7 +90,7 @@
                     total_tr.append('td').text(d3.sum(arr, function(addr){return pays[addr]}).toFixed(8));
                 });
                 
-                d3.json('/recent_blocks', function(blocks) {
+                d3.json('../recent_blocks', function(blocks) {
                     var tr = d3.select('#blocks').selectAll().data(blocks).enter().append('tr');
                     tr.append('td').text(function(block){return new Date(1000*block.ts).toString()});
                     tr.append('td').text(function(block){return block.number});
@@ -80,7 +99,7 @@
                 });
             });
             
-            d3.json('/web/best_share_hash', function(c) {
+            d3.json('../web/best_share_hash', function(c) {
                 d3.select('#best_share').append('a').attr('href', 'share.html#' + c).text(c.substr(-8));
             });
             
                     d3.select(id).selectAll().data(d).enter().append('span').text(' ').append('a').attr('href', function(c){return 'share.html#' + c}).text(function(c){return c.substr(-8)});
                 });
             }
-            fill('/web/verified_heads', '#verified_heads');
-            fill('/web/heads', '#heads');
-            fill('/web/verified_tails', '#verified_tails');
-            fill('/web/tails', '#tails');
+            fill('../web/verified_heads', '#verified_heads');
+            fill('../web/heads', '#heads');
+            fill('../web/verified_tails', '#verified_tails');
+            fill('../web/tails', '#tails');
+            fill('../web/my_share_hashes', '#my_share_hashes');
         </script>
     </head>
     <body>
         <p><a href="graphs.html">Graphs</a></p>
         <p>Version: <span id="version"></span></p>
         <p>Pool rate: <span id="pool_rate"></span> (<span id="pool_stale"></span> DOA+orphan) 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>Node uptime: <span id="uptime"></span> 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) Expected time to share: <span id="time_to_share"></span></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> <span class="symbol"></span> to <a id="payout_addr"></a>. Expected after mining for 24 hours:  <span id="expected_payout_amount"></span> <span class="symbol"></span> per block.</p>
         <p>Heads: <span id="heads"></span></p>
         <p>Verified tails: <span id="verified_tails"></span></p>
         <p>Tails: <span id="tails"></span></p>
+        <p>My shares: <span id="my_share_hashes"></span></p>
         
         <h2>Blocks found in last day:</h2>
         <p>Note that blocks may have been orphaned from the P2Pool chain and so not be here.</p>