Exemple #1
0
    def start_fixture(self):
        """Set up config."""

        self.conf = None

        # Determine the database connection.
        db_url = None
        for engine in ENGINES:
            try:
                db_url = os.environ['AODH_TEST_%s_URL' % engine]
            except KeyError:
                pass
        if db_url is None:
            raise case.SkipTest('No database connection configured')

        service.prepare_service([])
        conf = fixture_config.Config().conf
        self.conf = conf
        opts.set_defaults(self.conf)
        conf.set_override('policy_file',
                          os.path.abspath('etc/aodh/policy.json'),
                          group='oslo_policy')

        database_name = '%s-%s' % (db_url, str(uuid.uuid4()))
        conf.set_override('alarm_connection', database_name, group='database')

        conf.set_override('pecan_debug', True, group='api')
Exemple #2
0
def expirer():
    service.prepare_service()

    if cfg.CONF.database.alarm_history_time_to_live > 0:
        LOG.debug("Clearing expired alarm history data")
        storage_conn = storage.get_connection_from_config(cfg.CONF, 'alarm')
        storage_conn.clear_expired_alarm_history_data(
            cfg.CONF.database.alarm_history_time_to_live)
    else:
        LOG.info(_LI("Nothing to clean, database alarm history time to live "
                     "is disabled"))
Exemple #3
0
    def setUp(self):
        super(TestAlarmEvaluationService, self).setUp()
        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.CONF.set_override('workers', 1, 'evaluator')
        self.setup_messaging(self.CONF)

        self.threshold_eval = mock.MagicMock()
        self._fake_conn = mock.Mock()
        self._fake_conn.get_alarms.return_value = []
        self._fake_pc = mock.Mock()
        self._fake_em = extension.ExtensionManager.make_test_instance([
            extension.Extension('gnocchi_aggregation_by_metrics_threshold',
                                None, None, self.threshold_eval),
        ])

        self.useFixture(
            fixtures.MockPatch('stevedore.extension.ExtensionManager',
                               return_value=self._fake_em))
        self.useFixture(
            fixtures.MockPatch('aodh.coordination.PartitionCoordinator',
                               return_value=self._fake_pc))
        self.useFixture(
            fixtures.MockPatch('aodh.storage.get_connection_from_config',
                               return_value=self._fake_conn))
Exemple #4
0
    def setUp(self):
        super(TestAlarmEvaluationService, self).setUp()
        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.setup_messaging(self.CONF)

        self.threshold_eval = mock.Mock()
        self.evaluators = extension.ExtensionManager.make_test_instance(
            [
                extension.Extension(
                    'threshold',
                    None,
                    None,
                    self.threshold_eval),
            ]
        )

        self.storage_conn = mock.MagicMock()
        self.svc = evaluator.AlarmEvaluationService(self.CONF)
        self.svc.tg = mock.Mock()
        self.svc.partition_coordinator = mock.MagicMock()
        p_coord = self.svc.partition_coordinator
        p_coord.extract_my_subset.side_effect = lambda _, x: x
        self.svc.evaluators = self.evaluators
        self.svc.supported_evaluators = ['threshold']
Exemple #5
0
    def setUp(self):
        super(TestBase, self).setUp()
        engine = urlparse.urlparse(self.db_url).scheme

        # NOTE(Alexei_987) Shortcut to skip expensive db setUp
        test_method = self._get_test_method()
        if (hasattr(test_method, '_run_with')
                and engine not in test_method._run_with):
            raise testcase.TestSkipped(
                'Test is not applicable for %s' % engine)

        conf = service.prepare_service([])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.CONF.set_override('connection', self.db_url, group="database")

        try:
            self.db_manager = self._get_driver_manager(engine)(self.CONF)
        except ValueError as exc:
            self.skipTest("missing driver manager: %s" % exc)
        self.useFixture(self.db_manager)

        self.CONF.set_override('connection', self.db_manager.url,
                               group="database")

        self.alarm_conn = storage.get_connection_from_config(self.CONF)
        self.alarm_conn.upgrade()

        self.useFixture(mockpatch.Patch(
            'aodh.storage.get_connection_from_config',
            side_effect=self._get_connection))
Exemple #6
0
    def setUp(self):
        super(TestBase, self).setUp()
        db_url = os.environ.get('AODH_TEST_STORAGE_URL',
                                'sqlite://').replace("mysql://",
                                                     "mysql+pymysql://")
        engine = urlparse.urlparse(db_url).scheme
        # In case some drivers have additional specification, for example:
        # PyMySQL will have scheme mysql+pymysql.
        self.engine = engine.split('+')[0]

        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.CONF.set_override('connection', db_url, group="database")

        manager = self.DRIVER_MANAGERS.get(self.engine)
        if not manager:
            self.skipTest("missing driver manager: %s" % self.engine)

        self.db_manager = manager(self.CONF)

        self.useFixture(self.db_manager)

        self.CONF.set_override('connection',
                               self.db_manager.url,
                               group="database")

        self.alarm_conn = storage.get_connection_from_config(self.CONF)
        self.alarm_conn.upgrade()

        self.useFixture(
            fixtures.MockPatch('aodh.storage.get_connection_from_config',
                               side_effect=self._get_connection))
