X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=nodemanager.py;h=7f5e204874eaf7ac9b8acf875b52ba23693d1ed0;hb=9e6b9c1ea9e020c55c85b433bac47231d63e9ffd;hp=68a8be40cd8d88846b7f157a86a01cf9eb9a68a4;hpb=fc75d6b111f5c65f11573bae5f381ac168857276;p=nodemanager.git diff --git a/nodemanager.py b/nodemanager.py index 68a8be4..7f5e204 100755 --- a/nodemanager.py +++ b/nodemanager.py @@ -15,16 +15,16 @@ import xmlrpclib import socket import os import sys -import resource import glob import pickle +import random +import resource import logger import tools from config import Config from plcapi import PLCAPI -import random class NodeManager: @@ -74,7 +74,10 @@ class NodeManager: # Deal with plugins directory if os.path.exists(self.options.path): sys.path.append(self.options.path) - plugins = [ os.path.split(os.path.splitext(x)[0])[1] for x in glob.glob( os.path.join(self.options.path,'*.py') ) ] + plugins = [ os.path.split(os.path.splitext(x)[0])[1] + for x in glob.glob( os.path.join(self.options.path,'*.py') ) + if not x.endswith("/__init__.py") + ] self.modules += plugins if self.options.user_module: assert self.options.user_module in self.modules @@ -171,12 +174,16 @@ class NodeManager: return {} def run(self): + # make sure to create /etc/planetlab/virt so others can read that + # used e.g. in vsys-scripts's sliceip + tools.get_node_virt() try: if self.options.daemon: tools.daemon() # set log level if (self.options.verbose): logger.set_level(logger.LOG_VERBOSE) + tools.init_signals() # Load /etc/planetlab/plc_config config = Config(self.options.config) @@ -196,10 +203,15 @@ If this is not the case, please remove the pid file %s. -- exiting""" % (other_p try: m = __import__(module) logger.verbose("nodemanager: triggering %s.start"%m.__name__) - m.start() + try: m.start() + except: logger.log("WARNING: module %s did not start") self.loaded_modules.append(m) - except ImportError, err: - print "Warning while loading module %s:" % module, err + except: + if module not in NodeManager.core_modules: + logger.log_exc ("ERROR while loading module %s - skipped" % module) + else: + logger.log("FATAL : failed to start core module %s"%module) + sys.exit(1) # sort on priority (lower first) def sort_module_priority (m1,m2): @@ -238,12 +250,18 @@ If this is not the case, please remove the pid file %s. -- exiting""" % (other_p while True: # Main nodemanager Loop + work_beg=time.time() logger.log('nodemanager: mainloop - calling GetSlivers - period=%d random=%d'%(iperiod,irandom)) self.GetSlivers(config, plc) delay=iperiod + random.randrange(0,irandom) - logger.log('nodemanager: mainloop - sleeping for %d s'%delay) + work_end=time.time() + work_duration=int(work_end-work_beg) + logger.log('nodemanager: mainloop has worked for %s s - sleeping for %d s'%(work_duration,delay)) time.sleep(delay) - except: logger.log_exc("nodemanager: failed in run") + except SystemExit: + pass + except: + logger.log_exc("nodemanager: failed in run") def run(): logger.log("======================================== Entering nodemanager.py")