|
- # 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.core import urlresolvers
- from django.template.defaultfilters import floatformat # noqa
- from django.template.defaultfilters import timesince # noqa
- from django.utils.translation import ugettext_lazy as _ # noqa
-
- from horizon import tables
- from horizon.templatetags import sizeformat
- from horizon.utils import filters
-
-
- class CSVSummary(tables.LinkAction):
- name = "csv_summary"
- verbose_name = _("Download CSV Summary")
- classes = ("btn-download",)
-
- def get_link_url(self, usage=None):
- return self.table.kwargs['usage'].csv_link()
-
-
- class BaseUsageTable(tables.DataTable):
- vcpus = tables.Column('vcpus', verbose_name=_("VCPUs"))
- disk = tables.Column('local_gb', verbose_name=_("Disk"))
- memory = tables.Column('memory_mb',
- verbose_name=_("RAM"),
- filters=(sizeformat.mbformat,),
- attrs={"data-type": "size"})
- hours = tables.Column('vcpu_hours', verbose_name=_("VCPU Hours"),
- filters=(lambda v: floatformat(v, 2),))
-
-
- class GlobalUsageTable(BaseUsageTable):
- project = tables.Column('project_name', verbose_name=_("Project Name"))
- disk_hours = tables.Column('disk_gb_hours',
- verbose_name=_("Disk GB Hours"),
- filters=(lambda v: floatformat(v, 2),))
-
- def get_object_id(self, datum):
- return datum.tenant_id
-
- class Meta:
- name = "global_usage"
- verbose_name = _("Usage Summary")
- columns = ("project", "vcpus", "disk", "memory",
- "hours", "disk_hours")
- table_actions = (CSVSummary,)
- multi_select = False
-
-
- def get_instance_link(datum):
- view = "horizon:project:instances:detail"
- if datum.get('instance_id', False):
- return urlresolvers.reverse(view, args=(datum.get('instance_id'),))
- else:
- return None
-
-
- class ProjectUsageTable(BaseUsageTable):
- instance = tables.Column('name',
- verbose_name=_("Instance Name"),
- link=get_instance_link)
- uptime = tables.Column('uptime_at',
- verbose_name=_("Uptime"),
- filters=(filters.timesince_sortable,),
- attrs={'data-type': 'timesince'})
-
- def get_object_id(self, datum):
- return datum.get('instance_id', id(datum))
-
- class Meta:
- name = "project_usage"
- verbose_name = _("Usage Summary")
- columns = ("instance", "vcpus", "disk", "memory", "uptime")
- table_actions = (CSVSummary,)
- multi_select = False
|