Exemple #7
0
    def setUp(self):
        super(TestAlarmEvaluationService, self).setUp()
        conf = service.prepare_service([])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.setup_messaging(self.CONF)

        self.threshold_eval = mock.Mock()
        self.evaluators = extension.ExtensionManager.make_test_instance(
            [
                extension.Extension(
                    'threshold',
                    None,
                    None,
                    self.threshold_eval),
            ]
        )

        self.storage_conn = mock.MagicMock()
        self.svc = evaluator.AlarmEvaluationService(self.CONF)
        self.svc.tg = mock.Mock()
        self.svc.partition_coordinator = mock.MagicMock()
        p_coord = self.svc.partition_coordinator
        p_coord.extract_my_subset.side_effect = lambda _, x: x
        self.svc.evaluators = self.evaluators
        self.svc.supported_evaluators = ['threshold']
Exemple #8
0
    def setUp(self):
        super(TestBase, self).setUp()
        engine = urlparse.urlparse(self.db_url).scheme

        # NOTE(Alexei_987) Shortcut to skip expensive db setUp
        test_method = self._get_test_method()
        if (hasattr(test_method, '_run_with')
                and engine not in test_method._run_with):
            raise testcase.TestSkipped('Test is not applicable for %s' %
                                       engine)

        conf = service.prepare_service([])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.CONF.set_override('connection', self.db_url, group="database")

        try:
            self.db_manager = self._get_driver_manager(engine)(self.CONF)
        except ValueError as exc:
            self.skipTest("missing driver manager: %s" % exc)
        self.useFixture(self.db_manager)

        self.CONF.set_override('connection',
                               self.db_manager.url,
                               group="database")

        self.alarm_conn = storage.get_connection_from_config(self.CONF)
        self.alarm_conn.upgrade()

        self.useFixture(
            mockpatch.Patch('aodh.storage.get_connection_from_config',
                            side_effect=self._get_connection))
Exemple #9
0
    def setUp(self):
        super(TestBase, self).setUp()
        db_url = os.environ.get("AODH_TEST_STORAGE_URL", "sqlite://").replace("mysql://", "mysql+pymysql://")
        engine = urlparse.urlparse(db_url).scheme
        # In case some drivers have additional specification, for example:
        # PyMySQL will have scheme mysql+pymysql.
        self.engine = engine.split("+")[0]

        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.CONF.set_override("connection", db_url, group="database", enforce_type=True)

        manager = self.DRIVER_MANAGERS.get(self.engine)
        if not manager:
            self.skipTest("missing driver manager: %s" % self.engine)

        self.db_manager = manager(self.CONF)

        self.useFixture(self.db_manager)

        self.CONF.set_override("connection", self.db_manager.url, group="database", enforce_type=True)

        self.alarm_conn = storage.get_connection_from_config(self.CONF)
        self.alarm_conn.upgrade()

        self.useFixture(mockpatch.Patch("aodh.storage.get_connection_from_config", side_effect=self._get_connection))
Exemple #10
0
    def setUp(self):
        super(FunctionalTest, self).setUp()
        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.setup_messaging(self.CONF)

        self.CONF.set_override('auth_mode', None, group='api')
        self.app = webtest.TestApp(app.load_app(self.CONF))
Exemple #11
0
 def setUp(self):
     super(TestAlarmNotifier, self).setUp()
     conf = service.prepare_service([])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
     self.setup_messaging(self.CONF)
     self.service = notifier.AlarmNotifierService(self.CONF)
     self.useFixture(
         mockpatch.Patch('oslo_context.context.generate_request_id',
                         self._fake_generate_request_id))
Exemple #12
0
    def start_fixture(self):
        """Set up config."""

        self.conf = None
        self.conn = None

        # Determine the database connection.
        db_url = os.environ.get(
            'AODH_TEST_STORAGE_URL',
            os.environ.get("OVERTEST_URL",
                           'sqlite://').replace("mysql://",
                                                "mysql+pymysql://"))
        if not db_url:
            raise case.SkipTest('No database connection configured')

        conf = service.prepare_service([], config_files=[])
        # NOTE(jd): prepare_service() is called twice: first by load_app() for
        # Pecan, then Pecan calls pastedeploy, which starts the app, which has
        # no way to pass the conf object so that Paste apps calls again
        # prepare_service. In real life, that's not a problem, but here we want
        # to be sure that the second time the same conf object is returned
        # since we tweaked it. To that, once we called prepare_service() we
        # mock it so it returns the same conf object.
        self.prepare_service = service.prepare_service
        service.prepare_service = mock.Mock()
        service.prepare_service.return_value = conf
        conf = fixture_config.Config(conf).conf
        self.conf = conf
        opts.set_defaults(self.conf)

        conf.set_override('policy_file',
                          os.path.abspath('aodh/tests/open-policy.json'),
                          group='oslo_policy',
                          enforce_type=True)
        conf.set_override(
            'paste_config',
            os.path.abspath('aodh/tests/functional/gabbi/gabbi_paste.ini'),
            group='api',
        )

        conf.set_override('pecan_debug', True, group='api', enforce_type=True)

        parsed_url = list(urlparse.urlparse(db_url))
        parsed_url[2] += '-%s' % str(uuid.uuid4()).replace('-', '')
        db_url = urlparse.urlunparse(parsed_url)

        conf.set_override('connection',
                          db_url,
                          group='database',
                          enforce_type=True)

        if (parsed_url[0].startswith("mysql")
                or parsed_url[0].startswith("postgresql")):
            sqlalchemy_utils.create_database(conf.database.connection)

        self.conn = storage.get_connection_from_config(self.conf)
        self.conn.upgrade()
