Package haizea :: Package core :: Module rpcserver
[hide private]
[frames] | no frames]

Source Code for Module haizea.core.rpcserver

 1  # -------------------------------------------------------------------------- # 
 2  # Copyright 2006-2009, University of Chicago                                 # 
 3  # Copyright 2008-2009, Distributed Systems Architecture Group, Universidad   # 
 4  # Complutense de Madrid (dsa-research.org)                                   # 
 5  #                                                                            # 
 6  # Licensed under the Apache License, Version 2.0 (the "License"); you may    # 
 7  # not use this file except in compliance with the License. You may obtain    # 
 8  # a copy of the License at                                                   # 
 9  #                                                                            # 
10  # http://www.apache.org/licenses/LICENSE-2.0                                 # 
11  #                                                                            # 
12  # Unless required by applicable law or agreed to in writing, software        # 
13  # distributed under the License is distributed on an "AS IS" BASIS,          # 
14  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   # 
15  # See the License for the specific language governing permissions and        # 
16  # limitations under the License.                                             # 
17  # -------------------------------------------------------------------------- # 
18   
19  import threading 
20  import logging  
21  from SimpleXMLRPCServer import SimpleXMLRPCServer 
22   
23  DEFAULT_HAIZEA_PORT = 42493 
24   
25 -class StoppableSimpleXMLRPCServer(SimpleXMLRPCServer):
26 allow_reuse_address = True 27
28 - def serve_forever(self):
29 self.run = True 30 self.socket.settimeout(1) 31 while self.run: 32 self.handle_request()
33
34 - def stop(self):
35 self.run = False 36 self.socket.close()
37
38 -class RPCServer(object):
39 - def __init__(self, manager):
40 self.manager = manager 41 self.logger = logging.getLogger("RPCSERVER") 42 self.port = DEFAULT_HAIZEA_PORT 43 self.server = StoppableSimpleXMLRPCServer(("localhost", self.port), allow_none=True) 44 self.server_thread = None 45 self.register_rpc(self.test_func) 46 self.register_rpc(self.cancel_lease) 47 self.register_rpc(self.get_leases) 48 self.register_rpc(self.get_lease) 49 self.register_rpc(self.get_queue) 50 self.register_rpc(self.get_hosts) 51 self.register_rpc(self.notify_event)
52
53 - def start(self):
54 # Start the XML-RPC server 55 self.server_thread = threading.Thread( target = self.serve ) 56 self.server_thread.start()
57
58 - def stop(self):
59 self.server.stop() 60 self.server_thread.join()
61
62 - def register_rpc(self, func):
63 self.server.register_function(func)
64
65 - def serve(self):
66 self.logger.info("RPC server started on port %i" % self.port) 67 self.server.serve_forever()
68
69 - def test_func(self):
70 self.logger.info("Test RPC function called") 71 return 0
72
73 - def cancel_lease(self, lease_id):
74 self.manager.cancel_lease(lease_id) 75 return 0
76
77 - def get_leases(self):
78 return [l.to_xml_string() for l in self.manager.scheduler.leases.get_leases()]
79
80 - def get_lease(self, lease_id):
81 return 0
82
83 - def get_queue(self):
84 return [l.to_xml_string() for l in self.manager.scheduler.queue]
85
86 - def get_hosts(self):
87 return [h.xmlrpc_marshall() for h in self.manager.scheduler.vm_scheduler.resourcepool.nodes.values()]
88
89 - def notify_event(self, lease_id, enactment_id, event):
90 pass
91