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}
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'])
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)
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}
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'])
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)
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)
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)
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)