Exemple #13
0
def conversion():
    confirm = moves.input("This tool is used for converting the combination "
                          "alarms to composite alarms, please type 'yes' to "
                          "confirm: ")
    if confirm != 'yes':
        print("Alarm conversion aborted!")
        return
    args = get_parser().parse_args()
    conf = service.prepare_service()
    conn = storage.get_connection_from_config(conf)
    combination_alarms = list(conn.get_alarms(alarm_type='combination',
                                              alarm_id=args.alarm_id or None))
    count = 0
    for alarm in combination_alarms:
        new_name = 'From-combination: %s' % alarm.alarm_id
        n_alarm = list(conn.get_alarms(name=new_name, alarm_type='composite'))
        if n_alarm:
            LOG.warning(_LW('Alarm %(alarm)s has been already converted as '
                            'composite alarm: %(n_alarm_id)s, skipped.'),
                        {'alarm': alarm.alarm_id,
                         'n_alarm_id': n_alarm[0].alarm_id})
            continue
        try:
            composite_rule = _generate_composite_rule(conn, alarm)
        except DependentAlarmNotFound as e:
            LOG.warning(_LW('The dependent alarm %(dep_alarm)s of alarm %'
                            '(com_alarm)s not found, skipped.'),
                        {'com_alarm': e.com_alarm_id,
                         'dep_alarm': e.dependent_alarm_id})
            continue
        except UnsupportedSubAlarmType as e:
            LOG.warning(_LW('Alarm conversion from combination to composite '
                            'only support combination alarms depending '
                            'threshold alarms, the type of alarm %(alarm)s '
                            'is: %(type)s, skipped.'),
                        {'alarm': e.sub_alarm_id, 'type': e.sub_alarm_type})
            continue
        new_alarm = models.Alarm(**alarm.as_dict())
        new_alarm.alarm_id = str(uuid.uuid4())
        new_alarm.name = new_name
        new_alarm.type = 'composite'
        new_alarm.description = ('composite alarm converted from combination '
                                 'alarm: %s' % alarm.alarm_id)
        new_alarm.rule = composite_rule
        new_alarm.timestamp = datetime.datetime.now()
        conn.create_alarm(new_alarm)
        LOG.info(_LI('End Converting combination alarm %(s_alarm)s to '
                     'composite alarm %(d_alarm)s'),
                 {'s_alarm': alarm.alarm_id, 'd_alarm': new_alarm.alarm_id})
        count += 1
    if args.delete_combination_alarm:
        for alarm in combination_alarms:
            LOG.info(_LI('Deleting the combination alarm %s...'),
                     alarm.alarm_id)
            conn.delete_alarm(alarm.alarm_id)
    LOG.info(_LI('%s combination alarms have been converted to composite '
                 'alarms.'), count)
Exemple #14
0
    def start_fixture(self):
        """Set up config."""

        self.conf = None
        self.conn = None

        # Determine the database connection.
        db_url = os.environ.get(
            'AODH_TEST_STORAGE_URL', "").replace(
                "mysql://", "mysql+pymysql://")
        if not db_url:
            self.fail('No database connection configured')

        conf = service.prepare_service([], config_files=[])
        # NOTE(jd): prepare_service() is called twice: first by load_app() for
        # Pecan, then Pecan calls pastedeploy, which starts the app, which has
        # no way to pass the conf object so that Paste apps calls again
        # prepare_service. In real life, that's not a problem, but here we want
        # to be sure that the second time the same conf object is returned
        # since we tweaked it. To that, once we called prepare_service() we
        # mock it so it returns the same conf object.
        self.prepare_service = service.prepare_service
        service.prepare_service = mock.Mock()
        service.prepare_service.return_value = conf
        conf = fixture_config.Config(conf).conf
        self.conf = conf
        opts.set_defaults(self.conf)

        conf.set_override('policy_file',
                          os.path.abspath(
                              'aodh/tests/open-policy.json'),
                          group='oslo_policy',
                          enforce_type=True)
        conf.set_override(
            'paste_config',
            os.path.abspath('aodh/tests/functional/gabbi/gabbi_paste.ini'),
            group='api',
        )

        conf.set_override('pecan_debug', True, group='api',
                          enforce_type=True)

        parsed_url = urlparse.urlparse(db_url)
        if parsed_url.scheme != 'sqlite':
            parsed_url = list(parsed_url)
            parsed_url[2] += '-%s' % str(uuid.uuid4()).replace('-', '')
            db_url = urlparse.urlunparse(parsed_url)

        conf.set_override('connection', db_url, group='database',
                          enforce_type=True)

        if (parsed_url[0].startswith("mysql")
           or parsed_url[0].startswith("postgresql")):
            sqlalchemy_utils.create_database(conf.database.connection)

        self.conn = storage.get_connection_from_config(self.conf)
        self.conn.upgrade()
