add timeout for http sessions
authorThomasV <thomasv@gitorious>
Tue, 5 Jun 2012 16:52:13 +0000 (20:52 +0400)
committerThomasV <thomasv@gitorious>
Tue, 5 Jun 2012 16:52:13 +0000 (20:52 +0400)
backends/irc/__init__.py
processor.py
server.py
transports/stratum_http.py
transports/stratum_tcp.py

index 036d68d..9a53402 100644 (file)
@@ -118,7 +118,11 @@ class ServerProcessor(Processor):
             result = 'ok'
 
         elif method == 'server.info':
-            result = map(lambda s: { "address":s.address, "version":s.version, "subscriptions":len(s.subscriptions)}, self.dispatcher.request_dispatcher.sessions)
+            result = map(lambda s: { "time":s.time, 
+                                     "address":s.address, 
+                                     "version":s.version, 
+                                     "subscriptions":len(s.subscriptions)}, 
+                         self.dispatcher.request_dispatcher.sessions)
 
         else:
             print "unknown method", request
index 5ba83ad..20fdbfd 100644 (file)
@@ -170,6 +170,7 @@ class Session:
         self.address = ''
         self.name = ''
         self.version = 'unknown'
+        self.time = time.time()
         threading.Timer(2, self.info).start()
 
     # Debugging method. Doesn't need to be threadsafe.
index 914a6bb..5846fba 100755 (executable)
--- a/server.py
+++ b/server.py
@@ -72,8 +72,9 @@ def run_rpc_command(command, stratum_tcp_port):
     r = json.loads(msg).get('result')
     if command == 'stop': print r
     elif command == 'info': 
+        now = time.time()
         for item in r:
-            print '%15s   %3s  %7s'%( item.get('address'), item.get('subscriptions'), item.get('version') )
+            print '%15s   %3s  %7s  %.2f'%( item.get('address'), item.get('subscriptions'), item.get('version'), (now - item.get('time')) )
 
 if __name__ == '__main__':
     config = create_config()
index ef738e3..8118478 100644 (file)
@@ -22,7 +22,7 @@ import SimpleXMLRPCServer
 import SocketServer
 import socket
 import logging
-import os
+import os, time
 import types
 import traceback
 import sys, threading
@@ -100,6 +100,7 @@ class StratumJSONRPCDispatcher(SimpleXMLRPCServer.SimpleXMLRPCDispatcher):
         session = self.dispatcher.get_session_by_address(session_id)
         if not session:
             return 'Error: session not found'
+        session.time = time.time()
 
         responses = []
         if type(request) is not types.ListType:
@@ -290,6 +291,12 @@ class HttpSession(Session):
         raw_response = json.dumps(response)
         self.pending_responses.put(response)
 
+    def stopped(self):
+        with self.lock:
+            if time.time() - self.time > 60:
+                self._stopped = True
+            return self._stopped
+
 class HttpServer(threading.Thread):
     def __init__(self, dispatcher, host, port):
         self.shared = dispatcher.shared
index 8f0c936..b7176b9 100644 (file)
@@ -55,6 +55,8 @@ class TcpClientRequestor(threading.Thread):
             if not self.update():
                 break
 
+            self.session.time = time.time()
+
             while self.parse():
                 pass