getwork latency graph
authorForrest Voight <forrest@forre.st>
Thu, 25 Oct 2012 16:35:53 +0000 (12:35 -0400)
committerForrest Voight <forrest@forre.st>
Sat, 27 Oct 2012 04:11:18 +0000 (00:11 -0400)
p2pool/bitcoin/helper.py
p2pool/web.py
web-static/graphs.html

index 3d5810b..07d18a7 100644 (file)
@@ -26,11 +26,15 @@ def getwork(bitcoind, use_getblocktemplate=False):
         else:
             return bitcoind.rpc_getmemorypool()
     try:
+        start = time.time()
         work = yield go()
+        end = time.time()
     except jsonrpc.Error_for_code(-32601): # Method not found
         use_getblocktemplate = not use_getblocktemplate
         try:
+            start = time.time()
             work = yield go()
+            end = time.time()
         except jsonrpc.Error_for_code(-32601): # Method not found
             print >>sys.stderr, 'Error: Bitcoin version too old! Upgrade to v0.5 or newer!'
             raise deferral.RetrySilentlyException()
@@ -51,6 +55,7 @@ def getwork(bitcoind, use_getblocktemplate=False):
         height=work['height'],
         last_update=time.time(),
         use_getblocktemplate=use_getblocktemplate,
+        latency=end - start,
     ))
 
 @deferral.retry('Error submitting primary block: (will retry)', 10, 10)
index 3e97a5d..8251149 100644 (file)
@@ -386,6 +386,7 @@ def get_web_root(wb, datadir_path, bitcoind_warning_var):
         'desired_version_rates': graph.DataStreamDescription(dataview_descriptions, multivalues=True,
             multivalue_undefined_means_0=True, default_func=build_desired_rates),
         'traffic_rate': graph.DataStreamDescription(dataview_descriptions, is_gauge=False, multivalues=True),
+        'getwork_latency': graph.DataStreamDescription(dataview_descriptions),
     }, hd_obj)
     task.LoopingCall(lambda: _atomic_write(hd_path, json.dumps(hd.to_obj()))).start(100)
     @wb.pseudoshare_received.watch
@@ -431,6 +432,9 @@ def get_web_root(wb, datadir_path, bitcoind_warning_var):
         hd.datastreams['desired_versions'].add_datum(t, dict((str(k), v/vs_total) for k, v in vs.iteritems()))
         hd.datastreams['desired_version_rates'].add_datum(t, dict((str(k), v/vs_total*pool_total) for k, v in vs.iteritems()))
     task.LoopingCall(add_point).start(5)
+    @node.bitcoind_work.changed.watch
+    def _(new_work):
+        hd.datastreams['getwork_latency'].add_datum(time.time(), new_work['latency'])
     new_root.putChild('graph_data', WebInterface(lambda source, view: hd.datastreams[source].dataviews[view].get_data(time.time())))
     
     web_root.putChild('static', static.File(os.path.join(os.path.dirname(sys.argv[0]), 'web-static')))
index f7d38f3..bc44a68 100644 (file)
@@ -56,6 +56,9 @@
         <h2>Traffic rate</h2>
         <svg id="traffic_rate"></svg>
         
+        <h2>Getwork Latency</h2>
+        <svg id="getwork_latency"></svg>
+        
         <script type="text/javascript">
             function compose() {
                 var funcs = arguments;
                 d3.json("/web/graph_data/traffic_rate/last_" + lowerperiod, function(data) {
                     plot(d3.select('#traffic_rate'), 'B/s', 'B', data_to_lines(data, function(line){ return parseInt(line.label) }), true);
                 });
+                
+                plot_later(d3.select("#getwork_latency"), "s", null, [
+                    {"url": "/web/graph_data/getwork_latency/last_" + lowerperiod, "color": "#FF0000", "label": "Getwork Latency"}
+                ], false);
             }
             
             d3.json('/local_stats', function(local_stats) {