Exemple #15
0
 def setUp(self):
     super(TestAlarmNotifier, self).setUp()
     conf = service.prepare_service([])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
     self.setup_messaging(self.CONF)
     self.service = notifier.AlarmNotifierService(self.CONF)
     self.useFixture(mockpatch.Patch(
         'oslo_context.context.generate_request_id',
         self._fake_generate_request_id))
Exemple #16
0
    def start_fixture(self):
        """Set up config."""

        global LOAD_APP_KWARGS

        self.conf = None
        self.conn = None

        # Determine the database connection.
        db_url = os.environ.get('AODH_TEST_STORAGE_URL',
                                "").replace("mysql://", "mysql+pymysql://")
        if not db_url:
            self.fail('No database connection configured')

        conf = service.prepare_service([], config_files=[])
        # NOTE(jd): prepare_service() is called twice: first by load_app() for
        # Pecan, then Pecan calls pastedeploy, which starts the app, which has
        # no way to pass the conf object so that Paste apps calls again
        # prepare_service. In real life, that's not a problem, but here we want
        # to be sure that the second time the same conf object is returned
        # since we tweaked it. To that, once we called prepare_service() we
        # mock it so it returns the same conf object.
        self.prepare_service = service.prepare_service
        service.prepare_service = mock.Mock()
        service.prepare_service.return_value = conf
        conf = fixture_config.Config(conf).conf
        self.conf = conf
        opts.set_defaults(self.conf)

        conf.set_override('policy_file',
                          os.path.abspath('aodh/tests/open-policy.json'),
                          group='oslo_policy',
                          enforce_type=True)
        conf.set_override('auth_mode', None, group='api')

        parsed_url = urlparse.urlparse(db_url)
        if parsed_url.scheme != 'sqlite':
            parsed_url = list(parsed_url)
            parsed_url[2] += '-%s' % uuidutils.generate_uuid(dashed=False)
            db_url = urlparse.urlunparse(parsed_url)

        conf.set_override('connection',
                          db_url,
                          group='database',
                          enforce_type=True)

        if (parsed_url[0].startswith("mysql")
                or parsed_url[0].startswith("postgresql")):
            sqlalchemy_utils.create_database(conf.database.connection)

        self.conn = storage.get_connection_from_config(self.conf)
        self.conn.upgrade()

        LOAD_APP_KWARGS = {
            'conf': conf,
        }
Exemple #17
0
    def setUp(self):
        super(TestEventAlarmEvaluationService, self).setUp()

        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.setup_messaging(self.CONF)
        self.service = event.EventAlarmEvaluationService(self.CONF)
        self._msg_notifier = oslo_messaging.Notifier(
            self.transport, topics=['alarm.all'], driver='messaging',
            publisher_id='test-publisher')
Exemple #18
0
    def setUp(self):
        super(TestEventAlarmEvaluationService, self).setUp()

        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.storage_conn = mock.MagicMock()
        self.setup_messaging(self.CONF)
        with mock.patch('aodh.storage.get_connection_from_config',
                        return_value=self.storage_conn):
            self.service = event.EventAlarmEvaluationService(self.CONF)
Exemple #19
0
    def setUp(self):
        super(FunctionalTest, self).setUp()
        conf = service.prepare_service([])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.setup_messaging(self.CONF)

        self.CONF.set_override("policy_file",
                               self.path_get('etc/aodh/policy.json'),
                               group='oslo_policy')
        self.app = self._make_app()
Exemple #20
0
 def setUp(self):
     super(TestAlarmNotifier, self).setUp()
     conf = service.prepare_service(argv=[], config_files=[])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
     self.setup_messaging(self.CONF)
     self.zaqar = FakeZaqarClient(self)
     self.useFixture(mockpatch.Patch(
         'aodh.notifier.zaqar.ZaqarAlarmNotifier.get_zaqar_client',
         return_value=self.zaqar))
     self.service = notifier.AlarmNotifierService(self.CONF)
Exemple #21
0
    def setUp(self):
        super(FunctionalTest, self).setUp()
        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.setup_messaging(self.CONF)

        self.CONF.set_override('policy_file',
                               os.path.abspath('etc/aodh/policy.json'),
                               group='oslo_policy', enforce_type=True)
        self.app = self._make_app()
    def setUp(self):
        super(TestEventAlarmEvaluationService, self).setUp()

        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.storage_conn = mock.MagicMock()
        self.setup_messaging(self.CONF)
        with mock.patch('aodh.storage.get_connection_from_config',
                        return_value=self.storage_conn):
            self.service = event.EventAlarmEvaluationService(self.CONF)
