def test__get_disable_entity(self): event = { 'connector': '03-K64_Firefly', 'connector_name': 'serenity', 'component': 'Malcolm_Reynolds', 'output': 'the big red recall button', 'timestamp': int(time.time()) - 100, "source_type": "component" } alarm_id = '/strawberry' alarm = self.manager.make_alarm( alarm_id, event ) context_manager = ContextGraph(logger=LoggerMock()) ent_id = context_manager.get_id(event) entity = context_manager.create_entity_dict(ent_id, "inara", "component") entity["enabled"] = False context_manager._put_entities(entity) alarms = self.reader.get(opened=True) print(alarms) self.assertEqual(len(alarms["alarms"]), 0)
class engine(Engine): etype = 'context' def __init__(self, *args, **kwargs): super(engine, self).__init__(*args, **kwargs) # get a context self.context = ContextGraph() """ TODO: sla # get a storage for sla macro #self.storage = Middleware.get_middleware( # protocol='storage', data_scope='global') #self.sla = None """ self.entities_by_entity_ids = {} self.lock = Lock() self.beat() def beat(self): """ TODO: sla .. code-block:: python sla = self.storage.find_elements(request={ 'crecord_type': 'sla', 'objclass': 'macro' }) if sla: self.sla = sla[0] """ self.lock.acquire() entities_by_entity_ids = self.entities_by_entity_ids.copy() self.entities_by_entity_ids = {} self.lock.release() entities = self.context[ContextGraph.CTX_STORAGE].get_elements( ids=entities_by_entity_ids.keys()) for entity in entities: del entities_by_entity_ids[entity['_id']] if entities_by_entity_ids: context = self.context for entity_id in entities_by_entity_ids: _type, entity, ctx = entities_by_entity_ids[entity_id] context._put_entities([entity]) def work(self, event, *args, **kwargs): mCrit = 'PROC_CRITICAL' mWarn = 'PROC_WARNING' """ TODO: sla .. code-block:: if self.sla: mCrit = self.sla.data['mCrit'] mWarn = self.sla.data['mWarn'] """ context = {} # Get event informations hostgroups = event.get('hostgroups', []) servicegroups = event.get('servicegroups', []) component = event.get('component') resource = event.get('resource') # quick fix when an event has an empty resource if not event.get('resource', ''): del event['resource'] # get a copy of event _event = event.copy() # add hostgroups for hostgroup in hostgroups: hostgroup_data = {ContextGraph.NAME: hostgroup} self.context._put_entities([hostgroup_data]) # add servicegroups for servicegroup in servicegroups: servgroup_data = {ContextGraph.NAME: servicegroup} self.context._put_entities([servgroup_data]) # get related entity encoded_event = {} for k, v in _event.items(): try: k = k.encode('utf-8') except UnicodeError: pass try: v = v.encode('utf-8') except (UnicodeError, TypeError, AttributeError): pass encoded_event[k] = v # FIXME : get entity in the previous context had an option # create_if_not_exists in case of trouble, it might be a good start # to look at it. entity = self.context.get_entity(encoded_event) # set service groups and hostgroups if resource: context['component'] = component entity['servicegroups'] = servicegroups entity['hostgroups'] = hostgroups # set mCrit and mWarn entity['mCrit'] = _event.get(mCrit, None) entity['mWarn'] = _event.get(mWarn, None) context, name = self.context.get_entity_context_and_name(entity) if not context.get('resource', ''): del context['resource'] if not entity.get('resource', ''): del entity['resource'] # put the status entity in the context self.context._put_entities([entity]) # udpdate context information with resource and component if resource: context['resource'] = name else: context['component'] = name # remove type from context because type will be metric del context[ContextGraph.TYPE] # add perf data (may be done in the engine perfdata) for perfdata in event.get('perf_data_array', []): perfdata_entity = {} name = perfdata['metric'] perfdata_entity[ContextGraph.NAME] = name perfdata_entity['internal'] = perfdata['metric'].startswith('cps') self.context._put_entities([perfdata_entity]) return event
class engine(Engine): etype = 'context' def __init__(self, *args, **kwargs): super(engine, self).__init__(*args, **kwargs) # get a context self.context = ContextGraph() """ TODO: sla # get a storage for sla macro #self.storage = Middleware.get_middleware( # protocol='storage', data_scope='global') #self.sla = None """ self.entities_by_entity_ids = {} self.lock = Lock() self.beat() def beat(self): """ TODO: sla .. code-block:: python sla = self.storage.find_elements(request={ 'crecord_type': 'sla', 'objclass': 'macro' }) if sla: self.sla = sla[0] """ self.lock.acquire() entities_by_entity_ids = self.entities_by_entity_ids.copy() self.entities_by_entity_ids = {} self.lock.release() entities = self.context[ContextGraph.CTX_STORAGE].get_elements( ids=entities_by_entity_ids.keys() ) for entity in entities: del entities_by_entity_ids[entity['_id']] if entities_by_entity_ids: context = self.context for entity_id in entities_by_entity_ids: _type, entity, ctx = entities_by_entity_ids[entity_id] context._put_entities([entity]) def work(self, event, *args, **kwargs): mCrit = 'PROC_CRITICAL' mWarn = 'PROC_WARNING' """ TODO: sla .. code-block:: if self.sla: mCrit = self.sla.data['mCrit'] mWarn = self.sla.data['mWarn'] """ context = {} # Get event informations hostgroups = event.get('hostgroups', []) servicegroups = event.get('servicegroups', []) component = event.get('component') resource = event.get('resource') # quick fix when an event has an empty resource if not event.get('resource', ''): del event['resource'] # get a copy of event _event = event.copy() # add hostgroups for hostgroup in hostgroups: hostgroup_data = { ContextGraph.NAME: hostgroup } self.context._put_entities([hostgroup_data]) # add servicegroups for servicegroup in servicegroups: servgroup_data = { ContextGraph.NAME: servicegroup } self.context._put_entities([servgroup_data]) # get related entity encoded_event = {} for k, v in _event.items(): try: k = k.encode('utf-8') except UnicodeError: pass try: v = v.encode('utf-8') except (UnicodeError, TypeError, AttributeError): pass encoded_event[k] = v # FIXME : get entity in the previous context had an option # create_if_not_exists in case of trouble, it might be a good start # to look at it. entity = self.context.get_entity(encoded_event) # set service groups and hostgroups if resource: context['component'] = component entity['servicegroups'] = servicegroups entity['hostgroups'] = hostgroups # set mCrit and mWarn entity['mCrit'] = _event.get(mCrit, None) entity['mWarn'] = _event.get(mWarn, None) context, name = self.context.get_entity_context_and_name(entity) if not context.get('resource', ''): del context['resource'] if not entity.get('resource', ''): del entity['resource'] # put the status entity in the context self.context._put_entities([entity]) # udpdate context information with resource and component if resource: context['resource'] = name else: context['component'] = name # remove type from context because type will be metric del context[ContextGraph.TYPE] # add perf data (may be done in the engine perfdata) for perfdata in event.get('perf_data_array', []): perfdata_entity = {} name = perfdata['metric'] perfdata_entity[ContextGraph.NAME] = name perfdata_entity['internal'] = perfdata['metric'].startswith('cps') self.context._put_entities([perfdata_entity]) return event