def test_regenerator_load_from_scheduler(self): # # Config is not correct because of a wrong relative path # in the main config file # # for h in self.sched.hosts: # h.realm = h.realm.get_name() self.rg = Regenerator() self.rg.load_from_scheduler(self.sched) self.sched.conf.skip_initial_broks = False self.sched.brokers['Default-Broker'] = { 'broks': {}, 'has_full_broks': False } self.sched.fill_initial_broks('Default-Broker') # Got the initial creation ones ids = self.sched.broks.keys() ids.sort() t0 = time.time() for i in ids: b = self.sched.broks[i] print "Manage b", b.type b.prepare() self.rg.manage_brok(b) t1 = time.time() print 'First inc', t1 - t0, len(self.sched.broks) self.sched.broks.clear() self.look_for_same_values()
def test_reversed_list(self): """ Test to ensure new conf is properly merge with different servicegroup definition The first conf has all its servicegroup defined servicegroups.cfg and services.cfg The second conf has both, so that servicegroups defined ins services.cfg are genretaed by Alignak This lead to another generated id witch should be handled properly when regenerating reversed list / merging servicegroups definition """ sg = self.sched.servicegroups.find_by_name('servicegroup_01') prev_id = sg._id reg = Regenerator() data = {"instance_id": 0} b = Brok('program_status', data) b.prepare() reg.manage_program_status_brok(b) reg.all_done_linking(0) self.setup_with_file(["etc/alignak_reversed_list.cfg"]) reg.all_done_linking(0) #for service in self.sched.servicegroups: # assert(service.servicegroup_name in self.sched.servicegroups.reversed_list.keys()) # assert(service._id == self.sched.servicegroups.reversed_list[service.servicegroup_name]) sg = self.sched.servicegroups.find_by_name('servicegroup_01') assert(prev_id != sg._id) for sname in [u'servicegroup_01', u'ok', u'flap', u'unknown', u'random', u'servicegroup_02', u'servicegroup_03', u'warning', u'critical', u'servicegroup_04', u'servicegroup_05', u'pending', u'mynewgroup']: sg = self.sched.servicegroups.find_by_name(sname) assert(sname is not None)
def test_regenerator(self): # # Config is not correct because of a wrong relative path # in the main config file # # for h in self.sched.hosts: # h.realm = h.realm.get_name() self.sched.conf.skip_initial_broks = False self.sched.brokers['Default-Broker'] = { 'broks': {}, 'has_full_broks': False } self.sched.fill_initial_broks('Default-Broker') self.rg = Regenerator() # Got the initial creation ones ids = self.sched.broks.keys() ids.sort() t0 = time.time() for i in ids: b = self.sched.broks[i] print "Manage b", b.type b.prepare() self.rg.manage_brok(b) t1 = time.time() print 'First inc', t1 - t0, len(self.sched.broks) self.sched.broks.clear() self.look_for_same_values() print "Get the hosts and services" host = self.sched.hosts.find_by_name("test_host_0") host.checks_in_progress = [] host.act_depend_of = [] # ignore the router router = self.sched.hosts.find_by_name("test_router_0") router.checks_in_progress = [] router.act_depend_of = [] # ignore the router svc = self.sched.services.find_srv_by_name_and_hostname( "test_host_0", "test_ok_0") svc.checks_in_progress = [] svc.act_depend_of = [] # no hostchecks on critical checkresults self.scheduler_loop( 3, [[host, 2, 'DOWN | value1=1 value2=2'], [router, 0, 'UP | rtt=10'], [svc, 2, 'BAD | value1=0 value2=0']]) self.assertEqual('DOWN', host.state) self.assertEqual('HARD', host.state_type) ids = self.sched.broks.keys() ids.sort() t0 = time.time() for i in ids: b = self.sched.broks[i] print "Manage b", b.type b.prepare() self.rg.manage_brok(b) t1 = time.time() print 'Time', t1 - t0 self.sched.broks.clear() self.look_for_same_values() print 'Time', t1 - t0 b = svc.get_initial_status_brok() b.prepare() print "GO BENCH!" t0 = time.time() for i in xrange(1, 1000): b = svc.get_initial_status_brok() b.prepare() s = Service({}) for (prop, value) in b.data.iteritems(): setattr(s, prop, value) t1 = time.time() print "Bench end:", t1 - t0 times = {} sizes = {} import cPickle data = {} cls = svc.__class__ start = time.time() for i in xrange(1, 10000): for prop, entry in svc.__class__.properties.items(): # Is this property intended for brokking? if 'full_status' in entry.fill_brok: data[prop] = svc.get_property_value_for_brok( prop, cls.properties) if not prop in times: times[prop] = 0 sizes[prop] = 0 t0 = time.time() tmp = cPickle.dumps(data[prop], 0) sizes[prop] += len(tmp) times[prop] += time.time() - t0 print "Times" for (k, v) in times.iteritems(): print "\t%s: %s" % (k, v) print "\n\n" print "Sizes" for (k, v) in sizes.iteritems(): print "\t%s: %s" % (k, v) print "\n" print "total time", time.time() - start