Exemple #23
0
    def setUp(self):
        super(FunctionalTest, self).setUp()
        conf = service.prepare_service([])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.setup_messaging(self.CONF)

        self.CONF.set_override("auth_version", "v2.0", 'keystone_authtoken')
        self.CONF.set_override("policy_file",
                               self.path_get('etc/aodh/policy.json'),
                               group='oslo_policy')
        self.app = self._make_app()
Exemple #24
0
def expirer():
    conf = service.prepare_service()

    if conf.database.alarm_history_time_to_live > 0:
        LOG.debug("Clearing expired alarm history data")
        storage_conn = storage.get_connection_from_config(conf)
        storage_conn.clear_expired_alarm_history_data(
            conf.database.alarm_history_time_to_live)
    else:
        LOG.info("Nothing to clean, database alarm history time to live "
                 "is disabled")
Exemple #25
0
    def setUp(self):
        super(TestEventAlarmEvaluationService, self).setUp()

        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.setup_messaging(self.CONF)
        self.service = event.EventAlarmEvaluationService(self.CONF)
        self._msg_notifier = oslo_messaging.Notifier(
            self.transport,
            topics=['alarm.all'],
            driver='messaging',
            publisher_id='test-publisher')
Exemple #26
0
 def setUp(self):
     super(TestKeystoneClient, self).setUp()
     self.config = fixture_config.Config(
         service.prepare_service(argv=[], config_files=[]))
     self.config.setUp()
     self.config.register_opts([
         cfg.StrOpt('user_domain_id', default=""),
         cfg.StrOpt('user_domain_name', default=""),
         cfg.StrOpt('username', default="username"),
         cfg.StrOpt('password', default="password"),
         cfg.StrOpt('auth_url', default="testdomain")
     ], "service_credentials")
 def setUp(self):
     super(TestAlarmNotifier, self).setUp()
     conf = service.prepare_service(argv=[], config_files=[])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
     self.setup_messaging(self.CONF)
     self.zaqar = FakeZaqarClient(self)
     self.useFixture(mockpatch.Patch(
         'aodh.notifier.zaqar.ZaqarAlarmNotifier.get_zaqar_client',
         return_value=self.zaqar))
     self.service = notifier.AlarmNotifierService(self.CONF)
     self.useFixture(mockpatch.Patch(
         'oslo_context.context.generate_request_id',
         self._fake_generate_request_id))
Exemple #28
0
 def setUp(self):
     super(TestEvaluatorBase, self).setUp()
     conf = service.prepare_service(argv=[], config_files=[])
     self.conf = self.useFixture(fixture.Config(conf)).conf
     self.evaluator = self.EVALUATOR(self.conf)
     self.notifier = mock.MagicMock()
     self.evaluator.notifier = self.notifier
     self.storage_conn = mock.MagicMock()
     self.evaluator.storage_conn = self.storage_conn
     self.evaluator._ks_client = mock.Mock(user_id='fake_user_id',
                                           project_id='fake_project_id',
                                           auth_token='fake_token')
     self.prepare_alarms()
Exemple #29
0
    def start_fixture(self):
        """Set up config."""

        self.conf = None

        # Determine the database connection.
        db_url = os.environ.get(
            'AODH_TEST_STORAGE_URL',
            os.environ.get(
                "OVERTEST_URL", 'sqlite://').replace(
                    "mysql://", "mysql+pymysql://"))
        if not db_url:
            raise case.SkipTest('No database connection configured')

        engine = urlparse.urlparse(db_url).scheme
        if engine not in ENGINES:
            raise case.SkipTest('Database engine not supported')

        conf = service.prepare_service([], config_files=[])
        # NOTE(jd): prepare_service() is called twice: first by load_app() for
        # Pecan, then Pecan calls pastedeploy, which starts the app, which has
        # no way to pass the conf object so that Paste apps calls again
        # prepare_service. In real life, that's not a problem, but here we want
        # to be sure that the second time the same conf object is returned
        # since we tweaked it. To that, once we called prepare_service() we
        # mock it so it returns the same conf object.
        self.prepare_service = service.prepare_service
        service.prepare_service = mock.Mock()
        service.prepare_service.return_value = conf
        conf = fixture_config.Config(conf).conf
        self.conf = conf
        opts.set_defaults(self.conf)

        conf.set_override('policy_file',
                          os.path.abspath(
                              'aodh/tests/open-policy.json'),
                          group='oslo_policy',
                          enforce_type=True)
        conf.set_override(
            'paste_config',
            os.path.abspath('aodh/tests/functional/gabbi/gabbi_paste.ini'),
            group='api',
        )

        database_name = '%s-%s' % (db_url, str(uuid.uuid4()))
        conf.set_override('connection', database_name, group='database',
                          enforce_type=True)

        conf.set_override('pecan_debug', True, group='api',
                          enforce_type=True)
