Refactoring almost complete, with a stubbed out version of GetSlivers().
[nodemanager.git] / nm.py
1 """Node Manager"""
2
3 import optparse
4 import time
5 import xmlrpclib
6
7 import accounts
8 import api
9 import database
10 import delegate
11 import logger
12 import sliver_vs
13 import tools
14
15
16 parser = optparse.OptionParser()
17 parser.add_option('-d', '--daemon', action='store_true', dest='daemon', default=False, help='run daemonized')
18 parser.add_option('-s', '--startup', action='store_true', dest='startup', default=False, help='run all sliver startup scripts')
19 (options, args) = parser.parse_args()
20
21 # XXX - awaiting a real implementation
22 data = []
23 modules = []
24
25 def GetSlivers():
26     for mod in modules: mod.GetSlivers_callback(data)
27
28 def start_and_register_callback(mod):
29     mod.start()
30     modules.append(mod)
31
32
33 def run():
34     try:
35         if options.daemon: tools.daemon()
36
37         accounts.register_class(sliver_vs.Sliver_VS)
38         accounts.register_class(delegate.Delegate)
39
40         other_pid = tools.pid_file()
41         if other_pid != None:
42             print """There might be another instance of the node manager running as pid %d.  If this is not the case, please remove the pid file %s""" % (other_pid, tools.PID_FILE)
43             return
44
45         start_and_register_callback(database)
46         api.start()
47         while True:
48             try: plc.fetch_and_update()
49             except: logger.log_exc()
50             time.sleep(10)
51     except: logger.log_exc()
52
53
54 if __name__ == '__main__': run()
55 else:
56     # This is for debugging purposes.  Open a copy of Python and import nm
57     tools.as_daemon_thread(run)