Generic ceilometer notification listener module
Change-Id: I00be2bf7eb07d1352b4cc2e28e384736e1b363b4
diff --git a/xos/api/tenant/monitoring/dashboard/ceilometerdashboard.py b/xos/api/tenant/monitoring/dashboard/ceilometerdashboard.py
index 1333d5a..1ab8d75 100644
--- a/xos/api/tenant/monitoring/dashboard/ceilometerdashboard.py
+++ b/xos/api/tenant/monitoring/dashboard/ceilometerdashboard.py
@@ -253,6 +253,35 @@
# Here will be the cached Meter objects, that will be reused for
# repeated listing.
self._cached_meters = {}
+ self._cached_all_meters = []
+
+ def get_all(self):
+ if not self._cached_all_meters:
+ for meter in self._ceilometer_meter_list:
+ meter_info = self._all_meters_info.get(meter['name'], None)
+ if meter_info:
+ label = meter_info["label"]
+ description = meter_info["description"]
+ meter_category = meter_info["type"]
+ else:
+ label = ""
+ description = ""
+ meter_category = "Other"
+ meter["label"] = label
+ meter["description"] = description
+ meter["category"] = meter_category
+ if meter["project_id"] in self.tenant_map.keys():
+ meter["slice"] = self.tenant_map[meter["project_id"]]["slice"]
+ meter["service"] = self.tenant_map[meter["project_id"]]["service"]
+ else:
+ meter["slice"] = meter["project_id"]
+ meter["service"] = "Other"
+ if meter["resource_id"] in self.resource_map.keys():
+ meter["resource_name"] = self.resource_map[meter["resource_id"]]
+
+ self._cached_all_meters.append(meter)
+
+ return self._cached_all_meters
def list_all(self, only_meters=None, except_meters=None):
"""Returns a list of meters based on the meters names.
@@ -1253,18 +1282,7 @@
tenant_map = getTenantControllerTenantMap(request.user)
resource_map = get_resource_map(request, ceilometer_url=tenant_ceilometer_url, query=query)
meters = Meters(request, ceilometer_url=tenant_ceilometer_url, query=query, tenant_map=tenant_map, resource_map=resource_map)
- services = {
- _('Nova'): meters.list_nova(),
- _('Neutron'): meters.list_neutron(),
- _('VSG'): meters.list_vcpe(),
- _('VOLT'): meters.list_volt(),
- _('SDN'): meters.list_sdn(),
- _('BROADVIEW'): meters.list_broadview(),
- }
- meters = []
- for service,smeters in services.iteritems():
- meters.extend(smeters)
- return Response(meters)
+ return Response(meters.get_all())
class MeterStatisticsList(APIView):
method_kind = "list"
@@ -1325,43 +1343,34 @@
#Statistics query for all meter
resource_map = get_resource_map(request, ceilometer_url=tenant_ceilometer_url, query=query)
meters = Meters(request, ceilometer_url=tenant_ceilometer_url, query=query, tenant_map=tenant_map, resource_map=resource_map)
- services = {
- _('Nova'): meters.list_nova(),
- _('Neutron'): meters.list_neutron(),
- _('VSG'): meters.list_vcpe(),
- _('VOLT'): meters.list_volt(),
- _('SDN'): meters.list_sdn(),
- _('BROADVIEW'): meters.list_broadview(),
- }
report_rows = []
- for service,meters in services.items():
- for meter in meters:
- query = make_query(tenant_id=meter["project_id"],resource_id=meter["resource_id"])
- if additional_query:
- query = query + additional_query
- try:
- statistics = statistic_list(request, meter["name"],
- ceilometer_url=tenant_ceilometer_url, query=query, period=3600*24)
- except Exception as e:
- logger.error('Exception during statistics query for meter %(meter)s and reason:%(reason)s' % {'meter':meter["name"], 'reason':str(e)})
- statistics = None
+ for meter in meters.get_all():
+ query = make_query(tenant_id=meter["project_id"],resource_id=meter["resource_id"])
+ if additional_query:
+ query = query + additional_query
+ try:
+ statistics = statistic_list(request, meter["name"],
+ ceilometer_url=tenant_ceilometer_url, query=query, period=3600*24)
+ except Exception as e:
+ logger.error('Exception during statistics query for meter %(meter)s and reason:%(reason)s' % {'meter':meter["name"], 'reason':str(e)})
+ statistics = None
- if not statistics:
- continue
- statistic = statistics[-1]
- row = {"name": 'none',
- "slice": meter["slice"],
- "project_id": meter["project_id"],
- "service": meter["service"],
- "resource_id": meter["resource_id"],
- "resource_name": meter["resource_name"],
- "meter": meter["name"],
- "description": meter["description"],
- "category": service,
- "time": statistic["period_end"],
- "value": statistic["avg"],
- "unit": meter["unit"]}
- report_rows.append(row)
+ if not statistics:
+ continue
+ statistic = statistics[-1]
+ row = {"name": 'none',
+ "slice": meter["slice"],
+ "project_id": meter["project_id"],
+ "service": meter["service"],
+ "resource_id": meter["resource_id"],
+ "resource_name": meter["resource_name"],
+ "meter": meter["name"],
+ "description": meter["description"],
+ "category": meter["category"],
+ "time": statistic["period_end"],
+ "value": statistic["avg"],
+ "unit": meter["unit"]}
+ report_rows.append(row)
return Response(report_rows)