Exemple #30
0
 def setUp(self):
     super(TestAlarmNotifier, self).setUp()
     conf = service.prepare_service(argv=[], config_files=[])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
     self.setup_messaging(self.CONF)
     self._msg_notifier = oslo_messaging.Notifier(
         self.transport, topics=['alarming'], driver='messaging',
         publisher_id='testpublisher')
     self.zaqar = FakeZaqarClient(self)
     self.useFixture(fixtures.MockPatch(
         'aodh.notifier.zaqar.ZaqarAlarmNotifier.get_zaqar_client',
         return_value=self.zaqar))
     self.service = notifier.AlarmNotifierService(0, self.CONF)
     self.addCleanup(self.service.terminate)
Exemple #31
0
 def setUp(self):
     super(TestAlarmNotifier, self).setUp()
     conf = service.prepare_service(argv=[], config_files=[])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
     self.setup_messaging(self.CONF)
     self._msg_notifier = oslo_messaging.Notifier(
         self.transport, topics=["alarming"], driver="messaging", publisher_id="testpublisher"
     )
     self.zaqar = FakeZaqarClient(self)
     self.useFixture(
         mockpatch.Patch("aodh.notifier.zaqar.ZaqarAlarmNotifier.get_zaqar_client", return_value=self.zaqar)
     )
     self.service = notifier.AlarmNotifierService(0, self.CONF)
     self.addCleanup(self.service.terminate)
Exemple #32
0
    def setUp(self):
        super(TestAlarmEvaluationService, self).setUp()
        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.CONF.set_override('workers', 1, 'evaluator')
        self.setup_messaging(self.CONF)

        self.threshold_eval = mock.MagicMock()
        self.evaluators = extension.ExtensionManager.make_test_instance([
            extension.Extension('threshold', None, None, self.threshold_eval),
        ])

        self.svc = evaluator.AlarmEvaluationService(self.CONF)
        self.svc.tg = mock.Mock()
 def setUp(self):
     sql_conf = service.prepare_service(argv=[], config_files=[])
     self.sql_conf = self.useFixture(fixture_config.Config(sql_conf)).conf
     # using sqlite to represent the type of SQL dbs
     self.sql_conf.set_override('connection', "sqlite://",
                                group="database", enforce_type=True)
     self.sql_namager = tests_db.SQLiteManager(self.sql_conf)
     self.useFixture(self.sql_namager)
     self.sql_conf.set_override('connection', self.sql_namager.url,
                                group="database", enforce_type=True)
     self.sql_alarm_conn = storage.get_connection_from_config(self.sql_conf)
     self.sql_alarm_conn.upgrade()
     super(TestDataMigration, self).setUp()
     self.add_some_alarms()
     self._add_some_alarm_changes()
Exemple #34
0
 def setUp(self):
     super(TestEvaluatorBase, self).setUp()
     conf = service.prepare_service([])
     self.conf = self.useFixture(fixture.Config(conf)).conf
     self.api_client = mock.Mock()
     self.useFixture(mockpatch.Patch('ceilometerclient.client.get_client',
                                     return_value=self.api_client))
     self.notifier = mock.MagicMock()
     self.evaluator = self.EVALUATOR(self.conf, self.notifier)
     self.storage_conn = mock.MagicMock()
     self.evaluator.storage_conn = self.storage_conn
     self.evaluator._ks_client = mock.Mock(user_id='fake_user_id',
                                           project_id='fake_project_id',
                                           auth_token='fake_token')
     self.prepare_alarms()
Exemple #35
0
 def setUp(self):
     super(TestEvaluatorBase, self).setUp()
     conf = service.prepare_service([])
     self.conf = self.useFixture(fixture.Config(conf)).conf
     self.api_client = mock.Mock()
     self.useFixture(
         mockpatch.Patch('ceilometerclient.client.get_client',
                         return_value=self.api_client))
     self.notifier = mock.MagicMock()
     self.evaluator = self.EVALUATOR(self.conf, self.notifier)
     self.storage_conn = mock.MagicMock()
     self.evaluator.storage_conn = self.storage_conn
     self.evaluator._ks_client = mock.Mock(user_id='fake_user_id',
                                           project_id='fake_project_id',
                                           auth_token='fake_token')
     self.prepare_alarms()
Exemple #36
0
    def setUp(self):
        super(TestAlarmEvaluationService, self).setUp()
        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.CONF.set_override("workers", 1, "evaluator")
        self.setup_messaging(self.CONF)

        self.threshold_eval = mock.MagicMock()
        self._fake_conn = mock.Mock()
        self._fake_pc = mock.Mock()
        self._fake_em = extension.ExtensionManager.make_test_instance(
            [extension.Extension("threshold", None, None, self.threshold_eval)]
        )

        self.useFixture(mockpatch.Patch("stevedore.extension.ExtensionManager", return_value=self._fake_em))
        self.useFixture(mockpatch.Patch("aodh.coordination.PartitionCoordinator", return_value=self._fake_pc))
        self.useFixture(mockpatch.Patch("aodh.storage.get_connection_from_config", return_value=self._fake_conn))
