From 06d2c03f5287505bdc5ad7ff3726fdeebf10dda8 Mon Sep 17 00:00:00 2001 From: Siobhan Tully Date: Sun, 23 Feb 2014 23:48:52 -0500 Subject: [PATCH] Added in ajax support for refreshing hpcdashboard view based on polling - without having to redraw/refresh page. --- planetstack/core/plus/sites.py | 6 +- planetstack/core/plus/views.py | 331 +++++++++--------- .../templates/admin/dashboard/welcome.html | 106 ++++-- 3 files changed, 262 insertions(+), 181 deletions(-) diff --git a/planetstack/core/plus/sites.py b/planetstack/core/plus/sites.py index da86a10..27ae352 100644 --- a/planetstack/core/plus/sites.py +++ b/planetstack/core/plus/sites.py @@ -12,13 +12,15 @@ class AdminMixin(object): def get_urls(self): """Add our dashboard view to the admin urlconf. Deleted the default index.""" from django.conf.urls import patterns, url - from views import DashboardWelcomeView + from views import DashboardWelcomeView, DashboardAjaxView urls = super(AdminMixin, self).get_urls() del urls[0] custom_url = patterns('', url(r'^$', self.admin_view(DashboardWelcomeView.as_view()), - name="index") + name="index"), + url(r'^hpcdashboard/', self.admin_view(DashboardAjaxView.as_view()), + name="hpcdashboard") ) return custom_url + urls diff --git a/planetstack/core/plus/views.py b/planetstack/core/plus/views.py index b49e3a3..653ee95 100644 --- a/planetstack/core/plus/views.py +++ b/planetstack/core/plus/views.py @@ -1,177 +1,196 @@ #views.py -from django.views.generic import TemplateView +from django.views.generic import TemplateView, View +import datetime +import json from core.models import Slice,SliceRole,SlicePrivilege,Site,Reservation +from django.http import HttpResponse + class DashboardWelcomeView(TemplateView): template_name = 'admin/dashboard/welcome.html' def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) - sliceList = Slice.objects.all() try: site = Site.objects.filter(id=request.user.site.id) except: site = Site.objects.filter(name="Princeton") context['site'] = site[0] - slicePrivs = SlicePrivilege.objects.filter(user=request.user) - userSliceInfo = [] - for entry in slicePrivs: + context['userSliceInfo'] = getSliceInfo(request, context) + context['cdnData'] = getCDNOperatorData(); + return self.render_to_response(context=context) - try: - reservationList = Reservation.objects.filter(slice=entry.slice) - reservations = (True,reservationList) +def getSliceInfo(request, context): + sliceList = Slice.objects.all() + slicePrivs = SlicePrivilege.objects.filter(user=request.user) + userSliceInfo = [] + for entry in slicePrivs: - except: - reservations = None + try: + reservationList = Reservation.objects.filter(slice=entry.slice) + reservations = (True,reservationList) - userSliceInfo.append({'slice': Slice.objects.get(id=entry.slice.id), - 'role': SliceRole.objects.get(id=entry.role.id).role, - 'reservations': reservations}) + except: + reservations = None + + userSliceInfo.append({'slice': Slice.objects.get(id=entry.slice.id), + 'role': SliceRole.objects.get(id=entry.role.id).role, + 'reservations': reservations}) + return userSliceInfo + + +def getCDNOperatorData(randomizeData = False): + cdnData = { + "Arizona": { + "lat": 32.2333, + "long": -110.94799999999998, + "health": 0, + "numNodes": 15, + "numHPCSlivers": 2, + "siteUrl": "http://www.cs.arizona.edu/" + }, + "I2 Singapore": { + "lat": 1.33544, + "long": 103.88999999999999, + "health": 0, + "numNodes": 15, + "numHPCSlivers": 5, + "siteUrl": "http://www.internet2.edu/" + }, + "ON.Lab": { + "lat": 37.452955, + "long": -122.18176599999998, + "health": 0, + "numNodes": 45, + "numHPCSlivers": 12, + "siteUrl": "http://www.onlab.us/" + }, + "I2 Washington DC": { + "lat": 38.009, + "long": -77.00029999999998, + "health": 0, + "numNodes": 50, + "numHPCSlivers": 7, + "siteUrl": "http://www.internet2.edu/" + }, + "I2 Seattle": { + "lat": 47.6531, + "long": -122.31299999999999, + "health": 0, + "numNodes": 100, + "numHPCSlivers": 10, + "siteUrl": "http://www.internet2.edu/" + }, + "I2 Salt Lake City": { + "lat": 40.7659, + "long": -111.844, + "health": 0, + "numNodes": 35, + "numHPCSlivers": 10, + "siteUrl": "http://www.internet2.edu/" + }, + "I2 New York": { + "lat": 40.72, + "long": -73.99000000000001, + "health": 0, + "numNodes": 25, + "numHPCSlivers": 4, + "siteUrl": "http://www.internet2.edu/" + }, + "I2 Los Angeles": { + "lat": 33.2505, + "long": -117.50299999999999, + "health": 0, + "numNodes": 20, + "numHPCSlivers": 10, + "siteUrl": "http://www.internet2.edu/" + }, + "I2 Kansas City": { + "lat": 39.0012, + "long": -94.00630000000001, + "health": 0, + "numNodes": 17, + "numHPCSlivers": 8, + "siteUrl": "http://www.internet2.edu/" + }, + "I2 Houston": { + "lat": 29.0077, + "long": -95.00369999999998, + "health": 0, + "numNodes": 15, + "numHPCSlivers": 10, + "siteUrl": "http://www.internet2.edu/" + }, + "I2 Chicago": { + "lat": 41.0085, + "long": -87.00650000000002, + "health": 0, + "numNodes": 15, + "numHPCSlivers": 10, + "siteUrl": "http://www.internet2.edu/" + }, + "I2 Atlanta": { + "lat": 33.0075, + "long": -84.00380000000001, + "health": 0, + "numNodes": 15, + "numHPCSlivers": 10, + "siteUrl": "http://www.internet2.edu/" + }, + "MaxPlanck": { + "lat": 49.14, + "long": 6.588999999999942, + "health": 0, + "numNodes": 15, + "numHPCSlivers": 10, + "siteUrl": "http://www.mpi-sws.mpg.de/" + }, + "GeorgiaTech": { + "lat": 33.7772, + "long": -84.39760000000001, + "health": 0, + "numNodes": 15, + "numHPCSlivers": 10, + "siteUrl": "http://www.gatech.edu/" + }, + "Princeton": { + "lat": 40.3502, + "long": -74.6524, + "health": 0, + "numNodes": 15, + "numHPCSlivers": 10, + "siteUrl": "http://princeton.edu/" + }, + "Washington": { + "lat": 47.6531, + "long": -122.31299999999999, + "health": 0, + "numNodes": 15, + "numHPCSlivers": 10, + "siteUrl": "https://www.washington.edu/" + }, + "Stanford": { + "lat": 37.4294, + "long": -122.17200000000003, + "health": 0, + "numNodes": 15, + "numHPCSlivers": 10, + "siteUrl": "http://www.stanford.edu/" + }, + } + + if randomizeData: + cdnData["Siobhan"] = { "lat": 43.34203, "long": -70.56351, "health": 10, "numNodes": 5, "numHPCSlivers": 3, "siteUrl": "https:devonrexes"} + del cdnData["Princeton"] + cdnData["I2 Seattle"]['siteUrl'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + cdnData["I2 Salt Lake City"]["numHPCSlivers"] = 34 - context['userSliceInfo'] = userSliceInfo - context['cdnData'] = self.getCDNOperatorData(); - return self.render_to_response(context=context) - def getCDNOperatorData(self): - cdnData = { - "Arizona": { - "lat": 32.2333, - "long": -110.94799999999998, - "health": 0, - "numNodes": 15, - "numHPCSlivers": 2, - "siteUrl": "http://www.cs.arizona.edu/" - }, - "I2 Singapore": { - "lat": 1.33544, - "long": 103.88999999999999, - "health": 0, - "numNodes": 15, - "numHPCSlivers": 5, - "siteUrl": "http://www.internet2.edu/" - }, - "ON.Lab": { - "lat": 37.452955, - "long": -122.18176599999998, - "health": 0, - "numNodes": 45, - "numHPCSlivers": 12, - "siteUrl": "http://www.onlab.us/" - }, - "I2 Washington DC": { - "lat": 38.009, - "long": -77.00029999999998, - "health": 0, - "numNodes": 50, - "numHPCSlivers": 7, - "siteUrl": "http://www.internet2.edu/" - }, - "I2 Seattle": { - "lat": 47.6531, - "long": -122.31299999999999, - "health": 0, - "numNodes": 100, - "numHPCSlivers": 10, - "siteUrl": "http://www.internet2.edu/" - }, - "I2 Salt Lake City": { - "lat": 40.7659, - "long": -111.844, - "health": 0, - "numNodes": 35, - "numHPCSlivers": 10, - "siteUrl": "http://www.internet2.edu/" - }, - "I2 New York": { - "lat": 40.72, - "long": -73.99000000000001, - "health": 0, - "numNodes": 25, - "numHPCSlivers": 4, - "siteUrl": "http://www.internet2.edu/" - }, - "I2 Los Angeles": { - "lat": 33.2505, - "long": -117.50299999999999, - "health": 0, - "numNodes": 20, - "numHPCSlivers": 10, - "siteUrl": "http://www.internet2.edu/" - }, - "I2 Kansas City": { - "lat": 39.0012, - "long": -94.00630000000001, - "health": 0, - "numNodes": 17, - "numHPCSlivers": 8, - "siteUrl": "http://www.internet2.edu/" - }, - "I2 Houston": { - "lat": 29.0077, - "long": -95.00369999999998, - "health": 0, - "numNodes": 15, - "numHPCSlivers": 10, - "siteUrl": "http://www.internet2.edu/" - }, - "I2 Chicago": { - "lat": 41.0085, - "long": -87.00650000000002, - "health": 0, - "numNodes": 15, - "numHPCSlivers": 10, - "siteUrl": "http://www.internet2.edu/" - }, - "I2 Atlanta": { - "lat": 33.0075, - "long": -84.00380000000001, - "health": 0, - "numNodes": 15, - "numHPCSlivers": 10, - "siteUrl": "http://www.internet2.edu/" - }, - "MaxPlanck": { - "lat": 49.14, - "long": 6.588999999999942, - "health": 0, - "numNodes": 15, - "numHPCSlivers": 10, - "siteUrl": "http://www.mpi-sws.mpg.de/" - }, - "GeorgiaTech": { - "lat": 33.7772, - "long": -84.39760000000001, - "health": 0, - "numNodes": 15, - "numHPCSlivers": 10, - "siteUrl": "http://www.gatech.edu/" - }, - "Princeton": { - "lat": 40.3502, - "long": -74.6524, - "health": 0, - "numNodes": 15, - "numHPCSlivers": 10, - "siteUrl": "http://princeton.edu/" - }, - "Washington": { - "lat": 47.6531, - "long": -122.31299999999999, - "health": 0, - "numNodes": 15, - "numHPCSlivers": 10, - "siteUrl": "https://www.washington.edu/" - }, - "Stanford": { - "lat": 37.4294, - "long": -122.17200000000003, - "health": 0, - "numNodes": 15, - "numHPCSlivers": 10, - "siteUrl": "http://www.stanford.edu/" - }, - } - return cdnData + return cdnData +class DashboardAjaxView(View): + def get(self, request, **kwargs): + return HttpResponse(json.dumps(getCDNOperatorData(True)), mimetype='application/javascript') + diff --git a/planetstack/templates/admin/dashboard/welcome.html b/planetstack/templates/admin/dashboard/welcome.html index bec703d..8df5f10 100644 --- a/planetstack/templates/admin/dashboard/welcome.html +++ b/planetstack/templates/admin/dashboard/welcome.html @@ -23,6 +23,7 @@ {% endfor %} +

HPC Dashboard

Active Slivers: 78 @@ -31,12 +32,14 @@
+
{% endblock %} -- 2.45.2