added rate page to worker interface
authorForrest Voight <forrest@forre.st>
Tue, 19 Jul 2011 21:44:44 +0000 (17:44 -0400)
committerForrest Voight <forrest@forre.st>
Tue, 19 Jul 2011 21:44:44 +0000 (17:44 -0400)
p2pool/main.py
p2pool/util/jsonrpc.py
p2pool/worker_interface.py

index 81864b2..f86ea61 100644 (file)
@@ -345,7 +345,13 @@ def main(args):
             else:
                 return True
         
-        reactor.listenTCP(args.worker_port, server.Site(worker_interface.WorkerInterface(current_work, compute, got_response)))
+        def get_rate():
+            if current_work.value['best_share_hash'] is not None:
+                height, last = tracker.get_height_and_last(current_work.value['best_share_hash'])
+                att_s = p2pool.get_pool_attempts_per_second(tracker, current_work.value['best_share_hash'], args.net)
+                return att_s
+        
+        reactor.listenTCP(args.worker_port, server.Site(worker_interface.WorkerInterface(current_work, compute, got_response, get_rate)))
         
         print '    ...success!'
         print
index cc2dd53..f5b6e2f 100644 (file)
@@ -36,7 +36,7 @@ class Proxy(object):
         id_ = 0
         
         headers = {
-            'Content-Type': 'text/json',
+            'Content-Type': 'application/json',
         }
         if self._auth is not None:
             headers['Authorization'] = 'Basic ' + base64.b64encode(':'.join(self._auth))
@@ -78,6 +78,7 @@ class Server(deferred_resource.DeferredResource):
     @defer.inlineCallbacks
     def render_POST(self, request):
         # missing batching, 1.0 notifications
+        request.setHeader('Content-Type', 'application/json')
         data = request.content.read()
         
         if self.extra_headers is not None:
index c77f07b..4e5b1cb 100644 (file)
@@ -17,6 +17,7 @@ class LongPollingWorkerInterface(deferred_resource.DeferredResource):
         
         res = self.compute((yield self.work.changed.get_deferred()), 'x-all-targets' in map(str.lower, request.received_headers))
         
+        request.setHeader('Content-Type', 'application/json')
         request.write(json.dumps({
             'jsonrpc': '2.0',
             'id': 0,
@@ -25,20 +26,31 @@ class LongPollingWorkerInterface(deferred_resource.DeferredResource):
         }))
     render_POST = render_GET
 
+class RateInterface(deferred_resource.DeferredResource):
+    def __init__(self, get_rate):
+        self.get_rate = get_rate
+    
+    def render_GET(self, request):
+        request.setHeader('Content-Type', 'application/json')
+        request.write(json.dumps(self.get_rate()))
+
 class WorkerInterface(jsonrpc.Server):
     extra_headers = {
         'X-Long-Polling': '/long-polling',
     }
     
-    def __init__(self, work, compute, response_callback):
+    def __init__(self, work, compute, response_callback, get_rate):
         jsonrpc.Server.__init__(self)
         
         self.work = work
         self.compute = compute
         self.response_callback = response_callback
+        self.get_rate = get_rate
         
         self.putChild('long-polling',
             LongPollingWorkerInterface(self.work, self.compute))
+        self.putChild('rate',
+            RateInterface(get_rate))
         self.putChild('', self)
     
     def rpc_getwork(self, headers, data=None):