Exemple #37
0
    def setUp(self):
        super(TestBase, self).setUp()
        db_url = os.environ.get(
            'AODH_TEST_STORAGE_URL',
            os.environ.get("OVERTEST_URL",
                           'sqlite://').replace("mysql://",
                                                "mysql+pymysql://"))
        engine = urlparse.urlparse(db_url).scheme
        # In case some drivers have additional specification, for example:
        # PyMySQL will have scheme mysql+pymysql.
        engine = engine.split('+')[0]

        # NOTE(Alexei_987) Shortcut to skip expensive db setUp
        test_method = self._get_test_method()
        if (hasattr(test_method, '_run_with')
                and engine not in test_method._run_with):
            raise testcase.TestSkipped('Test is not applicable for %s' %
                                       engine)

        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.CONF.set_override('connection',
                               db_url,
                               group="database",
                               enforce_type=True)

        manager = self.DRIVER_MANAGERS.get(engine)
        if not manager:
            self.skipTest("missing driver manager: %s" % engine)

        self.db_manager = manager(self.CONF)

        self.useFixture(self.db_manager)

        self.CONF.set_override('connection',
                               self.db_manager.url,
                               group="database",
                               enforce_type=True)

        self.alarm_conn = storage.get_connection_from_config(self.CONF)
        self.alarm_conn.upgrade()

        self.useFixture(
            mockpatch.Patch('aodh.storage.get_connection_from_config',
                            side_effect=self._get_connection))
    def setUp(self):
        super(TestRPCAlarmNotifier, self).setUp()
        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.setup_messaging(self.CONF)

        self.notifier_server = FakeNotifier(self.CONF, self.transport)
        self.notifier = rpc.RPCAlarmNotifier(self.CONF)
        self.alarms = [
            alarms.Alarm(None, info={
                'name': 'instance_running_hot',
                'meter_name': 'cpu_util',
                'comparison_operator': 'gt',
                'threshold': 80.0,
                'evaluation_periods': 5,
                'statistic': 'avg',
                'state': 'ok',
                'ok_actions': ['http://host:8080/path'],
                'user_id': 'foobar',
                'project_id': 'snafu',
                'period': 60,
                'alarm_id': str(uuid.uuid4()),
                'severity': 'critical',
                'matching_metadata':{'resource_id':
                                     'my_instance'}
            }),
            alarms.Alarm(None, info={
                'name': 'group_running_idle',
                'meter_name': 'cpu_util',
                'comparison_operator': 'le',
                'threshold': 10.0,
                'statistic': 'max',
                'evaluation_periods': 4,
                'state': 'insufficient data',
                'insufficient_data_actions': ['http://other_host/path'],
                'user_id': 'foobar',
                'project_id': 'snafu',
                'period': 300,
                'alarm_id': str(uuid.uuid4()),
                'severity': 'critical',
                'matching_metadata':{'metadata.user_metadata.AS':
                                     'my_group'}
            }),
        ]
    def setUp(self):
        super(TestBase, self).setUp()
        db_url = os.environ.get(
            'AODH_TEST_STORAGE_URL',
            os.environ.get(
                "OVERTEST_URL", 'sqlite://').replace(
                    "mysql://", "mysql+pymysql://"))
        engine = urlparse.urlparse(db_url).scheme
        # In case some drivers have additional specification, for example:
        # PyMySQL will have scheme mysql+pymysql.
        engine = engine.split('+')[0]

        # NOTE(Alexei_987) Shortcut to skip expensive db setUp
        test_method = self._get_test_method()
        if (hasattr(test_method, '_run_with')
                and engine not in test_method._run_with):
            raise testcase.TestSkipped(
                'Test is not applicable for %s' % engine)

        conf = service.prepare_service(argv=[], config_files=[])
        self.CONF = self.useFixture(fixture_config.Config(conf)).conf
        self.CONF.set_override('connection', db_url, group="database",
                               enforce_type=True)

        manager = self.DRIVER_MANAGERS.get(engine)
        if not manager:
            self.skipTest("missing driver manager: %s" % engine)

        self.db_manager = manager(self.CONF)

        self.useFixture(self.db_manager)

        self.CONF.set_override('connection', self.db_manager.url,
                               group="database", enforce_type=True)

        self.alarm_conn = storage.get_connection_from_config(self.CONF)
        self.alarm_conn.upgrade()

        self.useFixture(mockpatch.Patch(
            'aodh.storage.get_connection_from_config',
            side_effect=self._get_connection))
Exemple #40
0
    def start_fixture(self):
        """Set up config."""

        self.conf = None

        # Determine the database connection.
        db_url = None
        for engine in ENGINES:
            try:
                db_url = os.environ['AODH_TEST_%s_URL' % engine]
            except KeyError:
                pass
        if db_url is None:
            raise case.SkipTest('No database connection configured')

        conf = service.prepare_service([])
        # NOTE(jd): prepare_service() is called twice: first by load_app() for
        # Pecan, then Pecan calls pastedeploy, which starts the app, which has
        # no way to pass the conf object so that Paste apps calls again
        # prepare_service. In real life, that's not a problem, but here we want
        # to be sure that the second time the same conf object is returned
        # since we tweaked it. To that, once we called prepare_service() we
        # mock it so it returns the same conf object.
        self.prepare_service = service.prepare_service
        service.prepare_service = mock.Mock()
        service.prepare_service.return_value = conf
        conf = fixture_config.Config(conf).conf
        self.conf = conf
        opts.set_defaults(self.conf)
        conf.set_override('policy_file',
                          os.path.abspath('etc/aodh/policy.json'),
                          group='oslo_policy')

        database_name = '%s-%s' % (db_url, str(uuid.uuid4()))
        conf.set_override('connection', database_name, group='database')

        conf.set_override('pecan_debug', True, group='api')
