2222from cloudkittydashboard .dashboards .admin .summary import tables as sum_tables
2323from cloudkittydashboard import utils
2424
25+ from cloudkittydashboard import forms
26+
2527rate_prefix = getattr (settings ,
2628 'OPENSTACK_CLOUDKITTY_RATE_PREFIX' , None )
2729rate_postfix = getattr (settings ,
@@ -35,8 +37,7 @@ class IndexView(tables.DataTableView):
3537 def get_data (self ):
3638 summary = api .cloudkittyclient (
3739 self .request , version = '2' ).summary .get_summary (
38- groupby = ['project_id' ],
39- response_format = 'object' )
40+ groupby = ['project_id' ], response_format = 'object' )
4041
4142 tenants , unused = api_keystone .tenant_list (self .request )
4243 tenants = {tenant .id : tenant .name for tenant in tenants }
@@ -47,6 +48,7 @@ def get_data(self):
4748 'project_id' : 'ALL' ,
4849 'rate' : total ,
4950 })
51+
5052 data = api .identify (data , key = 'project_id' )
5153 for tenant in data :
5254 tenant ['tenant_id' ] = tenant .get ('project_id' )
@@ -60,27 +62,42 @@ def get_data(self):
6062class TenantDetailsView (tables .DataTableView ):
6163 template_name = 'admin/rating_summary/details.html'
6264 table_class = sum_tables .TenantSummaryTable
63- page_title = _ ("Script details: {{ table.project_id }}" )
65+
66+ def get_context_data (self , ** kwargs ):
67+ context = super ().get_context_data (** kwargs )
68+ context ['groupby_list' ] = getattr (settings ,
69+ 'OPENSTACK_CLOUDKITTY_GROUPBY_LIST' ,
70+ ['type' ])
71+ return context
6472
6573 def get_data (self ):
6674 tenant_id = self .kwargs ['project_id' ]
75+ form = forms .CheckBoxForm (self .request .GET )
76+ groupby = form .get_selected_fields ()
6777
6878 if tenant_id == 'ALL' :
6979 summary = api .cloudkittyclient (
70- self .request , version = '2' ). summary . get_summary (
71- groupby = [ 'type' ] , response_format = 'object' )
80+ self .request , version = '2'
81+ ). summary . get_summary ( groupby = groupby , response_format = 'object' )
7282 else :
7383 summary = api .cloudkittyclient (
74- self .request , version = '2' ).summary .get_summary (
75- filters = {'project_id' : tenant_id },
76- groupby = ['type' ], response_format = 'object' )
84+ self .request , version = '2'
85+ ).summary .get_summary (
86+ filters = {'project_id' : tenant_id },
87+ groupby = groupby ,
88+ response_format = 'object' ,
89+ )
7790
7891 data = summary .get ('results' )
7992 total = sum ([r .get ('rate' ) for r in data ])
80- data .append ({'type' : 'TOTAL' , 'rate' : total })
8193
82- for item in data :
83- item ['rate' ] = utils .formatRate (item ['rate' ],
84- rate_prefix , rate_postfix )
94+ if not groupby :
95+ data = [{'type' : 'TOTAL' , 'rate' : total }]
96+
97+ else :
98+ data .append ({'type' : 'TOTAL' , 'rate' : total })
99+ for item in data :
100+ item ['rate' ] = utils .formatRate (
101+ item ['rate' ], rate_prefix , rate_postfix )
85102
86103 return data
0 commit comments