report allocated slivers in addition to active slivers
[plstackapi.git] / planetstack / hpc_wizard / planetstack_analytics.py
index 8fee0dc..5287e2f 100644 (file)
@@ -196,10 +196,17 @@ class PlanetStackAnalytics(BigQueryAnalytics):
 
             return ("text/html", new_result)
 
-    def merge_datamodel_sites(self, rows):
+    def merge_datamodel_sites(self, rows, slice=None):
         """ For a query that included "site" in its groupby, merge in the
             opencloud site information.
         """
+
+        if slice:
+            try:
+                slice = Slice.objects.get(name=slice)
+            except:
+                slice = None
+
         for row in rows:
             sitename = row["site"]
             try:
@@ -208,10 +215,17 @@ class PlanetStackAnalytics(BigQueryAnalytics):
                 # we didn't find it in the data model
                 continue
 
+            allocated_slivers = 0
+            if model_site and slice:
+                for sliver in slice.slivers.all():
+                    if sliver.node.site == model_site:
+                        allocated_slivers = allocated_slivers + 1
+
             row["lat"] = float(model_site.location.latitude)
             row["long"] = float(model_site.location.longitude)
             row["url"] = model_site.site_url
             row["numNodes"] = model_site.nodes.count()
+            row["allocated_slivers"] = allocated_slivers
 
             max_cpu = row.get("max_avg_cpu", row.get("max_cpu",0))
             cpu=float(max_cpu)/100.0
@@ -311,18 +325,19 @@ class PlanetStackAnalytics(BigQueryAnalytics):
             table = {}
             table["cols"] = self.schema_to_cols(bq_result["schema"])
             rows = []
-            for row in bq_result["rows"]:
-                rowcols = []
-                for (colnum,col) in enumerate(row["f"]):
-                    if (colnum==0):
-                        dt = datetime.datetime.fromtimestamp(float(col["v"]))
-                        rowcols.append({"v": 'new Date("%s")' % dt.isoformat()})
-                    else:
-                        try:
-                            rowcols.append({"v": float(col["v"])})
-                        except:
-                            rowcols.append({"v": col["v"]})
-                rows.append({"c": rowcols})
+            if "rows" in bq_result:
+                for row in bq_result["rows"]:
+                    rowcols = []
+                    for (colnum,col) in enumerate(row["f"]):
+                        if (colnum==0):
+                            dt = datetime.datetime.fromtimestamp(float(col["v"]))
+                            rowcols.append({"v": 'new Date("%s")' % dt.isoformat()})
+                        else:
+                            try:
+                                rowcols.append({"v": float(col["v"])})
+                            except:
+                                rowcols.append({"v": col["v"]})
+                    rows.append({"c": rowcols})
             table["rows"] = rows
 
             if tqx: