def test_get_vitrage_resource(self): """Test the resource returned after processing a list of mappings :return: """ # Action nagios_conf = NagiosConfig(self.conf) # Test assertions mapped_resource = nagios_conf.get_vitrage_resource(None) self.assertIsNone(mapped_resource, 'expected None') mapped_resource = nagios_conf.get_vitrage_resource('') self.assertIsNone(mapped_resource, 'expected None') mapped_resource = nagios_conf.get_vitrage_resource('compute-1') self.assertIsNotNone(mapped_resource, 'expected Not None') self.assertEqual(NOVA_HOST_DATASOURCE, mapped_resource[0]) self.assertEqual('compute-1', mapped_resource[1]) mapped_resource = nagios_conf.get_vitrage_resource('compute-2') self.assertIsNotNone(mapped_resource, 'expected Not None') self.assertEqual(NOVA_HOST_DATASOURCE, mapped_resource[0]) self.assertEqual('host2', mapped_resource[1]) mapped_resource = nagios_conf.get_vitrage_resource('compute-88') self.assertIsNotNone(mapped_resource, 'expected Not None') self.assertEqual(NOVA_HOST_DATASOURCE, mapped_resource[0]) self.assertEqual('compute-88', mapped_resource[1]) mapped_resource = nagios_conf.get_vitrage_resource('instance-7') self.assertIsNotNone(mapped_resource, 'expected Not None') self.assertEqual(NOVA_INSTANCE_DATASOURCE, mapped_resource[0]) self.assertEqual('instance-7', mapped_resource[1])
def test_get_vitrage_resource(self): """Test the resource returned after processing a list of mappings :return: """ # Action nagios_conf = NagiosConfig(self.conf) # Test assertions mapped_resource = nagios_conf.get_vitrage_resource(None) self.assertIsNone(mapped_resource, "expected None") mapped_resource = nagios_conf.get_vitrage_resource("") self.assertIsNone(mapped_resource, "expected None") mapped_resource = nagios_conf.get_vitrage_resource("compute-1") self.assertIsNotNone(mapped_resource, "expected Not None") self.assertEqual(NOVA_HOST_DATASOURCE, mapped_resource[0]) self.assertEqual("compute-1", mapped_resource[1]) mapped_resource = nagios_conf.get_vitrage_resource("compute-2") self.assertIsNotNone(mapped_resource, "expected Not None") self.assertEqual(NOVA_HOST_DATASOURCE, mapped_resource[0]) self.assertEqual("host2", mapped_resource[1]) mapped_resource = nagios_conf.get_vitrage_resource("compute-88") self.assertIsNotNone(mapped_resource, "expected Not None") self.assertEqual(NOVA_HOST_DATASOURCE, mapped_resource[0]) self.assertEqual("compute-88", mapped_resource[1]) mapped_resource = nagios_conf.get_vitrage_resource("instance-7") self.assertIsNotNone(mapped_resource, "expected Not None") self.assertEqual(NOVA_INSTANCE_DATASOURCE, mapped_resource[0]) self.assertEqual("instance-7", mapped_resource[1])
class NagiosDriver(AlarmDriverBase): ServiceKey = namedtuple('ServiceKey', ['hostname', 'service']) def __init__(self, conf): super(NagiosDriver, self).__init__() self.conf = conf self.config = NagiosConfig(conf) def _vitrage_type(self): return NAGIOS_DATASOURCE def _alarm_key(self, alarm): return self.ServiceKey(hostname=alarm[NagiosProps.RESOURCE_NAME], service=alarm[NagiosProps.SERVICE]) def _get_alarms(self): nagios_user = self.conf.nagios.user nagios_password = self.conf.nagios.password nagios_url = self.conf.nagios.url if not nagios_user: return [] if not nagios_password: LOG.warning('Nagios password is not defined') return [] if not nagios_url: LOG.warning('Nagios url is not defined') return [] session = requests.Session() payload = {'host': 'all', 'limit': '0'} response = session.get(nagios_url, params=payload, auth=(nagios_user, nagios_password)) if response.status_code == requests.codes.ok: nagios_services = NagiosParser().parse(response.text) return nagios_services else: LOG.error('Failed to get nagios data. Response code: %s', response.status_code) return [] def _enrich_alarms(self, alarms): for alarm in alarms: # based on nagios configuration file, convert nagios host name # to vitrage resource type and name alarm[DSProps.ENTITY_TYPE] = NagiosProps.NAGIOS nagios_host = alarm[NagiosProps.RESOURCE_NAME] vitrage_resource = self.config.get_vitrage_resource(nagios_host) alarm[NagiosProps.RESOURCE_TYPE] = \ vitrage_resource[0] if vitrage_resource else None alarm[NagiosProps.RESOURCE_NAME] = \ vitrage_resource[1] if vitrage_resource else None def _is_erroneous(self, alarm): return alarm and alarm[NagiosProps.STATUS] != NagiosTestStatus.OK def _status_changed(self, alarm1, alarm2): return alarm1 and alarm2 and \ not alarm1[NagiosProps.STATUS] == alarm2[NagiosProps.STATUS] def _is_valid(self, alarm): return alarm[NagiosProps.RESOURCE_TYPE] is not None and \ alarm[NagiosProps.RESOURCE_NAME] is not None @staticmethod def should_delete_outdated_entities(): return True
class NagiosDriver(AlarmDriverBase): ServiceKey = namedtuple('ServiceKey', ['hostname', 'service']) def __init__(self, conf): super(NagiosDriver, self).__init__() self.conf = conf self.config = NagiosConfig(conf) def _entity_type(self): return NAGIOS_DATASOURCE def _alarm_key(self, alarm): return self.ServiceKey(hostname=alarm[NagiosProps.RESOURCE_NAME], service=alarm[NagiosProps.SERVICE]) def _get_alarms(self): nagios_user = self.conf.nagios.user nagios_password = self.conf.nagios.password nagios_url = self.conf.nagios.url if not nagios_user: return [] if not nagios_password: LOG.warning(_LW('Nagios password is not defined')) return [] if not nagios_url: LOG.warning(_LW('Nagios url is not defined')) return [] session = requests.Session() payload = {'host': 'all', 'limit': '0'} response = session.get(nagios_url, params=payload, auth=(nagios_user, nagios_password)) if response.status_code == requests.codes.ok: nagios_services = NagiosParser().parse(response.text) return nagios_services else: LOG.error(_LE('Failed to get nagios data. Response code: %s') % response.status_code) return [] def _enrich_alarms(self, alarms): for alarm in alarms: # based on nagios configuration file, convert nagios host name # to vitrage resource type and name alarm[DSProps.ENTITY_TYPE] = NagiosProps.NAGIOS nagios_host = alarm[NagiosProps.RESOURCE_NAME] vitrage_resource = self.config.get_vitrage_resource(nagios_host) alarm[NagiosProps.RESOURCE_TYPE] = \ vitrage_resource[0] if vitrage_resource else None alarm[NagiosProps.RESOURCE_NAME] = \ vitrage_resource[1] if vitrage_resource else None def _is_erroneous(self, alarm): return alarm and alarm[NagiosProps.STATUS] != NagiosTestStatus.OK def _status_changed(self, alarm1, alarm2): return alarm1 and alarm2 and \ not alarm1[NagiosProps.STATUS] == alarm2[NagiosProps.STATUS] def _is_valid(self, alarm): return alarm[NagiosProps.RESOURCE_TYPE] is not None and \ alarm[NagiosProps.RESOURCE_NAME] is not None