Fixes group by none defect in resource usage stats:
* Resets the inherited tenant filter queries that come from base class. The helper function for filter by meter expects a single query unlike project aggregates Change-Id: Id9f371b09eaddd6c58d1181cbaeadf7654bbd067 Closes-Bug: #1387530
This commit is contained in:
@@ -139,3 +139,38 @@ class MeteringLineChartTabTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
self._verify_series(res._container[0], 9.0, '2012-12-21T11:00:55',
|
self._verify_series(res._container[0], 9.0, '2012-12-21T11:00:55',
|
||||||
expected_names)
|
expected_names)
|
||||||
|
|
||||||
|
@test.create_stubs({api.keystone: ('tenant_list',),
|
||||||
|
api.ceilometer: ('meter_list',
|
||||||
|
'resource_list',
|
||||||
|
'statistic_list'
|
||||||
|
), })
|
||||||
|
def test_stats_for_line_chart_no_group(self):
|
||||||
|
api.ceilometer.meter_list(IsA(http.HttpRequest))\
|
||||||
|
.AndReturn(self.testdata.meters.list())
|
||||||
|
api.ceilometer.resource_list(IsA(http.HttpRequest), query=None,
|
||||||
|
ceilometer_usage_object=None)\
|
||||||
|
.AndReturn(self.testdata.api_resources.list())
|
||||||
|
api.ceilometer.statistic_list(IsA(http.HttpRequest),
|
||||||
|
'memory', period=IsA(int),
|
||||||
|
query=IsA(list))\
|
||||||
|
.MultipleTimes().AndReturn(self.testdata.statistics.list())
|
||||||
|
api.keystone.tenant_list(IsA(http.HttpRequest),
|
||||||
|
domain=None,
|
||||||
|
paginate=False) \
|
||||||
|
.AndReturn([self.testdata.tenants.list(), False])
|
||||||
|
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
# get all statistics of the meter
|
||||||
|
res = self.client.get(
|
||||||
|
reverse('horizon:admin:metering:samples') +
|
||||||
|
"?meter=memory&stats_attr=max&date_options=7")
|
||||||
|
|
||||||
|
self.assertEqual(res._headers['content-type'],
|
||||||
|
('Content-Type', 'application/json'))
|
||||||
|
|
||||||
|
expected_names = ['fake_resource_id3']
|
||||||
|
|
||||||
|
self._verify_series(res._container[0], 9.0, '2012-12-21T11:00:55',
|
||||||
|
expected_names)
|
||||||
|
@@ -20,6 +20,7 @@ from ceilometerclient.v2 import statistics
|
|||||||
from keystoneclient.v2_0 import tenants
|
from keystoneclient.v2_0 import tenants
|
||||||
from keystoneclient.v2_0 import users
|
from keystoneclient.v2_0 import users
|
||||||
|
|
||||||
|
from openstack_dashboard.api import ceilometer
|
||||||
from openstack_dashboard.test.test_data import utils
|
from openstack_dashboard.test.test_data import utils
|
||||||
|
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@ def data(TEST):
|
|||||||
TEST.ceilometer_users = utils.TestDataContainer()
|
TEST.ceilometer_users = utils.TestDataContainer()
|
||||||
TEST.ceilometer_tenants = utils.TestDataContainer()
|
TEST.ceilometer_tenants = utils.TestDataContainer()
|
||||||
TEST.resources = utils.TestDataContainer()
|
TEST.resources = utils.TestDataContainer()
|
||||||
|
TEST.api_resources = utils.TestDataContainer()
|
||||||
TEST.samples = utils.TestDataContainer()
|
TEST.samples = utils.TestDataContainer()
|
||||||
TEST.meters = utils.TestDataContainer()
|
TEST.meters = utils.TestDataContainer()
|
||||||
TEST.statistics = utils.TestDataContainer()
|
TEST.statistics = utils.TestDataContainer()
|
||||||
@@ -110,16 +112,42 @@ def data(TEST):
|
|||||||
metadata={'tag': 'self.counter3', 'display_name': 'test-server'},
|
metadata={'tag': 'self.counter3', 'display_name': 'test-server'},
|
||||||
links=[{'url': 'test_url', 'rel': 'intance'}],
|
links=[{'url': 'test_url', 'rel': 'intance'}],
|
||||||
)
|
)
|
||||||
|
resource_dict_4 = dict(
|
||||||
|
resource_id='fake_resource_id3',
|
||||||
|
project_id='fake_project_id',
|
||||||
|
user_id="fake_user_id",
|
||||||
|
timestamp='2012-07-02T10:42:00.000000',
|
||||||
|
metadata={'tag': 'self.counter3', 'display_name': 'test-server'},
|
||||||
|
links=[{'url': 'test_url', 'rel': 'memory'}],
|
||||||
|
)
|
||||||
|
|
||||||
resource_1 = resources.Resource(resources.ResourceManager(None),
|
resource_1 = resources.Resource(resources.ResourceManager(None),
|
||||||
resource_dict_1)
|
resource_dict_1)
|
||||||
resource_2 = resources.Resource(resources.ResourceManager(None),
|
resource_2 = resources.Resource(resources.ResourceManager(None),
|
||||||
resource_dict_2)
|
resource_dict_2)
|
||||||
resource_3 = resources.Resource(resources.ResourceManager(None),
|
resource_3 = resources.Resource(resources.ResourceManager(None),
|
||||||
resource_dict_3)
|
resource_dict_3)
|
||||||
|
resource_4 = resources.Resource(resources.ResourceManager(None),
|
||||||
|
resource_dict_4)
|
||||||
|
|
||||||
TEST.resources.add(resource_1)
|
TEST.resources.add(resource_1)
|
||||||
TEST.resources.add(resource_2)
|
TEST.resources.add(resource_2)
|
||||||
TEST.resources.add(resource_3)
|
TEST.resources.add(resource_3)
|
||||||
|
|
||||||
|
# Having a separate set of fake objects for openstack_dashboard
|
||||||
|
# api Resource class. This is required because of additional methods
|
||||||
|
# defined in openstack_dashboard.api.ceilometer.Resource
|
||||||
|
|
||||||
|
api_resource_1 = ceilometer.Resource(resource_1)
|
||||||
|
api_resource_2 = ceilometer.Resource(resource_2)
|
||||||
|
api_resource_3 = ceilometer.Resource(resource_3)
|
||||||
|
api_resource_4 = ceilometer.Resource(resource_4)
|
||||||
|
|
||||||
|
TEST.api_resources.add(api_resource_1)
|
||||||
|
TEST.api_resources.add(api_resource_2)
|
||||||
|
TEST.api_resources.add(api_resource_3)
|
||||||
|
TEST.api_resources.add(api_resource_4)
|
||||||
|
|
||||||
# samples
|
# samples
|
||||||
sample_dict_1 = {'resource_id': 'fake_resource_id',
|
sample_dict_1 = {'resource_id': 'fake_resource_id',
|
||||||
'project_id': 'fake_project_id',
|
'project_id': 'fake_project_id',
|
||||||
|
@@ -120,6 +120,8 @@ class MeterQuery(ProjectAggregatesQuery):
|
|||||||
filterfunc = kwargs.pop('filterfunc', None)
|
filterfunc = kwargs.pop('filterfunc', None)
|
||||||
super(MeterQuery, self).__init__(*args, **kwargs)
|
super(MeterQuery, self).__init__(*args, **kwargs)
|
||||||
self.filterfunc = filterfunc
|
self.filterfunc = filterfunc
|
||||||
|
# Resetting the tenant based filter set in base class
|
||||||
|
self.queries = None
|
||||||
|
|
||||||
def query(self, meter):
|
def query(self, meter):
|
||||||
def filter_by_meter_name(resource):
|
def filter_by_meter_name(resource):
|
||||||
|
Reference in New Issue
Block a user