def test_real(self): args = { 'env_file': 'cfg/monitor/simple.ini', 'alignak_name': 'alignak-test', 'daemon_name': 'arbiter-master' } my_arbiter = Arbiter(**args) my_arbiter.setup_alignak_logger() # Clear logs self.clear_logs() my_arbiter.alignak_monitor = "http://alignak-mos-ws.kiosks.ipmfrance.com" my_arbiter.alignak_monitor_username = '******' my_arbiter.alignak_monitor_password = '******' # my_arbiter.load_modules_manager() my_arbiter.load_monitoring_config_file() assert my_arbiter.conf.conf_is_correct is True # #1 - Get a new dispatcher my_dispatcher = Dispatcher(my_arbiter.conf, my_arbiter.link_to_myself) my_arbiter.dispatcher = my_dispatcher print("*** All daemons WS: %s" % ["%s:%s" % (link.address, link.port) for link in my_dispatcher.all_daemons_links]) my_arbiter.push_passive_check(details=False)
def test_real(self): args = { 'env_file': 'cfg/monitor/simple.ini', 'alignak_name': 'alignak-test', 'daemon_name': 'arbiter-master' } my_arbiter = Arbiter(**args) my_arbiter.setup_alignak_logger() # Clear logs self.clear_logs() my_arbiter.alignak_monitor = "http://alignak-mos-ws.kiosks.ipmfrance.com" my_arbiter.alignak_monitor_username = '******' my_arbiter.alignak_monitor_password = '******' my_arbiter.load_modules_manager() my_arbiter.load_monitoring_config_file() assert my_arbiter.conf.conf_is_correct is True # #1 - Get a new dispatcher my_dispatcher = Dispatcher(my_arbiter.conf, my_arbiter.link_to_myself) my_arbiter.dispatcher = my_dispatcher print("*** All daemons WS: %s" % [ "%s:%s" % (link.address, link.port) for link in my_dispatcher.all_daemons_links ]) my_arbiter.push_passive_check(details=False)
def _monitoring(self, env_filename='cfg/monitor/simple.ini', loops=3, multi_realms=False): """ monitoring process: prepare, check, dispatch This function realize all the monitoring operations: - load a monitoring configuration - prepare the monitoring - dispatch - check the correct monitoring, including: - check the configuration dispatched to the schedulers - check the configuration dispatched to the spare arbiter (if any) - run the check_reachable loop several times if multi_realms is True, the scheduler configuration received are not checked against the arbiter whole configuration. This would be really too complex to assert on this :( Schedulers must have a port number with 7768 (eg. 7768,17768,27768,...) Spare daemons must have a port number with 8770 (eg. 8770,18770,28770,...) :return: None """ args = { 'env_file': env_filename, 'alignak_name': 'alignak-test', 'daemon_name': 'arbiter-master' } my_arbiter = Arbiter(**args) my_arbiter.setup_alignak_logger() # Clear logs self.clear_logs() # my_arbiter.load_modules_manager() my_arbiter.load_monitoring_config_file() assert my_arbiter.conf.conf_is_correct is True # #1 - Get a new dispatcher my_dispatcher = Dispatcher(my_arbiter.conf, my_arbiter.link_to_myself) my_arbiter.dispatcher = my_dispatcher print("*** All daemons WS: %s" % ["%s:%s" % (link.address, link.port) for link in my_dispatcher.all_daemons_links]) assert my_arbiter.alignak_monitor == "http://super_alignak:7773/ws" assert my_arbiter.alignak_monitor_username == 'admin' assert my_arbiter.alignak_monitor_password == 'admin' metrics = [] for type in sorted(my_arbiter.conf.types_creations): _, _, strclss, _, _ = my_arbiter.conf.types_creations[type] if strclss in ['hostescalations', 'serviceescalations']: continue objects_list = getattr(my_arbiter.conf, strclss, []) metrics.append("'%s'=%d" % (strclss, len(objects_list))) # Simulate the daemons HTTP interface (very simple simulation !) with requests_mock.mock() as mr: mr.post('%s/login' % (my_arbiter.alignak_monitor), json={ "_status": "OK", "_result": ["1508507175582-c21a7d8e-ace0-47f2-9b10-280a17152c7c"] }) mr.patch('%s/host' % (my_arbiter.alignak_monitor), json={ "_status": "OK", "_result": ["1508507175582-c21a7d8e-ace0-47f2-9b10-280a17152c7c"] }) # Time warp 5 seconds - overpass the ping period... self.clear_logs() # frozen_datetime.tick(delta=datetime.timedelta(seconds=5)) my_arbiter.get_alignak_status(details=False) self.show_logs() # Hack the requests history to check and simulate the configuration pushed... history = mr.request_history for index, request in enumerate(history): # Check what is patched on /host ... if 'host' in request.url: received = request.json() print((index, request.url, received)) from pprint import pprint pprint(received) assert received['name'] == 'My Alignak' assert received['livestate']['timestamp'] == 1519583400 assert received['livestate']['state'] == 'up' assert received['livestate']['output'] == 'Some of my daemons are not reachable.' for metric in metrics: assert metric in received['livestate']['perf_data'] print(received['livestate']['long_output']) # Long output is sorted by daemon name assert received['livestate']['long_output'] == \ u'broker-master - daemon is not reachable.\n' \ u'poller-master - daemon is not reachable.\n' \ u'reactionner-master - daemon is not reachable.\n' \ u'receiver-master - daemon is not reachable.\n' \ u'scheduler-master - daemon is not reachable.' for link in my_dispatcher.all_daemons_links: assert link.name in [service['name'] for service in received['services']] for service in received['services']: assert 'name' in service assert 'livestate' in service assert 'timestamp' in service['livestate'] assert 'state' in service['livestate'] assert 'output' in service['livestate'] assert 'long_output' in service['livestate'] assert 'perf_data' in service['livestate']
def _monitoring(self, env_filename='cfg/monitor/simple.ini', loops=3, multi_realms=False): """ monitoring process: prepare, check, dispatch This function realize all the monitoring operations: - load a monitoring configuration - prepare the monitoring - dispatch - check the correct monitoring, including: - check the configuration dispatched to the schedulers - check the configuration dispatched to the spare arbiter (if any) - run the check_reachable loop several times if multi_realms is True, the scheduler configuration received are not checked against the arbiter whole configuration. This would be really too complex to assert on this :( Schedulers must have a port number with 7768 (eg. 7768,17768,27768,...) Spare daemons must have a port number with 8770 (eg. 8770,18770,28770,...) :return: None """ args = { 'env_file': env_filename, 'alignak_name': 'alignak-test', 'daemon_name': 'arbiter-master' } my_arbiter = Arbiter(**args) my_arbiter.setup_alignak_logger() # Clear logs self.clear_logs() my_arbiter.load_modules_manager() my_arbiter.load_monitoring_config_file() assert my_arbiter.conf.conf_is_correct is True # #1 - Get a new dispatcher my_dispatcher = Dispatcher(my_arbiter.conf, my_arbiter.link_to_myself) my_arbiter.dispatcher = my_dispatcher print("*** All daemons WS: %s" % [ "%s:%s" % (link.address, link.port) for link in my_dispatcher.all_daemons_links ]) assert my_arbiter.alignak_monitor == "http://super_alignak:7773/ws" assert my_arbiter.alignak_monitor_username == 'admin' assert my_arbiter.alignak_monitor_password == 'admin' metrics = [] for type in sorted(my_arbiter.conf.types_creations): _, _, strclss, _, _ = my_arbiter.conf.types_creations[type] if strclss in ['hostescalations', 'serviceescalations']: continue objects_list = getattr(my_arbiter.conf, strclss, []) metrics.append("'%s'=%d" % (strclss, len(objects_list))) # Simulate the daemons HTTP interface (very simple simulation !) with requests_mock.mock() as mr: mr.post('%s/login' % (my_arbiter.alignak_monitor), json={ "_status": "OK", "_result": ["1508507175582-c21a7d8e-ace0-47f2-9b10-280a17152c7c"] }) mr.patch( '%s/host' % (my_arbiter.alignak_monitor), json={ "_status": "OK", "_result": ["1508507175582-c21a7d8e-ace0-47f2-9b10-280a17152c7c"] }) # Time warp 5 seconds - overpass the ping period... self.clear_logs() # frozen_datetime.tick(delta=datetime.timedelta(seconds=5)) my_arbiter.get_alignak_status(details=False) self.show_logs() # Hack the requests history to check and simulate the configuration pushed... history = mr.request_history for index, request in enumerate(history): # Check what is patched on /host ... if 'host' in request.url: received = request.json() print((index, request.url, received)) from pprint import pprint pprint(received) assert received['name'] == 'My Alignak' assert received['livestate']['timestamp'] == 1519583400 assert received['livestate']['state'] == 'up' assert received['livestate'][ 'output'] == 'Some of my daemons are not reachable.' for metric in metrics: assert metric in received['livestate']['perf_data'] print(received['livestate']['long_output']) # Long output is sorted by daemon name assert received['livestate']['long_output'] == \ u'broker-master - daemon is not reachable.\n' \ u'poller-master - daemon is not reachable.\n' \ u'reactionner-master - daemon is not reachable.\n' \ u'receiver-master - daemon is not reachable.\n' \ u'scheduler-master - daemon is not reachable.' for link in my_dispatcher.all_daemons_links: assert link.name in [ service['name'] for service in received['services'] ] for service in received['services']: assert 'name' in service assert 'livestate' in service assert 'timestamp' in service['livestate'] assert 'state' in service['livestate'] assert 'output' in service['livestate'] assert 'long_output' in service['livestate'] assert 'perf_data' in service['livestate']