From 09677c0de86576c1af6cf7f78b8be4d14ab061f8 Mon Sep 17 00:00:00 2001 From: Ladislav Smola Date: Thu, 21 Nov 2013 14:45:47 +0100 Subject: [PATCH] Deleting statistics tables from resource usage page The tables were interpreting the stats in a wrong way, for some stats it's not even easily possible to get those stats. We need to go through each statistic separately and document it in the Ceilometer docs first. Then it's more likely that these table stats will be distributed in various tables in dashboard in the form of sparklines so these pages won't be needed. Fixes bug 1249279 Change-Id: Ib8c110f5d66fae50df12f8f0beeb99c2b2d00bf6 --- openstack_dashboard/api/ceilometer.py | 135 ----------- .../dashboards/admin/metering/tables.py | 212 ------------------ .../dashboards/admin/metering/tabs.py | 135 +---------- .../dashboards/admin/metering/tests.py | 193 ---------------- .../test/api_tests/ceilometer_tests.py | 193 ---------------- 5 files changed, 1 insertion(+), 867 deletions(-) delete mode 100644 openstack_dashboard/dashboards/admin/metering/tables.py diff --git a/openstack_dashboard/api/ceilometer.py b/openstack_dashboard/api/ceilometer.py index d0be2c5de0f..8e1b4b48b61 100644 --- a/openstack_dashboard/api/ceilometer.py +++ b/openstack_dashboard/api/ceilometer.py @@ -218,99 +218,6 @@ class Statistic(base.APIResourceWrapper): 'duration', 'duration_start', 'duration_end'] -class GlobalDiskUsage(base.APIResourceWrapper): - """Represents collection of resources with statistic of defined meters. - - Resources are filtered either by given default query or by - meters in python. It's preferred to use default_query as it is more - effective. - """ - - _attrs = ["id", "tenant", "user", "resource", "disk_read_bytes", - "disk_read_requests", "disk_write_bytes", - "disk_write_requests"] - - meters = ["disk.read.bytes", - "disk.read.requests", - "disk.write.bytes", - "disk.write.requests"] - - default_query = [{"field": "metadata.OS-EXT-AZ:availability_zone", - "op": "eq", - "value": "nova"}] - stats_attr = "avg" - - -class GlobalNetworkTrafficUsage(base.APIResourceWrapper): - """Represents collection of resources with statistic of defined meters. - - Resources are filtered either by given default query or by - meters in python. It's preferred to use default_query as it is more - effective. - """ - - _attrs = ["id", "tenant", "user", "resource", "network_incoming_bytes", - "network_incoming_packets", "network_outgoing_bytes", - "network_outgoing_packets"] - - meters = ["network.incoming.bytes", - "network.incoming.packets", - "network.outgoing.bytes", - "network.outgoing.packets"] - - # TODO(lsmola) once the API will support it need to add default query, - # instead of filtering resources in python by the filter_func - default_query = None - stats_attr = "avg" - - -class GlobalNetworkUsage(base.APIResourceWrapper): - """Represents collection of resources with statistic of defined meters. - - Resources are filtered either by given default query or by - meters in python. It's preferred to use default_query as it is more - effective. - """ - - _attrs = ["id", "tenant", "user", "resource", "network", "network_create", - "subnet", "subnet_create", "port", "port_create", "router", - "router_create", "ip_floating", "ip_floating_create"] - - meters = ["network", "network_create", - "subnet", "subnet_create", - "port", "port_create", - "router", "router_create", - "ip_floating", "ip_floating_create"] - - # TODO(lsmola) once the API will support it need to add default query, - # instead of filtering resources in python by the filter_func - default_query = None - stats_attr = "max" - - -class GlobalObjectStoreUsage(base.APIResourceWrapper): - """Represents collection of resources with statistic of defined meters. - - Resources are filtered either by given default query or by - meters in python. It's preferred to use default_query as it is more - effective. - """ - - _attrs = ["id", "tenant", "user", "resource", "storage_objects", - "storage_objects_size", "storage_objects_outgoing_bytes", - "storage_objects_incoming_bytes"] - - meters = ["storage.objects", - "storage.objects.size", - "storage.objects.incoming.bytes", - "storage.objects.outgoing.bytes"] - - # TODO(lsmola) once the API will support it need to add default query, - # instead of filtering resources in python by the filter_func - default_query = None - stats_attr = "avg" - - def ceilometerclient(request): """Initialization of Ceilometer client.""" @@ -558,48 +465,6 @@ def filter_resources(resource): return [used_cls(resource) for resource in resources] - def global_disk_usage(self, query=None, with_statistics=False, - additional_query=None): - """Wrapper for specific call of global_data_get.""" - - return self.global_data_get(used_cls=GlobalDiskUsage, - query=query, - with_statistics=with_statistics, - additional_query=additional_query) - - def global_network_traffic_usage(self, query=None, with_statistics=False, - additional_query=None): - """Wrapper for specific call of global_data_get. - """ - - return self.global_data_get(used_cls=GlobalNetworkTrafficUsage, - query=query, - with_statistics=with_statistics, - additional_query=additional_query) - - def global_network_usage(self, query=None, with_statistics=False, - additional_query=None): - """Wrapper for specific call of global_data_get. - """ - - return self.global_data_get(used_cls=GlobalNetworkUsage, - query=query, - with_statistics=with_statistics, - additional_query=additional_query) - - def global_object_store_usage(self, query=None, with_statistics=False, - additional_query=None): - """Wrapper for specific call of global_data_get. - """ - # TODO(lsmola) This call uses all tenants now. When ajax pagination - # is added, it needs to obtain only paginated tenants. - # self.preload_all_tenants() - - return self.global_data_get(used_cls=GlobalObjectStoreUsage, - query=query, - with_statistics=with_statistics, - additional_query=additional_query) - def query_from_object_id(self, object_id): """Obtaining a query from resource id. diff --git a/openstack_dashboard/dashboards/admin/metering/tables.py b/openstack_dashboard/dashboards/admin/metering/tables.py deleted file mode 100644 index a61a1255c48..00000000000 --- a/openstack_dashboard/dashboards/admin/metering/tables.py +++ /dev/null @@ -1,212 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from django.template.defaultfilters import filesizeformat # noqa -from django.utils.translation import ugettext_lazy as _ # noqa - -from horizon import exceptions -from horizon import tables -from openstack_dashboard import api - - -class CommonFilterAction(tables.FilterAction): - def filter(self, table, resources, filter_string): - q = filter_string.lower() - return [resource for resource in resources - if q in resource.resource.lower() or - q in resource.tenant.lower() or - q in resource.user.lower()] - - -def get_status(fields): - # TODO(lsmola) it should periodically renew the tables I guess - def transform(datum): - if any([getattr(datum, field, None) is 0 or getattr(datum, field, None) - for field in fields]): - return _("up") - else: - return _("none") - return transform - - -class GlobalUsageTable(tables.DataTable): - tenant = tables.Column("tenant", verbose_name=_("Project"), sortable=True, - filters=(lambda (t): getattr(t, 'name', ""),)) - user = tables.Column("user", verbose_name=_("User"), sortable=True, - filters=(lambda (u): getattr(u, 'name', ""),)) - instance = tables.Column("resource", - verbose_name=_("Resource"), - sortable=True) - - -class GlobalDiskUsageTable(tables.DataTable): - tenant = tables.Column("id", verbose_name=_("Project"), sortable=True) - disk_read_bytes = tables.Column("disk_read_bytes", - filters=(filesizeformat,), - verbose_name=_("Disk Read Bytes"), - sortable=True) - disk_read_requests = tables.Column("disk_read_requests", - verbose_name=_("Disk Read Requests"), - sortable=True) - disk_write_bytes = tables.Column("disk_write_bytes", - verbose_name=_("Disk Write Bytes"), - filters=(filesizeformat,), - sortable=True) - disk_write_requests = tables.Column("disk_write_requests", - verbose_name=_("Disk Write Requests"), - sortable=True) - - class Meta: - name = "global_disk_usage" - verbose_name = _("Global Disk Usage (average of last 30 days)") - table_actions = (CommonFilterAction,) - multi_select = False - - -class GlobalNetworkTrafficUsageTable(tables.DataTable): - tenant = tables.Column("id", verbose_name=_("Project"), sortable=True) - network_incoming_bytes = tables\ - .Column("network_incoming_bytes", - verbose_name=_("Network Incoming Bytes"), - filters=(filesizeformat,), - sortable=True) - network_incoming_packets = tables\ - .Column("network_incoming_packets", - verbose_name=_("Network Incoming Packets"), - sortable=True) - network_outgoing_bytes = tables\ - .Column("network_outgoing_bytes", - verbose_name=_("Network Outgoing Bytes"), - filters=(filesizeformat,), - sortable=True) - network_outgoing_packets = tables\ - .Column("network_outgoing_packets", - verbose_name=_("Network Outgoing Packets"), - sortable=True) - - class Meta: - name = "global_network_traffic_usage" - verbose_name = _("Global Network Traffic Usage (average " - "of last 30 days)") - table_actions = (CommonFilterAction,) - multi_select = False - - -class GlobalNetworkUsageTable(tables.DataTable): - tenant = tables.Column("id", verbose_name=_("Project"), sortable=True) - network_duration = tables.Column("network", - verbose_name=_("Network Duration"), - sortable=True) - network_creation_requests = tables\ - .Column("network_create", - verbose_name=_("Network Creation Requests"), - sortable=True) - subnet_duration = tables.Column("subnet", - verbose_name=_("Subnet Duration"), - sortable=True) - subnet_creation = tables.Column("subnet_create", - verbose_name=_("Subnet Creation Requests"), - sortable=True) - port_duration = tables.Column("port", - verbose_name=_("Port Duration"), - sortable=True) - port_creation = tables.Column("port_create", - verbose_name=_("Port Creation Requests"), - sortable=True) - router_duration = tables.Column("router", - verbose_name=_("Router Duration"), - sortable=True) - router_creation = tables.Column("router_create", - verbose_name=_("Router Creation Requests"), - sortable=True) - port_duration = tables.Column("port", - verbose_name=_("Port Duration"), - sortable=True) - port_creation = tables.Column("port_create", - verbose_name=_("Port Creation Requests"), - sortable=True) - ip_floating_duration = tables\ - .Column("ip_floating", - verbose_name=_("Floating IP Duration"), - sortable=True) - ip_floating_creation = tables\ - .Column("ip_floating_create", - verbose_name=_("Floating IP Creation Requests"), - sortable=True) - - class Meta: - name = "global_network_usage" - verbose_name = _("Global Network Usage (average of last 30 days)") - table_actions = (CommonFilterAction,) - multi_select = False - - -class GlobalObjectStoreUsageUpdateRow(tables.Row): - ajax = True - - def get_data(self, request, object_id): - ceilometer_usage = api.ceilometer.CeilometerUsage(request) - - query = ceilometer_usage.query_from_object_id(object_id) - try: - data = ceilometer_usage.global_object_store_usage( - query, - with_statistics=True) - except Exception: - data = [] - exceptions.handle(request, - _('Unable to retrieve statistics.')) - return None - return data[0] - - -class GlobalObjectStoreUsageTable(tables.DataTable): - tenant = tables.Column("tenant", verbose_name=_("Project"), sortable=True, - filters=(lambda (t): getattr(t, 'name', ""),)) - status = tables.Column(get_status(["storage_objects", - "storage_objects_size", - "storage_objects_incoming_bytes", - "storage_objects_outgoing_bytes"]), - verbose_name=_("Status"), - hidden=True) - resource = tables.Column("resource", - verbose_name=_("Resource"), - sortable=True) - storage_incoming_bytes = tables.Column( - "storage_objects_incoming_bytes", - verbose_name=_("Object Storage Incoming Bytes"), - filters=(filesizeformat,), - sortable=True) - storage_outgoing_bytes = tables.Column( - "storage_objects_outgoing_bytes", - verbose_name=_("Object Storage Outgoing Bytes"), - filters=(filesizeformat,), - sortable=True) - storage_objects = tables.Column( - "storage_objects", - verbose_name=_("Total Number of Objects"), - sortable=True) - storage_objects_size = tables.Column( - "storage_objects_size", - filters=(filesizeformat,), - verbose_name=_("Total Size of Objects "), - sortable=True) - - class Meta: - name = "global_object_store_usage" - verbose_name = _("Global Object Store Usage (average of last 30 days)") - table_actions = (CommonFilterAction,) - row_class = GlobalObjectStoreUsageUpdateRow - status_columns = ["status"] - multi_select = False diff --git a/openstack_dashboard/dashboards/admin/metering/tabs.py b/openstack_dashboard/dashboards/admin/metering/tabs.py index 24745cf0f1b..49c40e36605 100644 --- a/openstack_dashboard/dashboards/admin/metering/tabs.py +++ b/openstack_dashboard/dashboards/admin/metering/tabs.py @@ -12,8 +12,6 @@ # License for the specific language governing permissions and limitations # under the License. -from datetime import datetime # noqa -from datetime import timedelta # noqa from django.utils.translation import ugettext_lazy as _ # noqa @@ -22,136 +20,6 @@ from openstack_dashboard import api from openstack_dashboard.api import ceilometer -from openstack_dashboard.dashboards.admin.metering import tables - - -def make_tenant_queries(request, days_before=30): - try: - tenants, more = api.keystone.tenant_list( - request, - domain=None, - paginate=True, - marker="tenant_marker") - except Exception: - tenants = [] - exceptions.handle(request, - _('Unable to retrieve tenant list.')) - queries = {} - for tenant in tenants: - tenant_query = [{ - "field": "project_id", - "op": "eq", - "value": tenant.id}] - - queries[tenant.name] = tenant_query - - # TODO(lsmola) Just show last 30 days, should be switchable somewhere - # above the table. - date_from = datetime.now() - timedelta(days_before) - date_to = datetime.now() - additional_query = [{'field': 'timestamp', - 'op': 'ge', - 'value': date_from}, - {'field': 'timestamp', - 'op': 'le', - 'value': date_to}] - - return queries, additional_query - - -def list_of_resource_aggregates(request, meters, stats_attr="avg"): - queries, additional_query = make_tenant_queries(request) - - ceilometer_usage = ceilometer.CeilometerUsage(request) - try: - resource_aggregates = ceilometer_usage.\ - resource_aggregates_with_statistics( - queries, meters, stats_attr="avg", - additional_query=additional_query) - except Exception: - resource_aggregates = [] - exceptions.handle(request, - _('Unable to retrieve statistics.')) - - return resource_aggregates - - -class GlobalDiskUsageTab(tabs.TableTab): - table_classes = (tables.GlobalDiskUsageTable,) - name = _("Global Disk Usage") - slug = "global_disk_usage" - template_name = ("horizon/common/_detail_table.html") - preload = False - - def get_global_disk_usage_data(self): - """Disk usage table data aggregated by project.""" - request = self.tab_group.request - return list_of_resource_aggregates(request, - ceilometer.GlobalDiskUsage.meters) - - -class GlobalNetworkTrafficUsageTab(tabs.TableTab): - table_classes = (tables.GlobalNetworkTrafficUsageTable,) - name = _("Global Network Traffic Usage") - slug = "global_network_traffic_usage" - template_name = ("horizon/common/_detail_table.html") - preload = False - - def get_global_network_traffic_usage_data(self): - request = self.tab_group.request - return list_of_resource_aggregates(request, - ceilometer.GlobalNetworkTrafficUsage.meters) - - -class GlobalNetworkUsageTab(tabs.TableTab): - table_classes = (tables.GlobalNetworkUsageTable,) - name = _("Global Network Usage") - slug = "global_network_usage" - template_name = ("horizon/common/_detail_table.html") - preload = False - - def get_global_network_usage_data(self): - request = self.tab_group.request - return list_of_resource_aggregates(request, - ceilometer.GlobalNetworkUsage.meters) - - def allowed(self, request): - permissions = ("openstack.services.network",) - return request.user.has_perms(permissions) - - -class GlobalObjectStoreUsageTab(tabs.TableTab): - table_classes = (tables.GlobalObjectStoreUsageTable,) - name = _("Global Object Store Usage") - slug = "global_object_store_usage" - template_name = ("horizon/common/_detail_table.html") - preload = False - - def get_global_object_store_usage_data(self): - request = self.tab_group.request - ceilometer_usage = ceilometer.CeilometerUsage(request) - - date_from = datetime.now() - timedelta(30) - date_to = datetime.now() - additional_query = [{'field': 'timestamp', - 'op': 'ge', - 'value': date_from}, - {'field': 'timestamp', - 'op': 'le', - 'value': date_to}] - try: - result = ceilometer_usage.global_object_store_usage( - with_statistics=True, additional_query=additional_query) - except Exception: - result = [] - exceptions.handle(request, - _('Unable to retrieve statistics.')) - return result - - def allowed(self, request): - permissions = ("openstack.services.object-store",) - return request.user.has_perms(permissions) - class GlobalStatsTab(tabs.Tab): name = _("Stats") @@ -228,6 +96,5 @@ def __init__(self, meter, meter_titles): class CeilometerOverviewTabs(tabs.TabGroup): slug = "ceilometer_overview" - tabs = (GlobalDiskUsageTab, GlobalNetworkTrafficUsageTab, - GlobalObjectStoreUsageTab, GlobalNetworkUsageTab, GlobalStatsTab,) + tabs = (GlobalStatsTab,) sticky = True diff --git a/openstack_dashboard/dashboards/admin/metering/tests.py b/openstack_dashboard/dashboards/admin/metering/tests.py index 47870d2c957..3a6c8df69be 100644 --- a/openstack_dashboard/dashboards/admin/metering/tests.py +++ b/openstack_dashboard/dashboards/admin/metering/tests.py @@ -26,199 +26,6 @@ class MeteringViewTests(test.APITestCase, test.BaseAdminViewTests): - @test.create_stubs({api.keystone: ('tenant_list',)}) - def test_disk_usage(self): - statistics = self.statistics.list() - - api.keystone.tenant_list(IsA(http.HttpRequest), - domain=None, - marker='tenant_marker', - paginate=True) \ - .AndReturn([self.tenants.list(), False]) - - ceilometerclient = self.stub_ceilometerclient() - ceilometerclient.statistics = self.mox.CreateMockAnything() - # check that list is called twice for one resource and 2 meters - ceilometerclient.statistics.list(meter_name=IsA(str), - period=None, q=IsA(list)).\ - MultipleTimes().\ - AndReturn(statistics) - - self.mox.ReplayAll() - - # getting all resources and with statistics - res = self.client.get(reverse('horizon:admin:metering:index')) - self.assertTemplateUsed(res, 'admin/metering/index.html') - table_stats = res.context['table'].data - - first = table_stats[0] - self.assertEqual(first.id, 'test_tenant') - self.assertEqual(first.disk_write_requests, 4.55) - self.assertEqual(first.disk_read_bytes, 4.55) - self.assertEqual(first.disk_write_bytes, 4.55) - self.assertEqual(first.disk_read_bytes, 4.55) - - second = table_stats[1] - self.assertEqual(second.id, 'disabled_tenant') - self.assertEqual(second.disk_write_requests, 4.55) - self.assertEqual(second.disk_read_bytes, 4.55) - self.assertEqual(second.disk_write_bytes, 4.55) - self.assertEqual(second.disk_read_bytes, 4.55) - - # check there is as many rows as tenants - self.assertEqual(len(table_stats), - len(self.tenants.list())) - self.assertIsInstance(first, api.ceilometer.ResourceAggregate) - - @test.create_stubs({api.keystone: ('tenant_list',)}) - def test_global_network_traffic_usage(self): - statistics = self.statistics.list() - - api.keystone.tenant_list(IsA(http.HttpRequest), - domain=None, - marker='tenant_marker', - paginate=True) \ - .AndReturn([self.tenants.list(), False]) - - ceilometerclient = self.stub_ceilometerclient() - ceilometerclient.statistics = self.mox.CreateMockAnything() - # check that list is called twice for one resource and 2 meters - ceilometerclient.statistics.list(meter_name=IsA(str), - period=None, q=IsA(list)).\ - MultipleTimes().\ - AndReturn(statistics) - - self.mox.ReplayAll() - - # getting all resources and with statistics - res = self.client.get(reverse('horizon:admin:metering:index') + - "?tab=ceilometer_overview__global_network_traffic_usage") - self.assertTemplateUsed(res, 'admin/metering/index.html') - table_stats = res.context['table'].data - - first = table_stats[0] - self.assertEqual(first.id, 'test_tenant') - self.assertEqual(first.network_incoming_bytes, 4.55) - self.assertEqual(first.network_incoming_packets, 4.55) - self.assertEqual(first.network_outgoing_bytes, 4.55) - self.assertEqual(first.network_outgoing_packets, 4.55) - - second = table_stats[1] - self.assertEqual(second.id, 'disabled_tenant') - self.assertEqual(second.network_incoming_bytes, 4.55) - self.assertEqual(second.network_incoming_packets, 4.55) - self.assertEqual(second.network_outgoing_bytes, 4.55) - self.assertEqual(second.network_outgoing_packets, 4.55) - - # check there is as many rows as tenants - self.assertEqual(len(table_stats), - len(self.tenants.list())) - self.assertIsInstance(first, api.ceilometer.ResourceAggregate) - - @test.create_stubs({api.keystone: ('tenant_list',)}) - def test_global_network_usage(self): - statistics = self.statistics.list() - - api.keystone.tenant_list(IsA(http.HttpRequest), - domain=None, - marker='tenant_marker', - paginate=True) \ - .AndReturn([self.tenants.list(), False]) - - ceilometerclient = self.stub_ceilometerclient() - ceilometerclient.statistics = self.mox.CreateMockAnything() - # check that list is called twice for one resource and 2 meters - ceilometerclient.statistics.list(meter_name=IsA(str), - period=None, q=IsA(list)).\ - MultipleTimes().\ - AndReturn(statistics) - - self.mox.ReplayAll() - - # getting all resources and with statistics - res = self.client.get(reverse('horizon:admin:metering:index') + - "?tab=ceilometer_overview__global_network_usage") - self.assertTemplateUsed(res, 'admin/metering/index.html') - table_stats = res.context['table'].data - - first = table_stats[0] - self.assertEqual(first.id, 'test_tenant') - self.assertEqual(first.network, 4.55) - self.assertEqual(first.network_create, 4.55) - self.assertEqual(first.subnet, 4.55) - self.assertEqual(first.subnet_create, 4.55) - self.assertEqual(first.port, 4.55) - self.assertEqual(first.port_create, 4.55) - self.assertEqual(first.router, 4.55) - self.assertEqual(first.router_create, 4.55) - self.assertEqual(first.ip_floating, 4.55) - self.assertEqual(first.ip_floating_create, 4.55) - - second = table_stats[1] - self.assertEqual(second.id, 'disabled_tenant') - self.assertEqual(second.network, 4.55) - self.assertEqual(second.network_create, 4.55) - self.assertEqual(second.subnet, 4.55) - self.assertEqual(second.subnet_create, 4.55) - self.assertEqual(second.port, 4.55) - self.assertEqual(second.port_create, 4.55) - self.assertEqual(second.router, 4.55) - self.assertEqual(second.router_create, 4.55) - self.assertEqual(second.ip_floating, 4.55) - self.assertEqual(second.ip_floating_create, 4.55) - - # check there is as many rows as tenants - self.assertEqual(len(table_stats), - len(self.tenants.list())) - self.assertIsInstance(first, api.ceilometer.ResourceAggregate) - - @test.create_stubs({api.ceilometer.CeilometerUsage: ("get_user", - "get_tenant")}) - def test_global_object_store_usage(self): - resources = self.resources.list() - statistics = self.statistics.list() - user = self.ceilometer_users.list()[0] - tenant = self.ceilometer_tenants.list()[0] - - ceilometerclient = self.stub_ceilometerclient() - ceilometerclient.resources = self.mox.CreateMockAnything() - ceilometerclient.resources.list(q=None).AndReturn(resources) - - ceilometerclient.statistics = self.mox.CreateMockAnything() - ceilometerclient.statistics.list(meter_name=IsA(str), - period=None, q=IsA(list)).\ - MultipleTimes().\ - AndReturn(statistics) - - api.ceilometer.CeilometerUsage\ - .get_user(IsA(str)).MultipleTimes().AndReturn(user) - api.ceilometer.CeilometerUsage\ - .get_tenant(IsA(str)).MultipleTimes().AndReturn(tenant) - - self.mox.ReplayAll() - - # getting all resources and with statistics - res = self.client.get(reverse('horizon:admin:metering:index') + - "?tab=ceilometer_overview__global_object_store_usage") - self.assertTemplateUsed(res, 'admin/metering/index.html') - table_stats = res.context['table'].data - - first = table_stats[0] - self.assertEqual(first.id, 'fake_project_id__fake_user_id__' - 'fake_resource_id') - self.assertEqual(first.user.name, 'user') - self.assertEqual(first.tenant.name, 'test_tenant') - self.assertEqual(first.resource, 'fake_resource_id') - - self.assertEqual(first.storage_objects, 4.55) - self.assertEqual(first.storage_objects_size, 4.55) - self.assertEqual(first.storage_objects_incoming_bytes, 4.55) - self.assertEqual(first.storage_objects_outgoing_bytes, 4.55) - - # There are only 2 resources regarding object storage in test data - self.assertEqual(len(table_stats), 2) - self.assertIsInstance(first, api.ceilometer.GlobalObjectStoreUsage) - def test_stats_page(self): resources = self.resources.list() ceilometerclient = self.stub_ceilometerclient() diff --git a/openstack_dashboard/test/api_tests/ceilometer_tests.py b/openstack_dashboard/test/api_tests/ceilometer_tests.py index 377dd5a94a3..62ca43b9b36 100644 --- a/openstack_dashboard/test/api_tests/ceilometer_tests.py +++ b/openstack_dashboard/test/api_tests/ceilometer_tests.py @@ -235,196 +235,3 @@ class TempUsage(api.base.APIResourceWrapper): self.assertEqual(vars(first.fake_meter_2[0]), vars(statistic_obj)) self.assertEqual(len(data), len(resources)) - - @test.create_stubs({api.ceilometer.CeilometerUsage: ("get_user", - "get_tenant")}) - def test_global_disk_usage(self): - resources = self.resources.list() - - statistics = self.statistics.list() - user = self.ceilometer_users.list()[0] - tenant = self.ceilometer_tenants.list()[0] - - ceilometerclient = self.stub_ceilometerclient() - ceilometerclient.resources = self.mox.CreateMockAnything() - ceilometerclient.resources.list(q=IsA(list)).AndReturn(resources) - - ceilometerclient.statistics = self.mox.CreateMockAnything() - ceilometerclient.statistics.list(meter_name=IsA(str), - period=None, q=IsA(list)).\ - MultipleTimes().\ - AndReturn(statistics) - - api.ceilometer.CeilometerUsage\ - .get_user(IsA(str)).MultipleTimes().AndReturn(user) - api.ceilometer.CeilometerUsage\ - .get_tenant(IsA(str)).MultipleTimes().AndReturn(tenant) - - self.mox.ReplayAll() - - # getting all resources and with statistics - ceilometer_usage = api.ceilometer.CeilometerUsage(http.HttpRequest) - data = ceilometer_usage.global_disk_usage(query=["fake_query"], - with_statistics=True) - - first = data[0] - self.assertEqual(first.id, 'fake_project_id__fake_user_id__' - 'fake_resource_id') - self.assertEqual(first.user.name, 'user') - self.assertEqual(first.tenant.name, 'test_tenant') - self.assertEqual(first.resource, 'fake_resource_id') - self.assertEqual(first.disk_read_bytes, 4.55) - self.assertEqual(first.disk_write_bytes, 4.55) - self.assertEqual(first.disk_read_requests, 4.55) - self.assertEqual(first.disk_write_requests, 4.55) - - self.assertEqual(len(data), len(resources)) - - @test.create_stubs({api.ceilometer.CeilometerUsage: ("get_user", - "get_tenant")}) - def test_global_network_traffic_usage(self): - resources = self.resources.list() - - statistics = self.statistics.list() - user = self.ceilometer_users.list()[0] - tenant = self.ceilometer_tenants.list()[0] - - ceilometerclient = self.stub_ceilometerclient() - ceilometerclient.resources = self.mox.CreateMockAnything() - ceilometerclient.resources.list(q=IsA(list)).AndReturn(resources) - - ceilometerclient.statistics = self.mox.CreateMockAnything() - ceilometerclient.statistics.list(meter_name=IsA(str), - period=None, q=IsA(list)).\ - MultipleTimes().\ - AndReturn(statistics) - - api.ceilometer.CeilometerUsage\ - .get_user(IsA(str)).MultipleTimes().AndReturn(user) - api.ceilometer.CeilometerUsage\ - .get_tenant(IsA(str)).MultipleTimes().AndReturn(tenant) - - self.mox.ReplayAll() - - # getting all resources and with statistics - ceilometer_usage = api.ceilometer.CeilometerUsage(http.HttpRequest) - data = ceilometer_usage.global_network_traffic_usage( - query=["fake_query"], - with_statistics=True) - - first = data[0] - self.assertEqual(first.id, 'fake_project_id__fake_user_id__' - 'fake_resource_id') - self.assertEqual(first.user.name, 'user') - self.assertEqual(first.tenant.name, 'test_tenant') - self.assertEqual(first.resource, 'fake_resource_id') - self.assertEqual(first.network_incoming_bytes, 4.55) - self.assertEqual(first.network_incoming_packets, 4.55) - self.assertEqual(first.network_outgoing_bytes, 4.55) - self.assertEqual(first.network_outgoing_packets, 4.55) - - self.assertEqual(len(data), len(resources)) - - self.assertIsInstance(first, api.ceilometer.GlobalNetworkTrafficUsage) - - @test.create_stubs({api.ceilometer.CeilometerUsage: ("get_user", - "get_tenant")}) - def test_global_network_usage(self): - resources = self.resources.list() - - statistics = self.statistics.list() - user = self.ceilometer_users.list()[0] - tenant = self.ceilometer_tenants.list()[0] - - ceilometerclient = self.stub_ceilometerclient() - ceilometerclient.resources = self.mox.CreateMockAnything() - ceilometerclient.resources.list(q=IsA(list)).AndReturn(resources) - - ceilometerclient.statistics = self.mox.CreateMockAnything() - ceilometerclient.statistics.list(meter_name=IsA(str), - period=None, q=IsA(list)).\ - MultipleTimes().\ - AndReturn(statistics) - - api.ceilometer.CeilometerUsage\ - .get_user(IsA(str)).MultipleTimes().AndReturn(user) - api.ceilometer.CeilometerUsage\ - .get_tenant(IsA(str)).MultipleTimes().AndReturn(tenant) - - self.mox.ReplayAll() - - # getting all resources and with statistics - ceilometer_usage = api.ceilometer.CeilometerUsage(http.HttpRequest) - data = ceilometer_usage.global_network_usage( - query=["fake_query"], - with_statistics=True) - - first = data[0] - self.assertEqual(first.id, 'fake_project_id__fake_user_id__' - 'fake_resource_id') - self.assertEqual(first.user.name, 'user') - self.assertEqual(first.tenant.name, 'test_tenant') - self.assertEqual(first.resource, 'fake_resource_id') - - self.assertEqual(first.network, 9) - self.assertEqual(first.network_create, 9) - self.assertEqual(first.subnet, 9) - self.assertEqual(first.subnet_create, 9) - self.assertEqual(first.port, 9) - self.assertEqual(first.port_create, 9) - self.assertEqual(first.router, 9) - self.assertEqual(first.router_create, 9) - self.assertEqual(first.ip_floating, 9) - self.assertEqual(first.ip_floating_create, 9) - - self.assertEqual(len(data), len(resources)) - - self.assertIsInstance(first, api.ceilometer.GlobalNetworkUsage) - - @test.create_stubs({api.ceilometer.CeilometerUsage: ("get_user", - "get_tenant")}) - def test_global_object_store_usage(self): - resources = self.resources.list() - - statistics = self.statistics.list() - user = self.ceilometer_users.list()[0] - tenant = self.ceilometer_tenants.list()[0] - - ceilometerclient = self.stub_ceilometerclient() - ceilometerclient.resources = self.mox.CreateMockAnything() - ceilometerclient.resources.list(q=IsA(list)).AndReturn(resources) - - ceilometerclient.statistics = self.mox.CreateMockAnything() - ceilometerclient.statistics.list(meter_name=IsA(str), - period=None, q=IsA(list)).\ - MultipleTimes().\ - AndReturn(statistics) - - api.ceilometer.CeilometerUsage\ - .get_user(IsA(str)).MultipleTimes().AndReturn(user) - api.ceilometer.CeilometerUsage\ - .get_tenant(IsA(str)).MultipleTimes().AndReturn(tenant) - - self.mox.ReplayAll() - - # getting all resources and with statistics - ceilometer_usage = api.ceilometer.CeilometerUsage(http.HttpRequest) - data = ceilometer_usage.global_object_store_usage( - query=["fake_query"], - with_statistics=True) - - first = data[0] - self.assertEqual(first.id, 'fake_project_id__fake_user_id__' - 'fake_resource_id') - self.assertEqual(first.user.name, 'user') - self.assertEqual(first.tenant.name, 'test_tenant') - self.assertEqual(first.resource, 'fake_resource_id') - - self.assertEqual(first.storage_objects, 4.55) - self.assertEqual(first.storage_objects_size, 4.55) - self.assertEqual(first.storage_objects_incoming_bytes, 4.55) - self.assertEqual(first.storage_objects_outgoing_bytes, 4.55) - - self.assertEqual(len(data), len(resources)) - - self.assertIsInstance(first, api.ceilometer.GlobalObjectStoreUsage)