Changed project uuid to project name
in overview page, to keep consistency in display views. At the moment UUID is only shown for Detail views, and for Project/Users tables in Syspanel, as there are no detail views for them. Also a table caption was changed from Tenant to Project Name Fixes bug 999392 Change-Id: Ie998d66d78fca713c33f61d2f62484e511097bf3
This commit is contained in:
parent
8fd77f047f
commit
216f41a883
@ -59,7 +59,7 @@ class SyspanelInstancesTable(tables.DataTable):
|
|||||||
TASK_DISPLAY_CHOICES = (
|
TASK_DISPLAY_CHOICES = (
|
||||||
("image_snapshot", "Snapshotting"),
|
("image_snapshot", "Snapshotting"),
|
||||||
)
|
)
|
||||||
tenant = tables.Column("tenant_name", verbose_name=_("Tenant"))
|
tenant = tables.Column("tenant_name", verbose_name=_("Project Name"))
|
||||||
# NOTE(gabriel): Commenting out the user column because all we have
|
# NOTE(gabriel): Commenting out the user column because all we have
|
||||||
# is an ID, and correlating that at production scale using our current
|
# is an ID, and correlating that at production scale using our current
|
||||||
# techniques isn't practical. It can be added back in when we have names
|
# techniques isn't practical. It can be added back in when we have names
|
||||||
|
92
horizon/dashboards/syspanel/overview/tests.py
Normal file
92
horizon/dashboards/syspanel/overview/tests.py
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||||
|
|
||||||
|
# Copyright 2012 United States Government as represented by the
|
||||||
|
# Administrator of the National Aeronautics and Space Administration.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Copyright 2012 Nebula, Inc.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
from django import http
|
||||||
|
from django.core.urlresolvers import reverse
|
||||||
|
from mox import IsA
|
||||||
|
|
||||||
|
from horizon import api
|
||||||
|
from horizon import test
|
||||||
|
from horizon import usage
|
||||||
|
from horizon.templatetags.sizeformat import mbformat
|
||||||
|
|
||||||
|
|
||||||
|
INDEX_URL = reverse('horizon:nova:overview:index')
|
||||||
|
|
||||||
|
|
||||||
|
class UsageViewTests(test.BaseAdminViewTests):
|
||||||
|
def tearDown(self):
|
||||||
|
super(UsageViewTests, self).tearDown()
|
||||||
|
self.reset_times() # override_times is called in the tests
|
||||||
|
|
||||||
|
@test.create_stubs({api: ('usage_list',),
|
||||||
|
api.keystone: ('tenant_list',)})
|
||||||
|
def test_usage(self):
|
||||||
|
now = self.override_times()
|
||||||
|
usage_obj = api.nova.Usage(self.usages.first())
|
||||||
|
api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
|
||||||
|
.AndReturn(self.tenants.list())
|
||||||
|
api.usage_list(IsA(http.HttpRequest),
|
||||||
|
datetime.datetime(now.year, now.month, 1,
|
||||||
|
now.hour, now.minute, now.second),
|
||||||
|
datetime.datetime(now.year, now.month, now.day, now.hour,
|
||||||
|
now.minute, now.second)) \
|
||||||
|
.AndReturn([usage_obj])
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
res = self.client.get(reverse('horizon:syspanel:overview:index'))
|
||||||
|
self.assertTemplateUsed(res, 'syspanel/overview/usage.html')
|
||||||
|
self.assertTrue(isinstance(res.context['usage'], usage.GlobalUsage))
|
||||||
|
self.assertContains(res, '<td class="">test_tenant</td>'
|
||||||
|
'<td class="">%s</td><td class="">%s</td>'
|
||||||
|
'<td class="">%s</td><td class="">%.2f</td>'
|
||||||
|
'<td class="">%.2f</td>' %
|
||||||
|
(usage_obj.vcpus,
|
||||||
|
usage_obj.disk_gb_hours,
|
||||||
|
mbformat(usage_obj.memory_mb),
|
||||||
|
usage_obj.vcpu_hours,
|
||||||
|
usage_obj.total_local_gb_usage))
|
||||||
|
|
||||||
|
@test.create_stubs({api: ('usage_list',),
|
||||||
|
api.keystone: ('tenant_list',)})
|
||||||
|
def test_usage_csv(self):
|
||||||
|
now = self.override_times()
|
||||||
|
usage_obj = api.nova.Usage(self.usages.first())
|
||||||
|
api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
|
||||||
|
.AndReturn(self.tenants.list())
|
||||||
|
api.usage_list(IsA(http.HttpRequest),
|
||||||
|
datetime.datetime(now.year, now.month, 1,
|
||||||
|
now.hour, now.minute, now.second),
|
||||||
|
datetime.datetime(now.year, now.month, now.day, now.hour,
|
||||||
|
now.minute, now.second)) \
|
||||||
|
.AndReturn([usage_obj])
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
csv_url = reverse('horizon:syspanel:overview:index') + "?format=csv"
|
||||||
|
res = self.client.get(csv_url)
|
||||||
|
self.assertTemplateUsed(res, 'syspanel/overview/usage.csv')
|
||||||
|
self.assertTrue(isinstance(res.context['usage'], usage.GlobalUsage))
|
||||||
|
self.assertContains(res, 'Tenant,VCPUs,RamMB,DiskGB,Usage(Hours)\n'
|
||||||
|
'%s,%s,%s,%s,%f' %
|
||||||
|
(usage_obj.tenant_id,
|
||||||
|
usage_obj.vcpus,
|
||||||
|
usage_obj.memory_mb,
|
||||||
|
usage_obj.disk_gb_hours,
|
||||||
|
usage_obj.vcpu_hours))
|
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
from horizon import api
|
||||||
from horizon import usage
|
from horizon import usage
|
||||||
|
|
||||||
|
|
||||||
@ -32,3 +33,16 @@ class GlobalOverview(usage.UsageView):
|
|||||||
context = super(GlobalOverview, self).get_context_data(**kwargs)
|
context = super(GlobalOverview, self).get_context_data(**kwargs)
|
||||||
context['monitoring'] = getattr(settings, 'EXTERNAL_MONITORING', [])
|
context['monitoring'] = getattr(settings, 'EXTERNAL_MONITORING', [])
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
def get_data(self):
|
||||||
|
data = super(GlobalOverview, self).get_data()
|
||||||
|
# Pre-fill tenant names
|
||||||
|
tenants = api.keystone.tenant_list(self.request,
|
||||||
|
admin=True)
|
||||||
|
for instance in data:
|
||||||
|
tenant = filter(lambda t: t.id == instance.tenant_id, tenants)
|
||||||
|
if tenant:
|
||||||
|
instance.tenant_name = getattr(tenant[0], "name", None)
|
||||||
|
else:
|
||||||
|
instance.tenant_name = None
|
||||||
|
return data
|
||||||
|
@ -25,7 +25,7 @@ class BaseUsageTable(tables.DataTable):
|
|||||||
|
|
||||||
|
|
||||||
class GlobalUsageTable(BaseUsageTable):
|
class GlobalUsageTable(BaseUsageTable):
|
||||||
tenant = tables.Column('tenant_id', verbose_name=_("Project ID"))
|
tenant = tables.Column('tenant_name', verbose_name=_("Project Name"))
|
||||||
disk_hours = tables.Column('disk_gb_hours',
|
disk_hours = tables.Column('disk_gb_hours',
|
||||||
verbose_name=_("Disk GB Hours"),
|
verbose_name=_("Disk GB Hours"),
|
||||||
filters=(lambda v: floatformat(v, 2),))
|
filters=(lambda v: floatformat(v, 2),))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user