Source code for openstack_dashboard.dashboards.admin.metering.tabs

# 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.utils.translation import ugettext_lazy as _

from horizon import exceptions
from horizon import messages
from horizon import tabs

from openstack_dashboard.api import ceilometer

from openstack_dashboard.dashboards.admin.metering import \
    tables as metering_tables

from openstack_dashboard.utils import metering


[docs]class GlobalStatsTab(tabs.TableTab): name = _("Stats") slug = "stats" template_name = "admin/metering/stats.html" preload = False table_classes = (metering_tables.UsageTable,)
[docs] def get_context_data(self, request): meters = ceilometer.Meters(request) if not meters._ceilometer_meter_list: msg = _("There are no meters defined yet.") messages.warning(request, msg) context = { 'nova_meters': meters.list_nova(), 'neutron_meters': meters.list_neutron(), 'glance_meters': meters.list_glance(), 'cinder_meters': meters.list_cinder(), 'swift_meters': meters.list_swift(), 'kwapi_meters': meters.list_kwapi(), 'ipmi_meters': meters.list_ipmi(), } return context
[docs]class UsageReportTab(tabs.TableTab): name = _("Usage Report") slug = "usage_report" template_name = "horizon/common/_detail_table.html" table_classes = (metering_tables.ReportTable,)
[docs] def get_report_table_data(self): meters = ceilometer.Meters(self.request) services = { _('Nova'): meters.list_nova(), _('Neutron'): meters.list_neutron(), _('Glance'): meters.list_glance(), _('Cinder'): meters.list_cinder(), _('Swift_meters'): meters.list_swift(), _('Kwapi'): meters.list_kwapi(), _('IPMI'): meters.list_ipmi(), } report_rows = [] date_options = self.request.session.get('period', 1) date_from = self.request.session.get('date_from', '') date_to = self.request.session.get('date_to', '') try: date_from, date_to = metering.calc_date_args(date_from, date_to, date_options) except Exception: exceptions.handle(self.request, _('Dates cannot be recognized.')) try: project_aggregates = metering.ProjectAggregatesQuery(self.request, date_from, date_to, 3600 * 24) except Exception: exceptions.handle(self.request, _('Unable to retrieve project list.')) for meter in meters._cached_meters.values(): service = None for name, m_list in services.items(): if meter in m_list: service = name break res, unit = project_aggregates.query(meter.name) for re in res: values = re.get_meter(meter.name.replace(".", "_")) if values: for value in values: row = {"name": 'none', "project": re.id, "meter": meter.name, "description": meter.description, "service": service, "time": value._apiresource.period_end, "value": value._apiresource.avg, "unit": meter.unit} report_rows.append(row) return report_rows
[docs]class CeilometerOverviewTabs(tabs.TabGroup): slug = "ceilometer_overview" tabs = (UsageReportTab, GlobalStatsTab,) sticky = True

Project Source