Minimum 5% guaranteed allocation to prevent authors of resource brokers from shooting...
[nodemanager.git] / nm.py
1 """Node Manager"""
2
3 import optparse
4 import time
5 import xmlrpclib
6
7 import conf_files
8 import logger
9 import sm
10 import tools
11
12
13 parser = optparse.OptionParser()
14 parser.add_option('-d', '--daemon', action='store_true', dest='daemon', default=False, help='run daemonized')
15 parser.add_option('-s', '--startup', action='store_true', dest='startup', default=False, help='run all sliver startup scripts')
16 (options, args) = parser.parse_args()
17
18 # XXX - awaiting a real implementation
19 data = []
20 modules = []
21
22 def GetSlivers():
23     for mod in modules: mod.GetSlivers_callback(data)
24
25 def start_and_register_callback(mod):
26     mod.start(options)
27     modules.append(mod)
28
29
30 def run():
31     try:
32         if options.daemon: tools.daemon()
33
34
35         other_pid = tools.pid_file()
36         if other_pid != None:
37             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)
38             return
39
40         start_and_register_callback(sm)
41         start_and_register_callback(conf_files)
42         while True:
43             try: GetSlivers()
44             except: logger.log_exc()
45             time.sleep(10)
46     except: logger.log_exc()
47
48
49 if __name__ == '__main__': run()
50 else:
51     # This is for debugging purposes.  Open a copy of Python and import nm
52     tools.as_daemon_thread(run)