Set average to zero when no statistics are returned
[plstackapi.git] / planetstack / openstack_observer / ceilometer.py
index f93dc1a..00c1238 100644 (file)
@@ -8,19 +8,20 @@ import re
 import datetime
 import time
 from monitor.monitordriver import *
-from core.models import *
+import pdb
 
 def object_to_filter(model_name, pk):
-       filter_dict = {
-               'Slice':[Slice, 'tenant_id', 'project_id'],
-               'Sliver':[Sliver, 'instance_id', 'resource_id'],
-               'Site':[Site, 'tenant_id', 'project_id']
-       }
-       
-       mod,field,tag = filter_dict[model_name]
-       obj = mod.objects.get(pk=pk)
-       return '%s=%s'%(tag,mod[field])
-       
+    from core.models import *
+    filter_dict = {
+            'Slice':[Slice, 'tenant_id', 'project_id'],
+            'Sliver':[Sliver, 'instance_id', 'resource_id'],
+            'Site':[Site, 'tenant_id', 'project_id']
+    }
+
+    mod,field,tag = filter_dict[model_name]
+    obj = mod.objects.get(pk=pk)
+    return '%s=%s'%(tag,getattr(obj,field))
+
 
 def cli_to_array(cli_query):
     '''This converts from the cli list of queries to what is required
@@ -70,39 +71,44 @@ def cli_to_array(cli_query):
 def meters_to_stats(meters):
     stats = DashboardStatistics()
     for m in meters:
-        timestamp = datetime.datetime.strptime(m.duration_start,'%Y-%m-%dT%H:%M:%S')
-        stats.stat_list.append({'timestamp':timestamp, 'value':m.sum})
-        stats.sum+=m.sum
-        stats.average+=m.sum
-        stats.unit = 'ns'
-
-    stats.average/=len(meters)
+        timestamp = m.duration_start
+        stats['stat_list'].append({'timestamp':timestamp, 'value':m.sum})
+        stats['sum']+=m.sum
+        stats['average']+=m.sum
+        stats['unit'] = 'ns'
+
+    if (len(meters)):
+        stats['average']/=len(meters)
+    else:
+        stats['average']=0
     return stats
-        
-                
+
 
 class CeilometerDriver(MonitorDriver):
     def get_meter(self, meter, obj, pk, keystone=None):
-        if (not keystone):
-            keystone = {}
-            keystone['username']=env['OS_USERNAME']
-            keystone['password']=env['OS_PASSWORD']
-            keystone['auth_url']=env['OS_AUTH_URL']
-            keystone['tenant_name']=env['OS_TENANT_NAME']
-            keystone['os_cacert']=env['OS_CACERT']
-
-        ceilometer_client = client._get_ksclient(**keystone)
-        token = ceilometer_client.auth_token
-
-        ceilo_endpoint = client._get_endpoint(ceilometer_client, **keystone)
-       #ceilometer = client.get_client(2, username=keystone['username'], password=keystone['password'], tenant_name=keystone['tenant_name'], auth_url=keystone['auth_url'])
-
-        ceilometer = client.Client('2',endpoint = ceilo_endpoint, token = lambda: token)
-
+        keystone = {}
+        keystone['os_username']=env['OS_USERNAME']
+        keystone['os_password']=env['OS_PASSWORD']
+        keystone['os_auth_url']=env['OS_AUTH_URL']
+        keystone['os_tenant_name']=env['OS_TENANT_NAME']
+        keystone['os_cacert']=env['OS_CACERT']
+        keystone['os_region_name']=env['OS_REGION_NAME']
+
+        keystone['username']=env['OS_USERNAME']
+        keystone['password']=env['OS_PASSWORD']
+        keystone['auth_url']=env['OS_AUTH_URL']
+        keystone['tenant_name']=env['OS_TENANT_NAME']
+        keystone['cacert']=env['OS_CACERT']
+        keystone['region_name']=env['OS_REGION_NAME']
+
+        keystone['auth_plugin']=client.AuthPlugin(**keystone)
+
+        ceilometer = client.get_client(2,**keystone)
+        
         cur_ts = datetime.datetime.fromtimestamp(time.time()-86400)
         str_ts = cur_ts.strftime('%Y-%m-%dT%H:%M:%S')
-        
-               object_filter = object_to_filter(obj, pk)
+
+        object_filter = object_to_filter(obj, pk)
         filter=';'.join([object_filter,'timestamp>%s'%str_ts])
         #query = cli_to_array("project_id=124de34266b24f57957345cdb43cc9ff;timestamp>2014-12-11T00:00:00")
         query = cli_to_array(filter)
@@ -111,4 +117,3 @@ class CeilometerDriver(MonitorDriver):
 
         stats = meters_to_stats(meters)
         return stats
-