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'
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
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():
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']
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):
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
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
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