+ elif (format == "json_hpcdash"):
+ new_rows = {}
+ for row in result:
+ 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("sum_count_hostname", 0)),
+ "siteUrl": row.get("url", ""),
+ "hot": float(row.get("hotness", 0.0)),
+ "load": int(float(row.get("max_avg_cpu", 0)))}
+ new_rows[row["site"]] = new_row
+ return ("application/javascript", json.dumps(new_rows))
+
+ def only_largest(self, rows, fieldName):
+ """ Given a fieldName, only return the set of rows that had the
+ maximum value of that fieldName.
+ """
+ maxVal = max( [int(row[fieldName]) for row in rows] )
+ new_rows = [row for row in rows if int(row[fieldName])==maxVal]
+ return new_rows
+
+ def merge_datamodel_sites(self, rows):
+ """ For a query that included "site" in its groupby, merge in the
+ opencloud site information.
+ """
+ for row in rows:
+ sitename = row["site"]
+ try:
+ model_site = Site.objects.get(name=sitename)
+ except:
+ # we didn't find it in the data model
+ continue
+
+ 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()
+
+ if "max_avg_cpu" in row:
+ cpu=float(row["max_avg_cpu"])/100.0
+ row["hotness"] = max(0.0, ((cpu*RED_LOAD) - BLUE_LOAD)/(RED_LOAD-BLUE_LOAD))
+