remove debugging code
[plstackapi.git] / planetstack / core / plus / views.py
index e37faef..6ff6d9e 100644 (file)
@@ -24,7 +24,7 @@ if os.path.exists("/home/smbaker/projects/vicci/cdn/bigquery"):
 else:
     sys.path.append("/opt/planetstack/hpc_wizard")
 import hpc_wizard
-from planetstack_analytics import DoPlanetStackAnalytics
+from planetstack_analytics import DoPlanetStackAnalytics, PlanetStackAnalytics
 
 class DashboardWelcomeView(TemplateView):
     template_name = 'admin/dashboard/welcome.html'
@@ -86,7 +86,8 @@ def getTenantSliceInfo(user, tableFormat = False):
     tenantSliceDetails['image']=userSliceTableFormatter(getImageInfo(user))
     tenantSliceDetails['network']=userSliceTableFormatter(getNetworkInfo(user))
     tenantSliceDetails['deploymentSites']=userSliceTableFormatter(getDeploymentSites())
-    tenantSliceDetails['sites'] = userSliceTableFormatter(getTenantSitesInfo());
+    tenantSliceDetails['sites'] = userSliceTableFormatter(getTenantSitesInfo())
+    tenantSliceDetails['mountDataSets'] = userSliceTableFormatter(getMountDataSets())
     return tenantSliceDetails
 
 
@@ -105,10 +106,10 @@ def getTenantInfo(user):
             numSliver +=sliver.numberCores
            # sliceSite[sliver.deploymentNetwork.name] =sliceSite.get(sliver.deploymentNetwork.name,0) + 1
            if sliver.node.site.name in BLESSED_SITES:
-                print "equal",sliver.node.site.name
                 sliceSite[sliver.node.site.name] = sliceSite.get(sliver.node.site.name,0) + 1
                 sliceImage = sliver.image.name
-       userSliceInfo.append({'sliceName': sliceName,'sliceServiceClass': sliceServiceClass,'preferredImage':preferredImage, 'sliceSite':sliceSite,'sliceImage':sliceImage,'numOfSlivers':numSliver})
+       numSites = len(sliceSite)
+       userSliceInfo.append({'sliceName': sliceName,'sliceServiceClass': sliceServiceClass,'preferredImage':preferredImage,'numOfSites':numSites, 'sliceSite':sliceSite,'sliceImage':sliceImage,'numOfSlivers':numSliver})
     return userSliceInfo
 
 def getTenantSitesInfo():
@@ -133,12 +134,21 @@ def getServiceClassInfo(user):
     return sliceInfo
 
 def getImageInfo(user):
-    imageList = Image.objects.all()
+    #imageList = Image.objects.all()
+    imageList = ['Fedora 16 LXC rev 1.3','Hadoop','MPI']
     imageInfo = []
     for imageEntry in imageList:
-          imageInfo.append({'Image':imageEntry.name})
+          #imageInfo.append({'Image':imageEntry.name})
+          imageInfo.append({'Image':imageEntry})
     return imageInfo
 
+def getMountDataSets():
+        dataSetList = ['GenBank','LSST','LHC','NOAA','Measurement Lab','Common Crawl']\r
+        dataSetInfo = []\r
+        for entry in dataSetList:\r
+                dataSetInfo.append({'DataSet':entry})\r
+        return dataSetInfo
+
 def getNetworkInfo(user):
    #networkList = Network.objects.all()
     networkList = ['Private Only','Private and Publicly Routable']
@@ -192,13 +202,32 @@ def getSliceInfo(user):
     return userSliceInfo
 
 def getCDNOperatorData(randomizeData = False):
-    return hpc_wizard.get_hpc_wizard().get_sites_for_view()
+    bq = PlanetStackAnalytics()
+
+    #hpc_sliceNames = bq.service_to_sliceNames("HPC Service")
+
+    rows = bq.get_cached_query_results(bq.compose_latest_query())
+
+    #rows = [x for x in rows if x.get("slice","") in hpc_sliceNames]
 
-def getPageSummary(request):
-    slice = request.GET.get('slice', None)
-    site = request.GET.get('site', None)
-    node = request.GET.get('node', None)
+    rows = bq.postprocess_results(rows, filter={"slice": "HyperCache"}, maxi=["cpu"], count=["hostname"], computed=["bytes_sent/elapsed"], groupBy=["Time","site"])
 
+    bq.merge_datamodel_sites(rows)
+
+    new_rows = {}
+    for row in rows:
+        new_row = {"lat": float(row.get("lat", 0)),
+               "long": float(row.get("long", 0)),
+               "health": 0,
+               "numNodes": int(row.get("numNodes",0)),
+               "numHPCSlivers": int(row.get("count_hostname", 0)),
+               "siteUrl": str(row.get("url", "")),
+               "hot": float(row.get("hotness", 0.0)),
+               "bandwidth": row.get("sum_computed_bytes_sent_div_elapsed",0),
+               "load": int(float(row.get("max_avg_cpu", row.get("max_cpu",0))))}
+        new_rows[str(row["site"])] = new_row
+
+    return new_rows
 
 class SimulatorView(View):
     def get(self, request, **kwargs):
@@ -276,7 +305,7 @@ def slice_increase_slivers(user, user_ip, siteList, slice, count, noAct=False):
             node.sliverCount = 0
             for sliver in node.slivers.all():
                  if sliver.slice.id == slice.id:
-                     node.sliverCount = node.sliverCount +1
+                     node.sliverCount = node.sliverCount + 1
 
     # Allocate slivers to nodes
     # for now, assume we want to allocate all slivers from the same site
@@ -309,27 +338,35 @@ def slice_increase_slivers(user, user_ip, siteList, slice, count, noAct=False):
 
 def slice_decrease_slivers(user, siteList, slice, count, noAct=False):
     sitesChanged = {}
-
+    sliverList ={}
     if siteList:
         siteNames = [site.name for site in siteList]
     else:
         siteNames = None
 
     for sliver in slice.slivers.all():
-        if (count <= 0):
-            break
-
-        node = sliver.node
-        if (not siteNames) or (node.site.name in siteNames):
-            print "deleting sliver", sliver, "at node", node.name, "of site", node.site.name
-            if not noAct:
-                sliver.delete()
-            count = count -1
-
-            sitesChanged[node.site.name] = sitesChanged.get(node.site.name,0) - 1
-
+        if(not siteNames) or (sliver.node.site.name in siteNames):\r
+                node = sliver.node\r
+                sliverList[sliver.name]=node.name
+
+    for key in sliverList:
+        if count>0:
+            sliver = Sliver.objects.filter(name=key)\r
+            sliver.delete()\r
+            print "deleting sliver",sliverList[key],"at node",sliver.node.name\r
+            count=count-1\r
+            sitesChanged[node.site.name] = sitesChanged.get(node.site.name,0) - 1\r
+\r
     return sitesChanged
 
+class TenantDeleteSliceView(View):
+        def post(self,request):\r
+                sliceName = request.POST.get("sliceName",None)\r
+                slice = Slice.objects.get(name=sliceName)\r
+                print slice, slice.id\r
+                sliceToDel=Slice(name=sliceName, id=slice.id)\r
+                sliceToDel.delete()
+
 class TenantAddOrRemoveSliverView(View):
     """ Add or remove slivers from a Slice
 
@@ -395,7 +432,22 @@ class TenantPickSitesView(View):
 
 class DashboardSummaryAjaxView(View):
     def get(self, request, **kwargs):
-        return HttpResponse(json.dumps(hpc_wizard.get_hpc_wizard().get_summary_for_view()), mimetype='application/javascript')
+        def avg(x):
+            return float(sum(x))/len(x)
+
+        sites = getCDNOperatorData().values()
+
+        sites = [site for site in sites if site["numHPCSlivers"]>0]
+
+        total_slivers = sum( [site["numHPCSlivers"] for site in sites] )
+        total_bandwidth = sum( [site["bandwidth"] for site in sites] )
+        average_cpu = int(avg( [site["load"] for site in sites] ))
+
+        result= {"total_slivers": total_slivers,
+                "total_bandwidth": total_bandwidth,
+                "average_cpu": average_cpu}
+
+        return HttpResponse(json.dumps(result), mimetype='application/javascript')
 
 class DashboardAddOrRemoveSliverView(View):
     # TODO: deprecate this view in favor of using TenantAddOrRemoveSliverView