def create_connection(self): try: self.uri = pyro.create_uri(self.address, self.port, "ForArbiter", self.__class__.use_ssl) self.con = pyro.getProxy(self.uri) pyro.set_timeout(self.con, self.timeout) except Pyro_exp_pack , exp: self.con = None logger.log('Error : in creation connexion for %s : %s' % (self.get_name(), str(exp)))
def create_connection(self): try: self.uri = pyro.create_uri(self.address, self.port, "ForArbiter", self.__class__.use_ssl) # By default Pyro got problem in connect() function that can take # long seconds to raise a timeout. And even with the _setTimeout() # call. So we change the whole default connect() timeout socket.setdefaulttimeout(self.timeout) self.con = pyro.getProxy(self.uri) # But the multiprocessing module is not copatible with it! # so we must disable it imadiatly after socket.setdefaulttimeout(None) pyro.set_timeout(self.con, self.timeout) except Pyro_exp_pack , exp: # But the multiprocessing module is not copatible with it! # so we must disable it imadiatly after socket.setdefaulttimeout(None) self.con = None logger.log('Error : in creation connection for %s : %s' % (self.get_name(), str(exp)))
def create_connection(self): try: self.uri = pyro.create_uri(self.arb_satmap['address'], self.arb_satmap['port'], "ForArbiter", self.__class__.use_ssl) # By default Pyro got problem in connect() function that can take # long seconds to raise a timeout. And even with the _setTimeout() # call. So we change the whole default connect() timeout socket.setdefaulttimeout(self.timeout) self.con = pyro.getProxy(self.uri) # But the multiprocessing module is not copatible with it! # so we must disable it imadiatly after socket.setdefaulttimeout(None) pyro.set_timeout(self.con, self.timeout) except Pyro_exp_pack, exp: # But the multiprocessing module is not compatible with it! # so we must disable it imadiatly after socket.setdefaulttimeout(None) self.con = None logger.error("Creating connection for %s: %s" % (self.get_name(), str(exp)))
def setup_new_conf(self): conf = self.new_conf self.new_conf = None self.cur_conf = conf # Got our name from the globals g_conf = conf['global'] if 'broker_name' in g_conf: name = g_conf['broker_name'] else: name = 'Unnamed broker' self.name = name logger.load_obj(self, name) logger.debug("[%s] Sending us configuration %s" % (self.name, conf)) # If we've got something in the schedulers, we do not # want it anymore # self.schedulers.clear() for sched_id in conf['schedulers']: # Must look if we already have it to do not overdie our broks already_got = False # We can already got this conf id, but with another address if sched_id in self.schedulers: new_addr = conf['schedulers'][sched_id]['address'] old_addr = self.schedulers[sched_id]['address'] new_port = conf['schedulers'][sched_id]['port'] old_port = self.schedulers[sched_id]['port'] # Should got all the same to be ok :) if new_addr == old_addr and new_port == old_port: already_got = True if already_got: broks = self.schedulers[sched_id]['broks'] running_id = self.schedulers[sched_id]['running_id'] else: broks = {} running_id = 0 s = conf['schedulers'][sched_id] self.schedulers[sched_id] = s # replacing scheduler address and port by those defined in satellitemap if s['name'] in g_conf['satellitemap']: s = dict(s) # make a copy s.update(g_conf['satellitemap'][s['name']]) uri = pyro.create_uri(s['address'], s['port'], 'Broks', self.use_ssl) self.schedulers[sched_id]['uri'] = uri self.schedulers[sched_id]['broks'] = broks self.schedulers[sched_id]['instance_id'] = s['instance_id'] self.schedulers[sched_id]['running_id'] = running_id self.schedulers[sched_id]['active'] = s['active'] self.schedulers[sched_id]['last_connection'] = 0 logger.info("We have our schedulers: %s " % self.schedulers) # Now get arbiter for arb_id in conf['arbiters']: # Must look if we already have it already_got = arb_id in self.arbiters if already_got: broks = self.arbiters[arb_id]['broks'] else: broks = {} a = conf['arbiters'][arb_id] self.arbiters[arb_id] = a # replacing arbiter address and port by those defined in satellitemap if a['name'] in g_conf['satellitemap']: a = dict(a) # make a copy a.update(g_conf['satellitemap'][a['name']]) uri = pyro.create_uri(a['address'], a['port'], 'Broks', self.use_ssl) self.arbiters[arb_id]['uri'] = uri self.arbiters[arb_id]['broks'] = broks self.arbiters[arb_id]['instance_id'] = 0 # No use so all to 0 self.arbiters[arb_id]['running_id'] = 0 self.arbiters[arb_id]['last_connection'] = 0 # We do not connect to the arbiter. Connection hangs logger.info("We have our arbiters: %s " % self.arbiters) # Now for pollers for pol_id in conf['pollers']: # Must look if we already have it already_got = pol_id in self.pollers if already_got: broks = self.pollers[pol_id]['broks'] running_id = self.schedulers[sched_id]['running_id'] else: broks = {} running_id = 0 p = conf['pollers'][pol_id] self.pollers[pol_id] = p # replacing poller address and port by those defined in satellitemap if p['name'] in g_conf['satellitemap']: p = dict(p) # make a copy p.update(g_conf['satellitemap'][p['name']]) uri = pyro.create_uri(p['address'], p['port'], 'Broks', self.use_ssl) self.pollers[pol_id]['uri'] = uri self.pollers[pol_id]['broks'] = broks self.pollers[pol_id]['instance_id'] = 0 # No use so all to 0 self.pollers[pol_id]['running_id'] = running_id self.pollers[pol_id]['last_connection'] = 0 # #And we connect to it # self.app.pynag_con_init(pol_id, 'poller') logger.info("We have our pollers: %s" % self.pollers) # Now reactionners for rea_id in conf['reactionners']: # Must look if we already have it already_got = rea_id in self.reactionners if already_got: broks = self.reactionners[rea_id]['broks'] running_id = self.schedulers[sched_id]['running_id'] else: broks = {} running_id = 0 r = conf['reactionners'][rea_id] self.reactionners[rea_id] = r # replacing reactionner address and port by those defined in satellitemap if r['name'] in g_conf['satellitemap']: r = dict(r) # make a copy r.update(g_conf['satellitemap'][r['name']]) uri = pyro.create_uri(r['address'], r['port'], 'Broks', self.use_ssl) self.reactionners[rea_id]['uri'] = uri self.reactionners[rea_id]['broks'] = broks self.reactionners[rea_id]['instance_id'] = 0 # No use so all to 0 self.reactionners[rea_id]['running_id'] = running_id self.reactionners[rea_id]['last_connection'] = 0 # #And we connect to it # self.app.pynag_con_init(rea_id, 'reactionner') logger.info("We have our reactionners: %s" % self.reactionners) if not self.have_modules: self.modules = mods = conf['global']['modules'] self.have_modules = True logger.info("We received modules %s " % mods) # Ok now start, or restart them! # Set modules, init them and start external ones self.modules_manager.set_modules(self.modules) self.do_load_modules() self.modules_manager.start_external_instances() # Set our giving timezone from arbiter use_timezone = conf['global']['use_timezone'] if use_timezone != 'NOTSET': logger.info("Setting our timezone to %s" % use_timezone) os.environ['TZ'] = use_timezone time.tzset() # Connection init with Schedulers for sched_id in self.schedulers: self.pynag_con_init(sched_id, type='scheduler') for pol_id in self.pollers: self.pynag_con_init(pol_id, type='poller') for rea_id in self.reactionners: self.pynag_con_init(rea_id, type='reactionner')
def setup_new_conf(self): conf = self.new_conf self.new_conf = None self.cur_conf = conf # Got our name from the globals if 'broker_name' in conf['global']: name = conf['global']['broker_name'] else: name = 'Unnamed broker' self.name = name self.log.load_obj(self, name) print "[%s] Sending us configuration %s" % (self.name, conf) # If we've got something in the schedulers, we do not # want it anymore # self.schedulers.clear() for sched_id in conf['schedulers']: # Must look if we already have it to do not overdie our broks already_got = False # We can already got this conf id, but with another address if sched_id in self.schedulers: new_addr = conf['schedulers'][sched_id]['address'] old_addr = self.schedulers[sched_id]['address'] new_port = conf['schedulers'][sched_id]['port'] old_port = self.schedulers[sched_id]['port'] # Should got all the same to be ok :) if new_addr == old_addr and new_port == old_port: already_got = True if already_got: broks = self.schedulers[sched_id]['broks'] running_id = self.schedulers[sched_id]['running_id'] else: broks = {} running_id = 0 s = conf['schedulers'][sched_id] self.schedulers[sched_id] = s uri = pyro.create_uri(s['address'], s['port'], 'Broks', self.use_ssl) self.schedulers[sched_id]['uri'] = uri self.schedulers[sched_id]['broks'] = broks self.schedulers[sched_id]['instance_id'] = s['instance_id'] self.schedulers[sched_id]['running_id'] = running_id self.schedulers[sched_id]['active'] = s['active'] self.schedulers[sched_id]['last_connection'] = 0 logger.log("[%s] We have our schedulers : %s " % (self.name, self.schedulers)) # Now get arbiter for arb_id in conf['arbiters']: # Must look if we already have it already_got = arb_id in self.arbiters if already_got: broks = self.arbiters[arb_id]['broks'] else: broks = {} a = conf['arbiters'][arb_id] self.arbiters[arb_id] = a uri = pyro.create_uri(a['address'], a['port'], 'Broks', self.use_ssl) self.arbiters[arb_id]['uri'] = uri self.arbiters[arb_id]['broks'] = broks self.arbiters[arb_id]['instance_id'] = 0 # No use so all to 0 self.arbiters[arb_id]['running_id'] = 0 self.arbiters[arb_id]['last_connection'] = 0 # We do not connect to the arbiter. Connection hangs logger.log("[%s] We have our arbiters : %s " % (self.name, self.arbiters)) # Now for pollers for pol_id in conf['pollers']: # Must look if we already have it already_got = pol_id in self.pollers if already_got: broks = self.pollers[pol_id]['broks'] running_id = self.schedulers[sched_id]['running_id'] else: broks = {} running_id = 0 p = conf['pollers'][pol_id] self.pollers[pol_id] = p uri = pyro.create_uri(p['address'], p['port'], 'Broks', self.use_ssl) self.pollers[pol_id]['uri'] = uri self.pollers[pol_id]['broks'] = broks self.pollers[pol_id]['instance_id'] = 0 # No use so all to 0 self.pollers[pol_id]['running_id'] = running_id self.pollers[pol_id]['last_connection'] = 0 # #And we connect to it # self.app.pynag_con_init(pol_id, 'poller') logger.log("[%s] We have our pollers : %s" % (self.name, self.pollers)) # Now reactionners for rea_id in conf['reactionners'] : # Must look if we already have it already_got = rea_id in self.reactionners if already_got: broks = self.reactionners[rea_id]['broks'] running_id = self.schedulers[sched_id]['running_id'] else: broks = {} running_id = 0 r = conf['reactionners'][rea_id] self.reactionners[rea_id] = r uri = pyro.create_uri(r['address'], r['port'], 'Broks', self.use_ssl) self.reactionners[rea_id]['uri'] = uri self.reactionners[rea_id]['broks'] = broks self.reactionners[rea_id]['instance_id'] = 0 # No use so all to 0 self.reactionners[rea_id]['running_id'] = running_id self.reactionners[rea_id]['last_connection'] = 0 # #And we connect to it # self.app.pynag_con_init(rea_id, 'reactionner') logger.log("[%s] We have our reactionners : %s" % (self.name, self.reactionners)) if not self.have_modules: self.modules = mods = conf['global']['modules'] self.have_modules = True logger.log("[%s] We received modules %s " % (self.name, mods)) # Set our giving timezone from arbiter use_timezone = conf['global']['use_timezone'] if use_timezone != 'NOTSET': logger.log("[%s] Setting our timezone to %s" % (self.name, use_timezone)) os.environ['TZ'] = use_timezone time.tzset() # Connection init with Schedulers for sched_id in self.schedulers: self.pynag_con_init(sched_id, type='scheduler') for pol_id in self.pollers: self.pynag_con_init(pol_id, type='poller') for rea_id in self.reactionners: self.pynag_con_init(rea_id, type='reactionner')
def setup_new_conf(self): conf = self.new_conf self.new_conf = None self.cur_conf = conf # Got our name from the globals if 'receiver_name' in conf['global']: name = conf['global']['receiver_name'] else: name = 'Unnamed receiver' self.name = name logger.load_obj(self, name) self.direct_routing = conf['global']['direct_routing'] g_conf = conf['global'] # If we've got something in the schedulers, we do not want it anymore for sched_id in conf['schedulers']: already_got = False # We can already got this conf id, but with another address if sched_id in self.schedulers: new_addr = conf['schedulers'][sched_id]['address'] old_addr = self.schedulers[sched_id]['address'] new_port = conf['schedulers'][sched_id]['port'] old_port = self.schedulers[sched_id]['port'] # Should got all the same to be ok :) if new_addr == old_addr and new_port == old_port: already_got = True if already_got: logger.info("[%s] We already got the conf %d (%s)" % (self.name, sched_id, conf['schedulers'][sched_id]['name'])) wait_homerun = self.schedulers[sched_id]['wait_homerun'] actions = self.schedulers[sched_id]['actions'] external_commands = self.schedulers[sched_id][ 'external_commands'] con = self.schedulers[sched_id]['con'] s = conf['schedulers'][sched_id] self.schedulers[sched_id] = s if s['name'] in g_conf['satellitemap']: s.update(g_conf['satellitemap'][s['name']]) uri = pyro.create_uri(s['address'], s['port'], 'ForArbiter', self.use_ssl) self.schedulers[sched_id]['uri'] = uri if already_got: self.schedulers[sched_id]['wait_homerun'] = wait_homerun self.schedulers[sched_id]['actions'] = actions self.schedulers[sched_id][ 'external_commands'] = external_commands self.schedulers[sched_id]['con'] = con else: self.schedulers[sched_id]['wait_homerun'] = {} self.schedulers[sched_id]['actions'] = {} self.schedulers[sched_id]['external_commands'] = [] self.schedulers[sched_id]['con'] = None self.schedulers[sched_id]['running_id'] = 0 self.schedulers[sched_id]['active'] = s['active'] # Do not connect if we are a passive satellite if self.direct_routing and not already_got: # And then we connect to it :) self.pynag_con_init(sched_id) logger.debug("[%s] Sending us configuration %s" % (self.name, conf)) if not self.have_modules: self.modules = mods = conf['global']['modules'] self.have_modules = True logger.info("We received modules %s " % mods) # Set our giving timezone from arbiter use_timezone = conf['global']['use_timezone'] if use_timezone != 'NOTSET': logger.info("Setting our timezone to %s" % use_timezone) os.environ['TZ'] = use_timezone time.tzset() # Now create the external commander. It's just here to dispatch # the commands to schedulers e = ExternalCommandManager(None, 'receiver') e.load_receiver(self) self.external_command = e
options, args = parser.parse_args() # TODO: for now, helpme doesn't work as desired options.helpme = False # Check for required option target if not getattr(options, 'target'): print ('CRITICAL - target is not specified; ' 'You must specify which daemons you want to check!') parser.print_help() raise SystemExit(CRITICAL) elif options.target not in daemon_types: print 'CRITICAL - target', options.target, 'is not a Shinken daemon!' parser.print_help() raise SystemExit(CRITICAL) uri = pyro.create_uri(options.hostname, options.portnum, PYRO_OBJECT, options.ssl) # Set the default socket connection to the timeout, by default it's 10s socket.setdefaulttimeout(float(options.timeout)) con = None try: con = Pyro.core.getProxyForURI(uri) pyro.set_timeout(con, options.timeout) except Exception, exp: print "CRITICAL : the Arbiter is not reachable : (%s)." % exp raise SystemExit(CRITICAL) if options.daemon:
def create_connection(self): self.uri = pyro.create_uri(self.address, self.port, "ForArbiter", self.__class__.use_ssl) self.con = pyro.getProxy(self.uri) pyro.set_timeout(self.con, self.timeout)
def setup_new_conf(self): pk = self.new_conf conf_raw = pk['conf'] override_conf = pk['override_conf'] modules = pk['modules'] satellites = pk['satellites'] instance_name = pk['instance_name'] push_flavor = pk['push_flavor'] skip_initial_broks = pk['skip_initial_broks'] t0 = time.time() conf = cPickle.loads(conf_raw) logger.debug("Conf received at %d. Unserialized in %d secs" % (t0, time.time() - t0)) self.new_conf = None # Tag the conf with our data self.conf = conf self.conf.push_flavor = push_flavor self.conf.instance_name = instance_name self.conf.skip_initial_broks = skip_initial_broks self.cur_conf = conf self.override_conf = override_conf self.modules = modules self.satellites = satellites #self.pollers = self.app.pollers if self.conf.human_timestamp_log: logger.set_human_format() # Now We create our pollers for pol_id in satellites['pollers']: # Must look if we already have it already_got = pol_id in self.pollers p = satellites['pollers'][pol_id] self.pollers[pol_id] = p if p['name'] in override_conf['satellitemap']: p = dict(p) # make a copy p.update(override_conf['satellitemap'][p['name']]) uri = pyro.create_uri(p['address'], p['port'], 'Schedulers', self.use_ssl) self.pollers[pol_id]['uri'] = uri self.pollers[pol_id]['last_connection'] = 0 # First mix conf and override_conf to have our definitive conf for prop in self.override_conf: #print "Overriding the property %s with value %s" % (prop, self.override_conf[prop]) val = self.override_conf[prop] setattr(self.conf, prop, val) if self.conf.use_timezone != '': logger.debug("Setting our timezone to %s" % str(self.conf.use_timezone)) os.environ['TZ'] = self.conf.use_timezone time.tzset() if len(self.modules) != 0: logger.debug("I've got %s modules" % str(self.modules)) # TODO: if scheduler had previous modules instanciated it must clean them! self.modules_manager.set_modules(self.modules) self.do_load_modules() # give it an interface # But first remove previous interface if exists if self.ichecks is not None: logger.debug("Deconnecting previous Check Interface from pyro_daemon") self.pyro_daemon.unregister(self.ichecks) # Now create and connect it self.ichecks = IChecks(self.sched) self.uri = self.pyro_daemon.register(self.ichecks, "Checks") logger.debug("The Checks Interface uri is: %s" % self.uri) # Same for Broks if self.ibroks is not None: logger.debug("Deconnecting previous Broks Interface from pyro_daemon") self.pyro_daemon.unregister(self.ibroks) # Create and connect it self.ibroks = IBroks(self.sched) self.uri2 = self.pyro_daemon.register(self.ibroks, "Broks") logger.debug("The Broks Interface uri is: %s" % self.uri2) logger.debug("Loading configuration..") self.conf.explode_global_conf() # we give sched it's conf self.sched.reset() self.sched.load_conf(self.conf) self.sched.load_satellites(self.pollers, self.reactionners) # We must update our Config dict macro with good value # from the config parameters self.sched.conf.fill_resource_macros_names_macros() #print "DBG: got macors", self.sched.conf.macros # Creating the Macroresolver Class & unique instance m = MacroResolver() m.init(self.conf) #self.conf.dump() #self.conf.quick_debug() # Now create the external commander # it's a applyer: it role is not to dispatch commands, # but to apply them e = ExternalCommandManager(self.conf, 'applyer') # Scheduler need to know about external command to # activate it if necessery self.sched.load_external_command(e) # External command need the sched because he can raise checks e.load_scheduler(self.sched) # We clear our schedulers managed (it's us :) ) # and set ourself in it self.schedulers = {self.conf.instance_id: self.sched}
def setup_new_conf(self): conf = self.new_conf self.new_conf = None self.cur_conf = conf # Got our name from the globals if "broker_name" in conf["global"]: name = conf["global"]["broker_name"] else: name = "Unnamed broker" self.name = name self.log.load_obj(self, name) print "[%s] Sending us configuration %s" % (self.name, conf) # If we've got something in the schedulers, we do not # want it anymore # self.schedulers.clear() for sched_id in conf["schedulers"]: # Must look if we already have it to do nto overdie our broks already_got = sched_id in self.schedulers if already_got: broks = self.schedulers[sched_id]["broks"] running_id = self.schedulers[sched_id]["running_id"] else: broks = {} running_id = 0 s = conf["schedulers"][sched_id] self.schedulers[sched_id] = s uri = pyro.create_uri(s["address"], s["port"], "Broks", self.use_ssl) self.schedulers[sched_id]["uri"] = uri self.schedulers[sched_id]["broks"] = broks self.schedulers[sched_id]["instance_id"] = s["instance_id"] self.schedulers[sched_id]["running_id"] = running_id self.schedulers[sched_id]["active"] = s["active"] self.schedulers[sched_id]["last_connection"] = 0 logger.log("[%s] We have our schedulers : %s " % (self.name, self.schedulers)) # Now get arbiter for arb_id in conf["arbiters"]: # Must look if we already have it already_got = arb_id in self.arbiters if already_got: broks = self.arbiters[arb_id]["broks"] else: broks = {} a = conf["arbiters"][arb_id] self.arbiters[arb_id] = a uri = pyro.create_uri(a["address"], a["port"], "Broks", self.use_ssl) self.arbiters[arb_id]["uri"] = uri self.arbiters[arb_id]["broks"] = broks self.arbiters[arb_id]["instance_id"] = 0 # No use so all to 0 self.arbiters[arb_id]["running_id"] = 0 self.arbiters[arb_id]["last_connection"] = 0 # We do not connect to the arbiter. To connection hang logger.log("[%s] We have our arbiters : %s " % (self.name, self.arbiters)) # Now for pollers for pol_id in conf["pollers"]: # Must look if we already have it already_got = pol_id in self.pollers if already_got: broks = self.pollers[pol_id]["broks"] running_id = self.schedulers[sched_id]["running_id"] else: broks = {} running_id = 0 p = conf["pollers"][pol_id] self.pollers[pol_id] = p uri = pyro.create_uri(p["address"], p["port"], "Broks", self.use_ssl) self.pollers[pol_id]["uri"] = uri self.pollers[pol_id]["broks"] = broks self.pollers[pol_id]["instance_id"] = 0 # No use so all to 0 self.pollers[pol_id]["running_id"] = running_id self.pollers[pol_id]["last_connection"] = 0 # #And we connect to it # self.app.pynag_con_init(pol_id, 'poller') logger.log("[%s] We have our pollers : %s" % (self.name, self.pollers)) # Now reactionners for rea_id in conf["reactionners"]: # Must look if we already have it already_got = rea_id in self.reactionners if already_got: broks = self.reactionners[rea_id]["broks"] running_id = self.schedulers[sched_id]["running_id"] else: broks = {} running_id = 0 r = conf["reactionners"][rea_id] self.reactionners[rea_id] = r uri = pyro.create_uri(r["address"], r["port"], "Broks", self.use_ssl) self.reactionners[rea_id]["uri"] = uri self.reactionners[rea_id]["broks"] = broks self.reactionners[rea_id]["instance_id"] = 0 # No use so all to 0 self.reactionners[rea_id]["running_id"] = running_id self.reactionners[rea_id]["last_connection"] = 0 # #And we connect to it # self.app.pynag_con_init(rea_id, 'reactionner') logger.log("[%s] We have our reactionners : %s" % (self.name, self.reactionners)) if not self.have_modules: self.modules = mods = conf["global"]["modules"] self.have_modules = True logger.log("[%s] We received modules %s " % (self.name, mods)) # Set our giving timezone from arbiter use_timezone = conf["global"]["use_timezone"] if use_timezone != "NOTSET": logger.log("[%s] Setting our timezone to" % (self.name, use_timezone)) os.environ["TZ"] = use_timezone time.tzset() # Connexion init with Schedulers for sched_id in self.schedulers: self.pynag_con_init(sched_id, type="scheduler") for pol_id in self.pollers: self.pynag_con_init(pol_id, type="poller") for rea_id in self.reactionners: self.pynag_con_init(rea_id, type="reactionner")
def setup_new_conf(self): pk = self.new_conf conf_raw = pk['conf'] override_conf = pk['override_conf'] modules = pk['modules'] satellites = pk['satellites'] instance_name = pk['instance_name'] push_flavor = pk['push_flavor'] skip_initial_broks = pk['skip_initial_broks'] t0 = time.time() conf = cPickle.loads(conf_raw) logger.debug("Conf received at %d. Unserialized in %d secs" % (t0, time.time() - t0)) self.new_conf = None # Tag the conf with our data self.conf = conf self.conf.push_flavor = push_flavor self.conf.instance_name = instance_name self.conf.skip_initial_broks = skip_initial_broks self.cur_conf = conf self.override_conf = override_conf self.modules = modules self.satellites = satellites #self.pollers = self.app.pollers if self.conf.human_timestamp_log: logger.set_human_format() # Now We create our pollers for pol_id in satellites['pollers']: # Must look if we already have it already_got = pol_id in self.pollers p = satellites['pollers'][pol_id] self.pollers[pol_id] = p if p['name'] in override_conf['satellitemap']: p = dict(p) # make a copy p.update(override_conf['satellitemap'][p['name']]) uri = pyro.create_uri(p['address'], p['port'], 'Schedulers', self.use_ssl) self.pollers[pol_id]['uri'] = uri self.pollers[pol_id]['last_connection'] = 0 # First mix conf and override_conf to have our definitive conf for prop in self.override_conf: #print "Overriding the property %s with value %s" % (prop, self.override_conf[prop]) val = self.override_conf[prop] setattr(self.conf, prop, val) if self.conf.use_timezone != '': logger.debug("Setting our timezone to %s" % str(self.conf.use_timezone)) os.environ['TZ'] = self.conf.use_timezone time.tzset() if len(self.modules) != 0: logger.debug("I've got %s modules" % str(self.modules)) # TODO: if scheduler had previous modules instanciated it must clean them! self.modules_manager.set_modules(self.modules) self.do_load_modules() # give it an interface # But first remove previous interface if exists if self.ichecks is not None: logger.debug( "Deconnecting previous Check Interface from pyro_daemon") self.pyro_daemon.unregister(self.ichecks) # Now create and connect it self.ichecks = IChecks(self.sched) self.uri = self.pyro_daemon.register(self.ichecks, "Checks") logger.debug("The Checks Interface uri is: %s" % self.uri) # Same for Broks if self.ibroks is not None: logger.debug( "Deconnecting previous Broks Interface from pyro_daemon") self.pyro_daemon.unregister(self.ibroks) # Create and connect it self.ibroks = IBroks(self.sched) self.uri2 = self.pyro_daemon.register(self.ibroks, "Broks") logger.debug("The Broks Interface uri is: %s" % self.uri2) logger.info("Loading configuration.") self.conf.explode_global_conf() # we give sched it's conf self.sched.reset() self.sched.load_conf(self.conf) self.sched.load_satellites(self.pollers, self.reactionners) # We must update our Config dict macro with good value # from the config parameters self.sched.conf.fill_resource_macros_names_macros() #print "DBG: got macros", self.sched.conf.macros # Creating the Macroresolver Class & unique instance m = MacroResolver() m.init(self.conf) #self.conf.dump() #self.conf.quick_debug() # Now create the external commander # it's a applyer: it role is not to dispatch commands, # but to apply them e = ExternalCommandManager(self.conf, 'applyer') # Scheduler need to know about external command to # activate it if necessary self.sched.load_external_command(e) # External command need the sched because he can raise checks e.load_scheduler(self.sched) # We clear our schedulers managed (it's us :) ) # and set ourself in it self.schedulers = {self.conf.instance_id: self.sched}
def setup_new_conf(self): #self.use_ssl = self.app.use_ssl (conf, override_conf, modules, satellites) = self.new_conf self.new_conf = None # In fact it make the scheduler just DIE as a bad guy. # Must manage it better or not manage it at all! #if self.cur_conf and self.cur_conf.magic_hash == conf.magic_hash: # print("I received a conf with same hash than me, I skip it.") # return self.conf = conf self.cur_conf = conf self.override_conf = override_conf self.modules = modules self.satellites = satellites #self.pollers = self.app.pollers # Now We create our pollers for pol_id in satellites['pollers']: # Must look if we already have it already_got = pol_id in self.pollers p = satellites['pollers'][pol_id] self.pollers[pol_id] = p uri = pyro.create_uri(p['address'], p['port'], 'Schedulers', self.use_ssl) self.pollers[pol_id]['uri'] = uri self.pollers[pol_id]['last_connexion'] = 0 print "Got a poller", p #First mix conf and override_conf to have our definitive conf for prop in self.override_conf: print "Overriding the property %s with value %s" % (prop, self.override_conf[prop]) val = self.override_conf[prop] setattr(self.conf, prop, val) if self.conf.use_timezone != 'NOTSET': print "Setting our timezone to", self.conf.use_timezone os.environ['TZ'] = self.conf.use_timezone time.tzset() print "I've got modules", self.modules # TODO: if scheduler had previous modules instanciated it must clean them ! self.modules_manager.set_modules(self.modules) self.do_load_modules() # And start external ones too self.modules_manager.start_external_instances() # give it an interface # But first remove previous interface if exists if self.ichecks is not None: print "Deconnecting previous Check Interface from pyro_daemon" self.pyro_daemon.unregister(self.ichecks) #Now create and connect it self.ichecks = IChecks(self.sched) self.uri = self.pyro_daemon.register(self.ichecks, "Checks") print "The Checks Interface uri is:", self.uri #Same for Broks if self.ibroks is not None: print "Deconnecting previous Broks Interface from pyro_daemon" self.pyro_daemon.unregister(self.ibroks) #Create and connect it self.ibroks = IBroks(self.sched) self.uri2 = self.pyro_daemon.register(self.ibroks, "Broks") print "The Broks Interface uri is:", self.uri2 print("Loading configuration..") self.conf.explode_global_conf() #we give sched it's conf self.sched.reset() self.sched.load_conf(self.conf) self.sched.load_satellites(self.pollers, self.reactionners) #We must update our Config dict macro with good value #from the config parameters self.sched.conf.fill_resource_macros_names_macros() #print "DBG: got macors", self.sched.conf.macros #Creating the Macroresolver Class & unique instance m = MacroResolver() m.init(self.conf) #self.conf.dump() #self.conf.quick_debug() #Now create the external commander #it's a applyer : it role is not to dispatch commands, #but to apply them e = ExternalCommandManager(self.conf, 'applyer') #Scheduler need to know about external command to #activate it if necessery self.sched.load_external_command(e) #External command need the sched because he can raise checks e.load_scheduler(self.sched)
def setup_new_conf(self): conf = self.new_conf self.new_conf = None self.cur_conf = conf # Got our name from the globals if 'broker_name' in conf['global']: name = conf['global']['broker_name'] else: name = 'Unnamed broker' self.name = name self.log.load_obj(self, name) print "[%s] Sending us configuration %s" % (self.name, conf) # If we've got something in the schedulers, we do not # want it anymore # self.schedulers.clear() for sched_id in conf['schedulers']: # Must look if we already have it to do nto overdie our broks already_got = sched_id in self.schedulers if already_got: broks = self.schedulers[sched_id]['broks'] running_id = self.schedulers[sched_id]['running_id'] else: broks = {} running_id = 0 s = conf['schedulers'][sched_id] self.schedulers[sched_id] = s uri = pyro.create_uri(s['address'], s['port'], 'Broks', self.use_ssl) self.schedulers[sched_id]['uri'] = uri self.schedulers[sched_id]['broks'] = broks self.schedulers[sched_id]['instance_id'] = s['instance_id'] self.schedulers[sched_id]['running_id'] = running_id self.schedulers[sched_id]['active'] = s['active'] self.schedulers[sched_id]['last_connexion'] = 0 logger.log("[%s] We have our schedulers : %s " % (self.name, self.schedulers)) # Now get arbiter for arb_id in conf['arbiters']: # Must look if we already have it already_got = arb_id in self.arbiters if already_got: broks = self.arbiters[arb_id]['broks'] else: broks = {} a = conf['arbiters'][arb_id] self.arbiters[arb_id] = a uri = pyro.create_uri(a['address'], a['port'], 'Broks', self.use_ssl) self.arbiters[arb_id]['uri'] = uri self.arbiters[arb_id]['broks'] = broks self.arbiters[arb_id]['instance_id'] = 0 # No use so all to 0 self.arbiters[arb_id]['running_id'] = 0 self.arbiters[arb_id]['last_connexion'] = 0 # We do not connect to the arbiter. To connexion hang logger.log("[%s] We have our arbiters : %s " % (self.name, self.arbiters)) # Now for pollers for pol_id in conf['pollers']: # Must look if we already have it already_got = pol_id in self.pollers if already_got: broks = self.pollers[pol_id]['broks'] running_id = self.schedulers[sched_id]['running_id'] else: broks = {} running_id = 0 p = conf['pollers'][pol_id] self.pollers[pol_id] = p uri = pyro.create_uri(p['address'], p['port'], 'Broks', self.use_ssl) self.pollers[pol_id]['uri'] = uri self.pollers[pol_id]['broks'] = broks self.pollers[pol_id]['instance_id'] = 0 # No use so all to 0 self.pollers[pol_id]['running_id'] = running_id self.pollers[pol_id]['last_connexion'] = 0 # #And we connect to it # self.app.pynag_con_init(pol_id, 'poller') logger.log("[%s] We have our pollers : %s" % (self.name, self.pollers)) # Now reactionners for rea_id in conf['reactionners']: # Must look if we already have it already_got = rea_id in self.reactionners if already_got: broks = self.reactionners[rea_id]['broks'] running_id = self.schedulers[sched_id]['running_id'] else: broks = {} running_id = 0 r = conf['reactionners'][rea_id] self.reactionners[rea_id] = r uri = pyro.create_uri(r['address'], r['port'], 'Broks', self.use_ssl) self.reactionners[rea_id]['uri'] = uri self.reactionners[rea_id]['broks'] = broks self.reactionners[rea_id]['instance_id'] = 0 # No use so all to 0 self.reactionners[rea_id]['running_id'] = running_id self.reactionners[rea_id]['last_connexion'] = 0 # #And we connect to it # self.app.pynag_con_init(rea_id, 'reactionner') logger.log("[%s] We have our reactionners : %s" % (self.name, self.reactionners)) if not self.have_modules: self.modules = mods = conf['global']['modules'] self.have_modules = True logger.log("[%s] We received modules %s " % (self.name, mods)) # Set our giving timezone from arbiter use_timezone = conf['global']['use_timezone'] if use_timezone != 'NOTSET': logger.log("[%s] Setting our timezone to" % (self.name, use_timezone)) os.environ['TZ'] = use_timezone time.tzset() # Connexion init with Schedulers for sched_id in self.schedulers: self.pynag_con_init(sched_id, type='scheduler') for pol_id in self.pollers: self.pynag_con_init(pol_id, type='poller') for rea_id in self.reactionners: self.pynag_con_init(rea_id, type='reactionner')
def create_connexion(self): self.uri = pyro.create_uri(self.address, self.port, "ForArbiter", self.__class__.use_ssl) self.con = pyro.getProxy(self.uri) pyro.set_timeout(self.con, self.timeout)
def setup_new_conf(self): conf = self.new_conf self.new_conf = None self.cur_conf = conf # Got our name from the globals if 'receiver_name' in conf['global']: name = conf['global']['receiver_name'] else: name = 'Unnamed receiver' self.name = name self.log.load_obj(self, name) self.direct_routing = conf['global']['direct_routing'] g_conf = conf['global'] # If we've got something in the schedulers, we do not want it anymore for sched_id in conf['schedulers']: already_got = False # We can already got this conf id, but with another address if sched_id in self.schedulers: new_addr = conf['schedulers'][sched_id]['address'] old_addr = self.schedulers[sched_id]['address'] new_port = conf['schedulers'][sched_id]['port'] old_port = self.schedulers[sched_id]['port'] # Should got all the same to be ok :) if new_addr == old_addr and new_port == old_port: already_got = True if already_got: logger.info("[%s] We already got the conf %d (%s)" % (self.name, sched_id, conf['schedulers'][sched_id]['name'])) wait_homerun = self.schedulers[sched_id]['wait_homerun'] actions = self.schedulers[sched_id]['actions'] external_commands = self.schedulers[sched_id]['external_commands'] con = self.schedulers[sched_id]['con'] s = conf['schedulers'][sched_id] self.schedulers[sched_id] = s if s['name'] in g_conf['satellitemap']: s.update(g_conf['satellitemap'][s['name']]) uri = pyro.create_uri(s['address'], s['port'], 'ForArbiter', self.use_ssl) self.schedulers[sched_id]['uri'] = uri if already_got: self.schedulers[sched_id]['wait_homerun'] = wait_homerun self.schedulers[sched_id]['actions'] = actions self.schedulers[sched_id]['external_commands'] = external_commands self.schedulers[sched_id]['con'] = con else: self.schedulers[sched_id]['wait_homerun'] = {} self.schedulers[sched_id]['actions'] = {} self.schedulers[sched_id]['external_commands'] = [] self.schedulers[sched_id]['con'] = None self.schedulers[sched_id]['running_id'] = 0 self.schedulers[sched_id]['active'] = s['active'] # Do not connect if we are a passive satellite if self.direct_routing and not already_got: # And then we connect to it :) self.pynag_con_init(sched_id) logger.debug("[%s] Sending us configuration %s" % (self.name, conf)) if not self.have_modules: self.modules = mods = conf['global']['modules'] self.have_modules = True logger.info("We received modules %s " % mods) # Set our giving timezone from arbiter use_timezone = conf['global']['use_timezone'] if use_timezone != 'NOTSET': logger.info("Setting our timezone to %s" % use_timezone) os.environ['TZ'] = use_timezone time.tzset() # Now create the external commander. It's just here to dispatch # the commands to schedulers e = ExternalCommandManager(None, 'receiver') e.load_receiver(self) self.external_command = e
#Retrieving options options, args = parser.parse_args() #TODO : for now, helpme doesn't work as desired options.helpme = False # Check for required option target if not getattr(options, 'target'): print 'CRITICAL - target is not specified; You must specify which daemons you want to check!' parser.print_help() raise SystemExit, CRITICAL elif options.target not in daemon_types: print 'CRITICAL - target %s is not a Shinken daemon!' % options.target parser.print_help() raise SystemExit, CRITICAL uri = pyro.create_uri(options.hostname, options.portnum, PYRO_OBJECT, options.ssl) if options.daemon: # We just want a check for a single satellite daemon # Only OK or CRITICAL here daemon_name = options.daemon try: result = Pyro.core.getProxyForURI(uri).get_satellite_status( options.target, daemon_name) except Pyro.errors.ProtocolError, exp: print "CRITICAL : the Arbiter is not reachable : (%s)." % exp raise SystemExit, CRITICAL if result: if result['alive']: print 'OK - %s alive' % daemon_name