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)