Esempio n. 1
0
    def _get_log(self, req, context, body):
        """Get current log levels for services."""
        prefix = body.get('prefix')
        binaries, services = self._log_params_binaries_services(context, body)

        result = []

        log_req = objects.LogLevel(context, prefix=prefix)

        # Avoid showing constants if 'server' is set.
        server_filter = body.get('server')
        if not server_filter or server_filter == CONF.host:
            if constants.API_BINARY in binaries:
                levels = utils.get_log_levels(prefix)
                result.append({'host': CONF.host,
                               'binary': constants.API_BINARY,
                               'levels': levels})
        for service in services:
            levels = self.rpc_apis[service.binary].get_log_levels(context,
                                                                  service,
                                                                  log_req)
            result.append({'host': service.host,
                           'binary': service.binary,
                           'levels': {le.prefix: le.level for le in levels}})

        return {'log_levels': result}
Esempio n. 2
0
    def test__set_log(self, backup_rpc_mock, vol_rpc_mock, sch_rpc_mock,
                      set_log_mock, get_all_mock, get_log_mock):
        services = [
            objects.Service(self.context, binary=constants.SCHEDULER_BINARY),
            objects.Service(self.context, binary=constants.VOLUME_BINARY),
            objects.Service(self.context, binary=constants.BACKUP_BINARY),
        ]
        get_all_mock.return_value = services
        url = '/v3/%s/os-services/set-log' % fake.PROJECT_ID
        req = fakes.HTTPRequest.blank(url)
        body = {'binary': '*', 'prefix': 'eventlet.', 'level': 'debug'}
        log_level = objects.LogLevel(prefix=body['prefix'],
                                     level=body['level'])
        with mock.patch('cinder.objects.LogLevel') as log_level_mock:
            log_level_mock.return_value = log_level
            res = self.controller._set_log(req,
                                           mock.sentinel.context,
                                           body=body)
            log_level_mock.assert_called_once_with(mock.sentinel.context,
                                                   prefix=body['prefix'],
                                                   level=body['level'])

        self.assertEqual(202, res.status_code)

        set_log_mock.assert_called_once_with(body['prefix'], body['level'])
        sch_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                             services[0], log_level)
        vol_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                             services[1], log_level)
        backup_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                                services[2], log_level)
        get_log_mock.assert_called_once_with(body['level'])
Esempio n. 3
0
 def get_log_levels(self, context, log_request):
     levels = utils.get_log_levels(log_request.prefix)
     log_levels = [
         objects.LogLevel(context, prefix=prefix, level=level)
         for prefix, level in levels.items()
     ]
     return objects.LogLevelList(context, objects=log_levels)
Esempio n. 4
0
    def _get_log(self, context, body):
        """Get current log levels for services."""
        prefix = body.get('prefix')
        binaries, services = self._log_params_binaries_services(context, body)

        result = []

        log_req = objects.LogLevel(context, prefix=prefix)

        if constants.API_BINARY in binaries:
            levels = utils.get_log_levels(prefix)
            result.append({
                'host': CONF.host,
                'binary': constants.API_BINARY,
                'levels': levels
            })
        for service in services:
            levels = self.rpc_apis[service.binary].get_log_levels(
                context, service, log_req)
            result.append({
                'host': service.host,
                'binary': service.binary,
                'levels': {l.prefix: l.level
                           for l in levels}
            })

        return {'log_levels': result}
Esempio n. 5
0
    def test__set_log(self, backup_rpc_mock, vol_rpc_mock, sch_rpc_mock,
                      set_log_mock, get_all_mock, get_log_mock):
        services = [
            objects.Service(self.context, binary='cinder-scheduler'),
            objects.Service(self.context, binary='cinder-volume'),
            objects.Service(self.context, binary='cinder-backup'),
        ]
        get_all_mock.return_value = services
        body = {'binary': '*', 'prefix': 'eventlet.', 'level': 'debug'}
        log_level = objects.LogLevel(prefix=body['prefix'],
                                     level=body['level'])
        with mock.patch('cinder.objects.LogLevel') as log_level_mock:
            log_level_mock.return_value = log_level
            res = self.controller._set_log(mock.sentinel.context, body)
            log_level_mock.assert_called_once_with(mock.sentinel.context,
                                                   prefix=body['prefix'],
                                                   level=body['level'])

        self.assertEqual(202, res.status_code)

        set_log_mock.assert_called_once_with(body['prefix'], body['level'])
        sch_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                             services[0], log_level)
        vol_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                             services[1], log_level)
        backup_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                                services[2], log_level)
        get_log_mock.assert_called_once_with(body['level'])
