Merge "Fix list metric for other tenants"
This commit is contained in:
commit
2e186162cd
|
@ -107,6 +107,8 @@ middleware:
|
|||
defaultAuthorizedRoles: [user, domainuser, domainadmin, monasca-user, admin]
|
||||
readOnlyAuthorizedRoles: [monasca-read-only-user]
|
||||
agentAuthorizedRoles: [monasca-agent]
|
||||
delegateAuthorizedRole: admin
|
||||
adminRole: admin
|
||||
adminAuthMethod: password
|
||||
adminUser: "admin"
|
||||
adminPassword: "secretadmin"
|
||||
|
|
|
@ -131,6 +131,9 @@ class Metrics(metrics_api_v2.MetricsV2API):
|
|||
|
||||
def on_get(self, req, res):
|
||||
helpers.validate_authorization(req, self._get_metrics_authorized_roles)
|
||||
tenant_id = (
|
||||
helpers.get_x_tenant_or_tenant_id(req,
|
||||
self._delegate_authorized_roles))
|
||||
name = helpers.get_query_name(req)
|
||||
helpers.validate_query_name(name)
|
||||
dimensions = helpers.get_query_dimensions(req)
|
||||
|
@ -139,7 +142,7 @@ class Metrics(metrics_api_v2.MetricsV2API):
|
|||
start_timestamp = helpers.get_query_starttime_timestamp(req, False)
|
||||
end_timestamp = helpers.get_query_endtime_timestamp(req, False)
|
||||
helpers.validate_start_end_timestamps(start_timestamp, end_timestamp)
|
||||
result = self._list_metrics(req.project_id, name,
|
||||
result = self._list_metrics(tenant_id, name,
|
||||
dimensions, req.uri,
|
||||
offset, req.limit,
|
||||
start_timestamp, end_timestamp)
|
||||
|
@ -170,6 +173,9 @@ class MetricsMeasurements(metrics_api_v2.MetricsMeasurementsV2API):
|
|||
|
||||
def on_get(self, req, res):
|
||||
helpers.validate_authorization(req, self._get_metrics_authorized_roles)
|
||||
tenant_id = (
|
||||
helpers.get_x_tenant_or_tenant_id(req,
|
||||
self._delegate_authorized_roles))
|
||||
name = helpers.get_query_name(req, True)
|
||||
helpers.validate_query_name(name)
|
||||
dimensions = helpers.get_query_dimensions(req)
|
||||
|
@ -181,7 +187,7 @@ class MetricsMeasurements(metrics_api_v2.MetricsMeasurementsV2API):
|
|||
merge_metrics_flag = get_merge_metrics_flag(req)
|
||||
group_by = helpers.get_query_group_by(req)
|
||||
|
||||
result = self._measurement_list(req.project_id, name, dimensions,
|
||||
result = self._measurement_list(tenant_id, name, dimensions,
|
||||
start_timestamp, end_timestamp,
|
||||
req.uri, offset,
|
||||
req.limit, merge_metrics_flag,
|
||||
|
@ -214,6 +220,8 @@ class MetricsStatistics(metrics_api_v2.MetricsStatisticsV2API):
|
|||
try:
|
||||
super(MetricsStatistics, self).__init__()
|
||||
self._region = cfg.CONF.region
|
||||
self._delegate_authorized_roles = (
|
||||
cfg.CONF.security.delegate_authorized_roles)
|
||||
self._get_metrics_authorized_roles = (
|
||||
cfg.CONF.security.default_authorized_roles +
|
||||
cfg.CONF.security.read_only_authorized_roles)
|
||||
|
@ -227,6 +235,9 @@ class MetricsStatistics(metrics_api_v2.MetricsStatisticsV2API):
|
|||
|
||||
def on_get(self, req, res):
|
||||
helpers.validate_authorization(req, self._get_metrics_authorized_roles)
|
||||
tenant_id = (
|
||||
helpers.get_x_tenant_or_tenant_id(req,
|
||||
self._delegate_authorized_roles))
|
||||
name = helpers.get_query_name(req, True)
|
||||
helpers.validate_query_name(name)
|
||||
dimensions = helpers.get_query_dimensions(req)
|
||||
|
@ -240,7 +251,7 @@ class MetricsStatistics(metrics_api_v2.MetricsStatisticsV2API):
|
|||
merge_metrics_flag = get_merge_metrics_flag(req)
|
||||
group_by = helpers.get_query_group_by(req)
|
||||
|
||||
result = self._metric_statistics(req.project_id, name, dimensions,
|
||||
result = self._metric_statistics(tenant_id, name, dimensions,
|
||||
start_timestamp, end_timestamp,
|
||||
statistics, period, req.uri,
|
||||
offset, req.limit, merge_metrics_flag,
|
||||
|
@ -274,6 +285,8 @@ class MetricsNames(metrics_api_v2.MetricsNamesV2API):
|
|||
try:
|
||||
super(MetricsNames, self).__init__()
|
||||
self._region = cfg.CONF.region
|
||||
self._delegate_authorized_roles = (
|
||||
cfg.CONF.security.delegate_authorized_roles)
|
||||
self._get_metrics_authorized_roles = (
|
||||
cfg.CONF.security.default_authorized_roles +
|
||||
cfg.CONF.security.read_only_authorized_roles)
|
||||
|
@ -287,10 +300,13 @@ class MetricsNames(metrics_api_v2.MetricsNamesV2API):
|
|||
|
||||
def on_get(self, req, res):
|
||||
helpers.validate_authorization(req, self._get_metrics_authorized_roles)
|
||||
tenant_id = (
|
||||
helpers.get_x_tenant_or_tenant_id(req,
|
||||
self._delegate_authorized_roles))
|
||||
dimensions = helpers.get_query_dimensions(req)
|
||||
helpers.validate_query_dimensions(dimensions)
|
||||
offset = helpers.get_query_param(req, 'offset')
|
||||
result = self._list_metric_names(req.project_id, dimensions,
|
||||
result = self._list_metric_names(tenant_id, dimensions,
|
||||
req.uri, offset, req.limit)
|
||||
res.body = helpers.dumpit_utf8(result)
|
||||
res.status = falcon.HTTP_200
|
||||
|
@ -311,6 +327,8 @@ class DimensionValues(metrics_api_v2.DimensionValuesV2API):
|
|||
try:
|
||||
super(DimensionValues, self).__init__()
|
||||
self._region = cfg.CONF.region
|
||||
self._delegate_authorized_roles = (
|
||||
cfg.CONF.security.delegate_authorized_roles)
|
||||
self._get_metrics_authorized_roles = (
|
||||
cfg.CONF.security.default_authorized_roles +
|
||||
cfg.CONF.security.read_only_authorized_roles)
|
||||
|
@ -324,11 +342,14 @@ class DimensionValues(metrics_api_v2.DimensionValuesV2API):
|
|||
|
||||
def on_get(self, req, res):
|
||||
helpers.validate_authorization(req, self._get_metrics_authorized_roles)
|
||||
tenant_id = (
|
||||
helpers.get_x_tenant_or_tenant_id(req,
|
||||
self._delegate_authorized_roles))
|
||||
metric_name = helpers.get_query_param(req, 'metric_name')
|
||||
dimension_name = helpers.get_query_param(req, 'dimension_name',
|
||||
required=True)
|
||||
offset = helpers.get_query_param(req, 'offset')
|
||||
result = self._dimension_values(req.project_id, req.uri, metric_name,
|
||||
result = self._dimension_values(tenant_id, req.uri, metric_name,
|
||||
dimension_name, offset, req.limit)
|
||||
res.body = helpers.dumpit_utf8(result)
|
||||
res.status = falcon.HTTP_200
|
||||
|
@ -350,6 +371,8 @@ class DimensionNames(metrics_api_v2.DimensionNamesV2API):
|
|||
try:
|
||||
super(DimensionNames, self).__init__()
|
||||
self._region = cfg.CONF.region
|
||||
self._delegate_authorized_roles = (
|
||||
cfg.CONF.security.delegate_authorized_roles)
|
||||
self._get_metrics_authorized_roles = (
|
||||
cfg.CONF.security.default_authorized_roles +
|
||||
cfg.CONF.security.read_only_authorized_roles)
|
||||
|
@ -363,9 +386,12 @@ class DimensionNames(metrics_api_v2.DimensionNamesV2API):
|
|||
|
||||
def on_get(self, req, res):
|
||||
helpers.validate_authorization(req, self._get_metrics_authorized_roles)
|
||||
tenant_id = (
|
||||
helpers.get_x_tenant_or_tenant_id(req,
|
||||
self._delegate_authorized_roles))
|
||||
metric_name = helpers.get_query_param(req, 'metric_name')
|
||||
offset = helpers.get_query_param(req, 'offset')
|
||||
result = self._dimension_names(req.project_id, req.uri, metric_name,
|
||||
result = self._dimension_names(tenant_id, req.uri, metric_name,
|
||||
offset, req.limit)
|
||||
res.body = helpers.dumpit_utf8(result)
|
||||
res.status = falcon.HTTP_200
|
||||
|
|
|
@ -32,8 +32,10 @@ class MonascaClient(rest_client.RestClient):
|
|||
resp, response_body = self.get('')
|
||||
return resp, response_body
|
||||
|
||||
def create_metrics(self, metrics):
|
||||
def create_metrics(self, metrics, tenant_id=None):
|
||||
uri = 'metrics'
|
||||
if tenant_id:
|
||||
uri = uri + '?tenant_id=%s' % tenant_id
|
||||
request_body = json.dumps(metrics)
|
||||
resp, response_body = self.post(uri, request_body)
|
||||
return resp, response_body
|
||||
|
|
|
@ -39,9 +39,10 @@ class BaseMonascaTest(tempest.test.BaseTestCase):
|
|||
force_tenant_isolation=True,
|
||||
identity_version=auth_version)
|
||||
credentials = cls.cred_provider.get_creds_by_roles(
|
||||
['monasca-user', 'anotherrole']).credentials
|
||||
['monasca-user', 'anotherrole', 'admin']).credentials
|
||||
cls.os = clients.Manager(credentials=credentials)
|
||||
cls.monasca_client = cls.os.monasca_client
|
||||
cls.tenants_client = cls.os.tenants_client
|
||||
|
||||
@staticmethod
|
||||
def cleanup_resources(method, list_of_ids):
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
# TODO(RMH): Check if ' should be added in the list of INVALID_CHARS.
|
||||
# TODO(RMH): test_create_metric_no_value, should return 422 if value not sent
|
||||
import time
|
||||
from six.moves import range as xrange
|
||||
|
||||
from monasca_tempest_tests.tests.api import base
|
||||
from monasca_tempest_tests.tests.api import constants
|
||||
|
@ -413,6 +414,38 @@ class TestMetrics(base.BaseMonascaTest):
|
|||
"metrics = 0"
|
||||
self.fail(error_msg)
|
||||
|
||||
@test.attr(type='gate')
|
||||
def test_list_metrics_with_tenant(self):
|
||||
name = data_utils.rand_name('name')
|
||||
key = data_utils.rand_name('key')
|
||||
value = data_utils.rand_name('value')
|
||||
tenant = self.tenants_client.create_tenant(
|
||||
name=data_utils.rand_name('test_tenant'))['tenant']
|
||||
# Delete the tenant at the end of the test
|
||||
self.addCleanup(self.tenants_client.delete_tenant, tenant['id'])
|
||||
metric = helpers.create_metric(name=name,
|
||||
dimensions={key: value})
|
||||
resp, response_body = self.monasca_client.create_metrics(
|
||||
metric, tenant_id=tenant['id'])
|
||||
self.assertEqual(204, resp.status)
|
||||
query_param = '?tenant_id=' + str(tenant['id'])
|
||||
for i in xrange(constants.MAX_RETRIES):
|
||||
resp, response_body = self.monasca_client.list_metrics(query_param)
|
||||
self.assertEqual(200, resp.status)
|
||||
elements = response_body['elements']
|
||||
for element in elements:
|
||||
if str(element['name']) == name:
|
||||
self._verify_list_metrics_element(element, test_key=key,
|
||||
test_value=value)
|
||||
return
|
||||
time.sleep(constants.RETRY_WAIT_SECS)
|
||||
if i == constants.MAX_RETRIES - 1:
|
||||
error_msg = "Failed test_list_metrics_with_tenant: " \
|
||||
"timeout on waiting for metrics: at least " \
|
||||
"one metric is needed. Current number of " \
|
||||
"metrics = 0"
|
||||
self.fail(error_msg)
|
||||
|
||||
@test.attr(type='gate')
|
||||
def test_list_metrics_with_offset_limit(self):
|
||||
name = data_utils.rand_name()
|
||||
|
|
Loading…
Reference in New Issue