class BaseTest(TestCase): def setUp(self): self.logger = logging.getLogger('alerts') self.alerts_storage = Middleware.get_middleware_by_uri( 'storage-periodical-testalarm://' ) self.config_storage = Middleware.get_middleware_by_uri( 'storage-default-testconfig://' ) self.config_storage.put_element( element={ '_id': 'test_config', 'crecord_type': 'statusmanagement', 'bagot_time': 3600, 'bagot_freq': 10, 'stealthy_time': 300, 'restore_event': True, 'auto_snooze': False, 'snooze_default_time': 300, }, _id='test_config' ) self.filter_storage = Middleware.get_middleware_by_uri( 'storage-default-testalarmfilter://' ) self.context_graph_storage = Middleware.get_middleware_by_uri( 'storage-default-testentities://' ) self.cg_manager = ContextGraph(self.logger) self.cg_manager.ent_storage = self.context_graph_storage self.watcher_manager = Watcher() conf = Configuration.load(Alerts.CONF_PATH, Ini) filter_ = {'crecord_type': 'statusmanagement'} self.config_data = EtherealData( collection=MongoCollection(self.config_storage._backend), filter_=filter_) self.event_publisher = Mock(spec=StatEventPublisher) mongo = MongoStore.get_default() collection = mongo.get_collection("default_testpbehavior") pb_collection = MongoCollection(collection) logger = Logger.get('test_pb', None, output_cls=OutputNull) config = Configuration.load(PBehaviorManager.CONF_PATH, Ini) self.pbm = PBehaviorManager(config=config, logger=logger, pb_collection=pb_collection) self.manager = Alerts(config=conf, logger=self.logger, alerts_storage=self.alerts_storage, config_data=self.config_data, filter_storage=self.filter_storage, context_graph=self.cg_manager, watcher=self.watcher_manager, event_publisher=self.event_publisher, pbehavior=self.pbm) def tearDown(self): """Teardown""" self.alerts_storage.remove_elements() self.config_storage.remove_elements() self.filter_storage.remove_elements() self.context_graph_storage.remove_elements() def gen_fake_alarm(self, update={}, moment=None): """ Generate a fake alarm/value. """ if moment is None: moment = int(time.mktime(datetime.now().timetuple())) alarm_id = '/fake/alarm/id' alarm = self.manager.make_alarm( alarm_id, { 'connector': 'fake-connector', 'connector_name': 'fake-connector-name', 'component': 'c', 'output': 'out', 'timestamp': moment } ) value = alarm[self.manager.alerts_storage.VALUE] value[AlarmField.state.value] = { 't': moment, 'val': Check.MINOR } value[AlarmField.steps.value] = [ { '_t': 'stateinc', 't': moment, 'a': 'fake-author', 'm': 'fake-message', 'val': Check.MINOR } ] dictio = merge_two_dicts(alarm, update) return dictio, value def gen_alarm_filter(self, update={}, storage=None): """ Generate a standard alarm filter. """ base = { AlarmFilter.LIMIT: 180.0, AlarmFilter.FILTER: '', AlarmFilter.CONDITION: {}, AlarmFilter.TASKS: ['alerts.systemaction.state_increase'], } dictio = merge_two_dicts(base, update) return AlarmFilter(dictio, logger=self.logger, storage=storage)
class ComputeState(BaseTest): def setUp(self): super(ComputeState, self).setUp() pbehavior_storage = Middleware.get_middleware_by_uri( 'storage-default-testpbehavior://') filter_storage = Middleware.get_middleware_by_uri( 'storage-default-testalarmfilter://') config_storage = Middleware.get_middleware_by_uri( 'storage-default-testconfig://') config_storage.put_element(element={ '_id': 'test_config', 'crecord_type': 'statusmanagement', 'bagot_time': 3600, 'bagot_freq': 10, 'stealthy_time': 300, 'restore_event': True, 'auto_snooze': False, 'snooze_default_time': 300, }, _id='test_config') logger = Logger.get('test_pb', None, output_cls=OutputNull) config = Configuration.load(PBehaviorManager.CONF_PATH, Ini) self.pbm = PBehaviorManager(config=config, logger=logger, pb_storage=pbehavior_storage) self.pbm.context = self.context_graph_manager self.manager.pbehavior_manager = self.pbm conf = Configuration.load(Alerts.CONF_PATH, Ini) filter_ = {'crecord_type': 'statusmanagement'} config_data = EtherealData(collection=config_storage._backend, filter_=filter_) event_publisher = Mock(spec=StatEventPublisher) self.alert_manager = Alerts(config=conf, logger=logger, alerts_storage=self.alerts_storage, config_data=config_data, filter_storage=filter_storage, context_graph=self.context_graph_manager, watcher=self.manager, event_publisher=event_publisher) # Creating entity self.type_ = 'resource' self.name = 'morticia' entity = ContextGraph.create_entity_dict(id=self.name, etype=self.type_, name=self.name) self.context_graph_manager.create_entity(entity) # Creating coresponding alarm event = { 'connector': self.type_, 'connector_name': 'connector_name', 'component': self.name, 'output': 'tadaTaDA tic tic', 'timestamp': 0 } alarm = self.alert_manager.make_alarm(self.name, event) self.state = 2 alarm = self.alert_manager.update_state(alarm, self.state, event) new_value = alarm[self.alert_manager.alerts_storage.VALUE] self.alert_manager.update_current_alarm(alarm, new_value) def tearDown(self): super(ComputeState, self).tearDown() self.pbm.pb_storage.remove_elements() def test_compute_state_issue427(self): # Aka: state desyncro watcher_id = 'addams' watcher = { '_id': watcher_id, 'mfilter': '{"name": {"$in": ["morticia"]}}', 'display_name': 'family' } self.assertTrue(self.manager.create_watcher(watcher)) res = self.manager.get_watcher(watcher_id) self.assertEqual(res['state'], self.state) # Creating pbehavior on it now = datetime.utcnow() self.pbm.create(name='addam', filter=loads('{"name": "morticia"}'), author='addams', tstart=timegm(now.timetuple()), tstop=timegm((now + timedelta(seconds=2)).timetuple()), rrule=None, enabled=True) self.pbm.compute_pbehaviors_filters() res = self.manager.get_watcher(watcher_id) self.assertEqual(res['state'], self.state) self.manager.compute_watchers() res = self.manager.get_watcher(watcher_id) self.assertEqual(res['state'], 0) sleep(3) self.pbm.compute_pbehaviors_filters() self.manager.compute_watchers() res = self.manager.get_watcher(watcher_id) self.assertEqual(res['state'], self.state)
class ComputeState(BaseTest): def setUp(self): super(ComputeState, self).setUp() pbehavior_storage = Middleware.get_middleware_by_uri( 'storage-default-testpbehavior://' ) filter_storage = Middleware.get_middleware_by_uri( 'storage-default-testalarmfilter://' ) config_storage = Middleware.get_middleware_by_uri( 'storage-default-testconfig://' ) config_storage.put_element( element={ '_id': 'test_config', 'crecord_type': 'statusmanagement', 'bagot_time': 3600, 'bagot_freq': 10, 'stealthy_time': 300, 'restore_event': True, 'auto_snooze': False, 'snooze_default_time': 300, }, _id='test_config' ) logger = Logger.get('test_pb', None, output_cls=OutputNull) config = Configuration.load(PBehaviorManager.CONF_PATH, Ini) self.pbm = PBehaviorManager(config=config, logger=logger, pb_storage=pbehavior_storage) self.pbm.context = self.context_graph_manager self.manager.pbehavior_manager = self.pbm conf = Configuration.load(Alerts.CONF_PATH, Ini) filter_ = {'crecord_type': 'statusmanagement'} config_data = EtherealData(collection=config_storage._backend, filter_=filter_) event_publisher = Mock(spec=StatEventPublisher) self.alert_manager = Alerts(config=conf, logger=logger, alerts_storage=self.alerts_storage, config_data=config_data, filter_storage=filter_storage, context_graph=self.context_graph_manager, watcher=self.manager, event_publisher=event_publisher) # Creating entity self.type_ = 'resource' self.name = 'morticia' entity = ContextGraph.create_entity_dict( id=self.name, etype=self.type_, name=self.name ) self.context_graph_manager.create_entity(entity) # Creating coresponding alarm event = { 'connector': self.type_, 'connector_name': 'connector_name', 'component': self.name, 'output': 'tadaTaDA tic tic', 'timestamp': 0 } alarm = self.alert_manager.make_alarm(self.name, event) self.state = 2 alarm = self.alert_manager.update_state(alarm, self.state, event) new_value = alarm[self.alert_manager.alerts_storage.VALUE] self.alert_manager.update_current_alarm(alarm, new_value) def tearDown(self): super(ComputeState, self).tearDown() self.pbm.pb_storage.remove_elements() def test_compute_state_issue427(self): # Aka: state desyncro watcher_id = 'addams' watcher = { '_id': watcher_id, 'mfilter': '{"name": {"$in": ["morticia"]}}', 'display_name': 'family' } self.assertTrue(self.manager.create_watcher(watcher)) res = self.manager.get_watcher(watcher_id) self.assertEqual(res['state'], self.state) # Creating pbehavior on it now = datetime.utcnow() self.pbm.create( name='addam', filter=loads('{"name": "morticia"}'), author='addams', tstart=timegm(now.timetuple()), tstop=timegm((now + timedelta(seconds=2)).timetuple()), rrule=None, enabled=True ) self.pbm.compute_pbehaviors_filters() res = self.manager.get_watcher(watcher_id) self.assertEqual(res['state'], self.state) self.manager.compute_watchers() res = self.manager.get_watcher(watcher_id) self.assertEqual(res['state'], 0) sleep(3) self.pbm.compute_pbehaviors_filters() self.manager.compute_watchers() res = self.manager.get_watcher(watcher_id) self.assertEqual(res['state'], self.state)