Exemple #41
0
    def start_fixture(self):
        """Set up config."""

        self.conf = None

        # Determine the database connection.
        db_url = None
        for engine in ENGINES:
            try:
                db_url = os.environ['AODH_TEST_%s_URL' % engine]
            except KeyError:
                pass
        if db_url is None:
            raise case.SkipTest('No database connection configured')

        conf = service.prepare_service([])
        # NOTE(jd): prepare_service() is called twice: first by load_app() for
        # Pecan, then Pecan calls pastedeploy, which starts the app, which has
        # no way to pass the conf object so that Paste apps calls again
        # prepare_service. In real life, that's not a problem, but here we want
        # to be sure that the second time the same conf object is returned
        # since we tweaked it. To that, once we called prepare_service() we
        # mock it so it returns the same conf object.
        self.prepare_service = service.prepare_service
        service.prepare_service = mock.Mock()
        service.prepare_service.return_value = conf
        conf = fixture_config.Config(conf).conf
        self.conf = conf
        opts.set_defaults(self.conf)
        conf.set_override('policy_file',
                          os.path.abspath('etc/aodh/policy.json'),
                          group='oslo_policy')

        database_name = '%s-%s' % (db_url, str(uuid.uuid4()))
        conf.set_override('connection', database_name, group='database')

        conf.set_override('pecan_debug', True, group='api')
Exemple #42
0
def expirer():
    conf = service.prepare_service()

    if conf.database.alarm_history_time_to_live > 0:
        LOG.debug("Clearing expired alarm history data")
        conn = storage.get_connection_from_config(conf)
        max_count = conf.database.alarm_histories_delete_batch_size
        try:
            if max_count > 0:
                conn.clear_expired_alarm_history_data(
                    conf.database.alarm_history_time_to_live,
                    max_count)
            else:
                deleted = max_count = 100
                while deleted and deleted > 0:
                    deleted = conn.clear_expired_alarm_history_data(
                        conf.database.alarm_history_time_to_live,
                        max_count)
        except TypeError:
            LOG.warning("Storage driver does not support "
                        "'alarm_histories_delete_batch_size' config option.")
    else:
        LOG.info("Nothing to clean, database alarm history time to live "
                 "is disabled")
Exemple #43
0
 def setUp(self):
     super(TestApp, self).setUp()
     conf = service.prepare_service([])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
Exemple #44
0
 def setUp(self):
     super(TestApp, self).setUp()
     conf = service.prepare_service(argv=[], config_files=[])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
Exemple #45
0
 def setUp(self):
     super(TestPartitioning, self).setUp()
     conf = service.prepare_service(argv=[], config_files=[])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
     self.shared_storage = {}
Exemple #46
0
def evaluator():
    conf = service.prepare_service()
    os_service.launch(conf, evaluator_svc.AlarmEvaluationService(conf),
                      workers=conf.evaluator.workers).wait()
def dbsync():
    conf = service.prepare_service()
    storage.get_connection_from_config(conf).upgrade()
Exemple #48
0
def dbsync():
    conf = service.prepare_service()
    storage.get_connection_from_config(conf).upgrade()
Exemple #49
0
 def setUp(self):
     super(TestAlarmNotifierService, self).setUp()
     conf = service.prepare_service(argv=[], config_files=[])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
     self.setup_messaging(self.CONF)
Exemple #50
0
 def setUp(self):
     super(TestEventAlarmEvaluationService, self).setUp()
     conf = service.prepare_service(argv=[], config_files=[])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
     self.CONF.set_override("batch_size", 2, 'listener')
     self.setup_messaging(self.CONF)
Exemple #51
0
def listener():
    conf = service.prepare_service()
    os_service.launch(conf, event_svc.EventAlarmEvaluationService(conf),
                      workers=conf.listener.workers).wait()
Exemple #52
0
def main():
    conf = service.prepare_service()
    app.build_server(conf)
Exemple #53
0
 def setUp(self):
     super(TestAlarmNotifierService, self).setUp()
     conf = service.prepare_service(argv=[], config_files=[])
     self.CONF = self.useFixture(fixture_config.Config(conf)).conf
     self.setup_messaging(self.CONF)
Exemple #54
0
def evaluator():
    conf = service.prepare_service()
    os_service.launch(conf, evaluator_svc.AlarmEvaluationService(conf)).wait()
Exemple #55
0
def _app():
    conf = service.prepare_service()
    return setup_app(conf=conf)
Exemple #56
0
def notifier():
    conf = service.prepare_service()
    os_service.launch(conf, notifier_svc.AlarmNotifierService(conf),
                      workers=conf.notifier.workers).wait()