Esempio n. 6
0
    def test__get_log(self, backup_rpc_mock, vol_rpc_mock, sch_rpc_mock,
                      get_log_mock, get_all_mock):
        get_log_mock.return_value = mock.sentinel.api_levels
        backup_rpc_mock.return_value = [
            objects.LogLevel(prefix='p1', level='l1'),
            objects.LogLevel(prefix='p2', level='l2')
        ]
        vol_rpc_mock.return_value = [
            objects.LogLevel(prefix='p3', level='l3'),
            objects.LogLevel(prefix='p4', level='l4')
        ]
        sch_rpc_mock.return_value = [
            objects.LogLevel(prefix='p5', level='l5'),
            objects.LogLevel(prefix='p6', level='l6')
        ]

        services = [
            objects.Service(self.context, binary=constants.SCHEDULER_BINARY,
                            host='host'),
            objects.Service(self.context, binary=constants.VOLUME_BINARY,
                            host='host@backend#pool'),
            objects.Service(self.context, binary=constants.BACKUP_BINARY,
                            host='host'),
        ]
        get_all_mock.return_value = services
        url = '/v3/%s/os-services/get-log' % fake.PROJECT_ID
        req = fakes.HTTPRequest.blank(url)
        body = {'binary': '*', 'prefix': 'eventlet.'}

        log_level = objects.LogLevel(prefix=body['prefix'])
        with mock.patch('cinder.objects.LogLevel') as log_level_mock:
            log_level_mock.return_value = log_level
            res = self.controller._get_log(req, mock.sentinel.context,
                                           body=body)
            log_level_mock.assert_called_once_with(mock.sentinel.context,
                                                   prefix=body['prefix'])

        expected = {'log_levels': [
            {'binary': 'cinder-api',
             'host': CONF.host,
             'levels': mock.sentinel.api_levels},
            {'binary': 'cinder-scheduler', 'host': 'host',
             'levels': {'p5': 'l5', 'p6': 'l6'}},
            {'binary': constants.VOLUME_BINARY,
             'host': 'host@backend#pool',
             'levels': {'p3': 'l3', 'p4': 'l4'}},
            {'binary': 'cinder-backup', 'host': 'host',
             'levels': {'p1': 'l1', 'p2': 'l2'}},
        ]}

        self.assertDictEqual(expected, res)

        get_log_mock.assert_called_once_with(body['prefix'])
        sch_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                             services[0], log_level)
        vol_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                             services[1], log_level)
        backup_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                                services[2], log_level)
Esempio n. 7
0
    def test__get_log(self, backup_rpc_mock, vol_rpc_mock, sch_rpc_mock,
                      get_log_mock, get_all_mock):
        get_log_mock.return_value = mock.sentinel.api_levels
        backup_rpc_mock.return_value = [
            objects.LogLevel(prefix='p1', level='l1'),
            objects.LogLevel(prefix='p2', level='l2')
        ]
        vol_rpc_mock.return_value = [
            objects.LogLevel(prefix='p3', level='l3'),
            objects.LogLevel(prefix='p4', level='l4')
        ]
        sch_rpc_mock.return_value = [
            objects.LogLevel(prefix='p5', level='l5'),
            objects.LogLevel(prefix='p6', level='l6')
        ]

        services = [
            objects.Service(self.context, binary='cinder-scheduler',
                            host='host'),
            objects.Service(self.context, binary='cinder-volume',
                            host='host@backend#pool'),
            objects.Service(self.context, binary='cinder-backup', host='host'),
        ]
        get_all_mock.return_value = services
        body = {'binary': '*', 'prefix': 'eventlet.'}

        log_level = objects.LogLevel(prefix=body['prefix'])
        with mock.patch('cinder.objects.LogLevel') as log_level_mock:
            log_level_mock.return_value = log_level
            res = self.controller._get_log(mock.sentinel.context, body)
            log_level_mock.assert_called_once_with(mock.sentinel.context,
                                                   prefix=body['prefix'])

        expected = {'log_levels': [
            {'binary': 'cinder-api',
             'host': CONF.host,
             'levels': mock.sentinel.api_levels},
            {'binary': 'cinder-scheduler', 'host': 'host',
             'levels': {'p5': 'l5', 'p6': 'l6'}},
            {'binary': 'cinder-volume',
             'host': 'host@backend#pool',
             'levels': {'p3': 'l3', 'p4': 'l4'}},
            {'binary': 'cinder-backup', 'host': 'host',
             'levels': {'p1': 'l1', 'p2': 'l2'}},
        ]}

        self.assertDictEqual(expected, res)

        get_log_mock.assert_called_once_with(body['prefix'])
        sch_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                             services[0], log_level)
        vol_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                             services[1], log_level)
        backup_rpc_mock.assert_called_once_with(mock.sentinel.context,
                                                services[2], log_level)
Esempio n. 8
0
    def _set_log(self, req, context, body):
        """Set log levels of services dynamically."""
        prefix = body.get('prefix')
        level = body.get('level')

        binaries, services = self._log_params_binaries_services(context, body)

        log_req = objects.LogLevel(context, prefix=prefix, level=level)

        if constants.API_BINARY in binaries:
            utils.set_log_levels(prefix, level)
        for service in services:
            self.rpc_apis[service.binary].set_log_levels(
                context, service, log_req)

        return webob.Response(status_int=http_client.ACCEPTED)
Esempio n. 9
0
 def test_set_log_levels(self, set_log_mock):
     service = manager.Manager()
     log_request = objects.LogLevel(prefix='sqlalchemy.', level='debug')
     service.set_log_levels(mock.sentinel.context, log_request)
     set_log_mock.assert_called_once_with(log_request.prefix,
                                          log_request.level)