class HsMonitor(object): def __init__(self): # setup the log mode file = 'log-testfornagiospushfromhisparc' handler = logging.handlers.TimedRotatingFileHandler( file, when='midnight', backupCount=14) handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(level=logging.DEBUG) # read the configuration file try: self.cfg = EConfigParser() self.cfg.read([CONFIG_INI_PATH1, CONFIG_INI_PATH2]) except: logger.error("Cannot open the config file!", severity=2) return else: logger.debug("Initilize variables") # list of all the threads self.hsThreads = [] # Assume one server (eventwarehouse) # if the local is also specified it will be added self.numServers = 1 def createBufferListener(self, interpreter): # get the information from configuration file bufferdb = {} bufferdb['host'] = self.cfg.get('BufferDB', 'Host') bufferdb['db'] = self.cfg.get('BufferDB', 'DB') bufferdb['user'] = self.cfg.get('BufferDB', 'Username') bufferdb['password'] = self.cfg.get('BufferDB', 'Password') bufferdb['poll_interval'] = self.cfg.get('BufferDB', 'Poll_Interval') bufferdb['poll_limit'] = self.cfg.get('BufferDB', 'Poll_Limit') bufferdb['keep_buffer_data'] = self.cfg.get('BufferDB', 'KeepBufferData') # create an instance of BufferListener class buffLis = BufferListener.BufferListener(bufferdb, interpreter) if not buffLis: logger.error("Cannot connect to the buffer database!") return None # TODO better error handling return buffLis def createCheckScheduler(self, interpreter): # get the nagios configuration section from config file nagiosConf = self.cfg.itemsdict('NagiosPush') machine = re.search('([a-z0-9]+).zip', self.cfg.get('Station', 'Certificate')) if machine is None: nagiosConf['machine_name'] = 'test32bit' else: nagiosConf['machine_name'] = machine.group(1) checkSched = CheckScheduler(nagiosConf, interpreter) return checkSched def createUploader(self, serverID, section_name, numServers): # TODO create default values if parameter doesn't exist stationID = self.cfg.get("Station", "StationID") url = self.cfg.get(section_name, "URL") passw = self.cfg.get(section_name, "Password") minbs = self.cfg.ifgetint(section_name, "MinBatchSize", 50) maxbs = self.cfg.ifgetint(section_name, "MaxBatchSize", 50) if (minbs > maxbs): raise Exception("Minimum batch size must be less than maximum") minwait = self.cfg.ifgetfloat(section_name, "MinWait", 1.0) maxwait = self.cfg.ifgetfloat(section_name, "MaxWait", 60.0) up = Uploader(serverID, numServers, stationID, passw, url, minwait, maxwait, minbs, maxbs) return up
class HsMonitor: def __init__(self): # Setup the log mode setLogMode(MODE_BOTH) # Read the configuration file try: self.cfg = EConfigParser() self.cfg.read([CONFIG_INI_PATH1, CONFIG_INI_PATH2, CONFIG_INI_PATH3]) except: log("HsMonitor: Cannot open the config file!", severity=2) return else: log("HsMonitor: Initialize variables.") # List of all the threads self.hsThreads = [] # Assume one server (datastore) # if the local is also specified it will be added self.numServers = 1 def startAll(self): """Setup and start all threads.""" try: # Create StorageManager and Interpreter for BufferListener storMan = StorageManager() interpr = Interpreter(storMan) # Create BufferListener buffLis = self.createBufferListener(interpr) if buffLis.conn: self.hsThreads.append(buffLis) # Check scheduler # Get the nagios configuration section from config file nagiosConf = self.cfg.itemsdict('NagiosPush') machine = re.search('([a-z0-9]+).zip', self.cfg.get('Station', 'Certificate')) nagiosConf['machine_name'] = machine.group(1) checkSched = self.createCheckScheduler(interpr, nagiosConf) eventRate = checkSched.getEventRate() storMan.addObserver(eventRate) self.hsThreads.append(checkSched) # Uploader central up = self.createUploader(0, "Upload-datastore", nagiosConf) self.hsThreads.append(up) storMan.addObserver(up) up.setNumServer(self.numServers) # Try local server try: up2 = self.createUploader(1, "Upload-local", nagiosConf) self.hsThreads.append(up2) storMan.addObserver(up2) self.numServers += 1 up.setNumServer(self.numServers) up2.setNumServer(self.numServers) except Exception, msg: log("HsMonitor: Error while parsing local server: %s." % msg) log("HsMonitor: Will not upload to local server!") # Set number of servers for our own StorageManager storMan.setNumServer(self.numServers) storMan.clearOldUploadedEvents() # Start all threads, running their run() function. for thread in self.hsThreads: thread.start() except Exception, msg: log("Error HsMonitor: %s" % msg, severity=2) exit(1)
class HsMonitor(object): """The HiSPARC Monitor This process spawns several threads to perform tasks. - BufferListener: read messages from the MySQL database. - CheckScheduler: report status to Nagios. - Uploader: upload message to a datastore server. """ def __init__(self): self.config = EConfigParser() self.config.read([CONFIG_INI, PERSISTENT_INI, PASSWORD_INI]) # Setup the log mode log_dirname = '../../persistent/logs/hsmonitor/' # Making sure the directory exists if not os.access(log_dirname, os.F_OK): os.makedirs(log_dirname) log_filename = os.path.join(log_dirname, 'hsmonitor') # Remove any existing handlers logger.handlers = [] # Add file handler handler = TimedConcurrentRotatingFileHandler( log_filename, when='midnight', backupCount=14, utc=True) handler.setFormatter(formatter_file) logger.addHandler(handler) # Add handler which prints to the screen handler = logging.StreamHandler() handler.setFormatter(formatter_screen) logger.addHandler(handler) # Default logging level logger.setLevel(level=logging.DEBUG) # Logging level for the handlers for i, target in enumerate(['File', 'Screen']): log_level = self.config.ifgetstr('Logging', '%sLevel' % target, 'debug') if log_level in LEVELS: logger.handlers[i].setLevel(level=LEVELS[log_level]) logger.info('%s logging level set to %s' % (target, log_level)) else: logger.warning("Illegal %s logging level '%s' in config, " "using debug" % (target, log_level)) # List of all the threads self.hsThreads = [] # Assume one server (datastore) # if the local is also specified it will be added self.numServers = 1 def startAll(self): """Setup and start all threads.""" try: # Create StorageManager and Interpreter for BufferListener storMan = StorageManager() interpr = Interpreter(storMan) # Create BufferListener buffLis = self.createBufferListener(interpr) if buffLis.conn: self.hsThreads.append(buffLis) # Check scheduler # Get the nagios configuration section from config file nagiosConf = self.config.itemsdict('NagiosPush') machine = re.search('([a-z0-9]+).zip', self.config.get('Station', 'Certificate')) nagiosConf['machine_name'] = machine.group(1) checkSched = self.createCheckScheduler(interpr, nagiosConf) eventRate = checkSched.getEventRate() storMan.addObserver(eventRate) self.hsThreads.append(checkSched) # Uploader central up = self.createUploader(0, "Upload-datastore", nagiosConf) self.hsThreads.append(up) storMan.addObserver(up) up.setNumServer(self.numServers) # Try local server #try: # up2 = self.createUploader(1, "Upload-local", nagiosConf) # self.hsThreads.append(up2) # storMan.addObserver(up2) # self.numServers += 1 # up.setNumServer(self.numServers) # up2.setNumServer(self.numServers) #except Exception, msg: # logger.debug("Error while parsing local server: %s." % msg) # logger.debug("Will not upload to a local server.")# # Set number of servers for our own StorageManager storMan.setNumServer(self.numServers) storMan.clearOldUploadedEvents() # Start all threads, running their run() function. for thread in self.hsThreads: thread.start() except Exception, msg: logger.critical("Error HsMonitor: %s" % msg) sys.exit(1)