From 6253dfcf6768ea61c3f4ae50e54194ef7c5618f5 Mon Sep 17 00:00:00 2001 From: Scott Baker Date: Mon, 14 Apr 2014 09:29:30 -0700 Subject: [PATCH] Amisha's latest changes to tenant view --- planetstack/core/plus/sites.py | 4 +- planetstack/core/plus/views.py | 86 ++++++++++ .../templates/admin/dashboard/tenant.html | 156 ++++++++++++------ 3 files changed, 190 insertions(+), 56 deletions(-) diff --git a/planetstack/core/plus/sites.py b/planetstack/core/plus/sites.py index c5dde52..f51fc1b 100644 --- a/planetstack/core/plus/sites.py +++ b/planetstack/core/plus/sites.py @@ -12,7 +12,7 @@ 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, DashboardAjaxView, SimulatorView, DashboardSummaryAjaxView, DashboardAddOrRemoveSliverView, DashboardUserSiteView, DashboardAnalyticsAjaxView, TenantViewData,TenantCreateSlice + from views import DashboardWelcomeView, DashboardAjaxView, SimulatorView, DashboardSummaryAjaxView, DashboardAddOrRemoveSliverView, DashboardUserSiteView, DashboardAnalyticsAjaxView, TenantViewData,TenantCreateSlice, TenantAddOrRemoveSliverView urls = super(AdminMixin, self).get_urls() del urls[0] @@ -33,6 +33,8 @@ class AdminMixin(object): name="analytics"), url(r'^dashboardaddorremsliver/$', self.admin_view(DashboardAddOrRemoveSliverView.as_view()), name="addorremsliver"), + url(r'^tenantaddorremsliver/$', self.admin_view(TenantAddOrRemoveSliverView.as_view()), + name="tenantaddorremsliver"), url(r'^tenantview/$', self.admin_view(TenantViewData.as_view()), name="tenantview"), url(r'^createnewslice/$', self.admin_view(TenantCreateSlice.as_view()), diff --git a/planetstack/core/plus/views.py b/planetstack/core/plus/views.py index 0078d91..4211a30 100644 --- a/planetstack/core/plus/views.py +++ b/planetstack/core/plus/views.py @@ -9,6 +9,7 @@ from core.models import * from django.http import HttpResponse from django.core import urlresolvers import traceback +import socket if os.path.exists("/home/smbaker/projects/vicci/cdn/bigquery"): sys.path.append("/home/smbaker/projects/vicci/cdn/bigquery") @@ -213,6 +214,91 @@ class TenantViewData(View): def get(self, request, **kwargs): return HttpResponse(json.dumps(getTenantSliceInfo(request.user, True)), mimetype='application/javascript') +def tenant_increase_slivers(user, siteName, slice, count): + site = Site.objects.filter(name=siteName) + nodes = Node.objects.filter(site=site) + print nodes + site.usedNodes = [] + site.freeNodes = [] + sliceName = Slice.objects.get(name=slice) + for node in nodes: + usedNode = False + for sliver in node.slivers.all(): + if sliver in Sliver.objects.filter(slice=sliceName): + usedNode = True + if usedNode: + site.usedNodes.append(node) + print site.usedNodes + else: + site.freeNodes.append(node) + print site + slices =Slice.objects.all() + sliceName = Slice.objects.get(name=slice) + test = Sliver.objects.filter(slice=sliceName) + while (len(site.freeNodes) > 0) and (count > 0): + node = site.freeNodes.pop() + hostname = node.name + sliver = Sliver(name=node.name, + slice=sliceName, + node=node, + image = Image.objects.all()[0], + creator = User.objects.get(email=user), + deploymentNetwork=node.deployment, + numberCores =1 ) + sliver.save() + + print "created sliver", sliver + print sliver.node + print sliver.numberCores + site.usedNodes.append(node) + count = int(count) - 1 + +def tenant_decrease_slivers(user, siteName, slice, count): + site = Site.objects.filter(name=siteName) + nodes = Node.objects.filter(site=site) + slices = Slice.objects.all() + site.usedNodes = [] + site.freeNodes = [] + sliceName = Slice.objects.get(name=slice) + + for node in nodes: + usedNode = False + for sliver in node.slivers.all(): + if sliver in Sliver.objects.filter(slice=sliceName): + usedNode = True + if usedNode: + site.usedNodes.append(node) + else: + site.freeNodes.append(node) + print "used nodes", site.usedNodes + slices =Slice.objects.all() + sliceName = Slice.objects.get(name=slice) + test = Sliver.objects.filter(slice=sliceName) + while (count > 0): + node = site.usedNodes.pop() + print node + print count + for sliver in node.slivers.all(): + if sliver.slice in slices: + print "deleting sliver", sliver.slice + sliver.delete() + site.freeNodes.append(node) + count = int(count) - 1 + print "deleted sliver", sliver + +class TenantAddOrRemoveSliverView(View): + def post(self, request, *args, **kwargs): + siteName = request.POST.get("siteName", "0") + actionToDo = request.POST.get("actionToDo", "0") + count = request.POST.get("count","0") + slice = request.POST.get("slice","0") + + if (actionToDo == "add"): + tenant_increase_slivers(request.user, siteName,slice, count) + elif (actionToDo == "rem"): + tenant_decrease_slivers(request.user,siteName,slice, count) + return HttpResponse('This is POST request ') + class DashboardSummaryAjaxView(View): def get(self, request, **kwargs): return HttpResponse(json.dumps(hpc_wizard.get_hpc_wizard().get_summary_for_view()), mimetype='application/javascript') diff --git a/planetstack/templates/admin/dashboard/tenant.html b/planetstack/templates/admin/dashboard/tenant.html index bcf9cc9..83556fd 100644 --- a/planetstack/templates/admin/dashboard/tenant.html +++ b/planetstack/templates/admin/dashboard/tenant.html @@ -99,7 +99,7 @@ $(document).ready(function () { success: function (data) { UserSliceTable(data); showSliceData(data); - $("#tooltip").css("display","none"); + $("#tooltip").css("display", "none"); }, complete: function () {} }); @@ -129,17 +129,19 @@ $(document).ready(function () { showSliceData(data); }); $("#advanced-tenant").click(function () { + var selectedValue = $("#tenantSliceDropDown").val(); $("#tenantSliceDataWrapper").toggle(); $("#advancedTenantSliceDataWrapper").toggle(); $("#advTenantSiteTable").toggle(); $("#tenantSiteTable").toggle(); $("#sliver-btn").toggle(); $("#save-btn").toggle(); - $('#adv-slice-name-value').empty(); + //$('#adv-slice-name-value').empty(); $("").attr('id', 'advTenantSliceDropDown').appendTo('#adv-slice-name-value'); for (row in rows) { $("#advTenantSliceDropDown").append(""); } + $("#advTenantSliceDropDown").val(selectedValue); advShowSliceData(data); editSliverAdv(); $('#advTenantSliceDropDown').on('change', function () { @@ -150,9 +152,9 @@ $(document).ready(function () { function editSliverAdv() { $(".edit-view").click(function () { var allocatedSlivers = parseInt($(this).parent().siblings(".allocated").html()); - var td=$(this).parent().siblings(".allocated"); - var pos =oTable.fnGetPosition(td[0]); - $("#adv-dialog-form").dialog({ + var td = $(this).parent().siblings(".allocated"); + var pos = oTable.fnGetPosition(td[0]); + $("#adv-dialog-form").dialog({ autoOpen: false, height: 200, width: 350, @@ -160,13 +162,13 @@ $(document).ready(function () { buttons: { "Add": function () { allocatedSlivers += parseInt($("#advNumOfSlivers").val()); - $(this).dialog("close"); + $(this).dialog("close"); td.html(allocatedSlivers); }, "Remove": function () { - allocatedSlivers -= parseInt($("#advNumOfSlivers").val()); - $(this).dialog("close"); - td.html(allocatedSlivers); + allocatedSlivers -= parseInt($("#advNumOfSlivers").val()); + $(this).dialog("close"); + td.html(allocatedSlivers); } } }); @@ -190,34 +192,80 @@ $(document).ready(function () { var rows = data['userSliceInfo']['rows']; var siteNames = []; var sliverCount; - var tableData ={}; + var tableData = {}; for (row in rows) { if (rows[row]['sliceName'] == value) { var innerRows = rows[row]['sliceSite']; for (innerRow in innerRows) { - tableData[innerRow]=innerRows[innerRow]; + tableData[innerRow] = innerRows[innerRow]; } } } for (row in siteRows) { - var entry =siteRows[row]['siteName']; + var entry = siteRows[row]['siteName']; if (!(entry in tableData)) { tableData[siteRows[row]['siteName']] = 0; } } - for (row in tableData){ + for (row in tableData) { siteNames.push([row, tableData[row], 'Edit']); } - + $("#save-btn").click(function () { + var newTableData={}; + var newSite = $(".siteName"); + var newAllocated = $(".allocated"); + for(i=1; i tableData[newRow]){ + $.ajax({ + url : '/tenantaddorremsliver/', + dataType : 'json', + data: { + siteName: newRow, + count : newTableData[newRow] - tableData[newRow], + slice : $("#advTenantSliceDropDown").val(), + actionToDo: "add", + csrfmiddlewaretoken: "{{ csrf_token }}", // < here + state:"inactive" }, + type : 'POST', + complete:function(){ + location.reload(); + } + }); + } + else if(newTableData[newRow] < tableData[newRow]){ + $.ajax({ + url : '/tenantaddorremsliver/', + dataType : 'json', + data: { + siteName: newRow, + count : tableData[newRow] - newTableData[newRow], + slice : $("#advTenantSliceDropDown").val(), + actionToDo: "rem", + csrfmiddlewaretoken: "{{ csrf_token }}", // < here + state:"inactive" }, + type : 'POST', + complete:function(){ + location.reload(); + } + }); + } + + } + }); oTable = $('#advTenantSiteTableData').dataTable({ "bJQueryUI": true, "bFilter": false, "bInfo": false, "bLengthChange": false, + "bPaginate": false, "aaData": siteNames, "bStateSave": true, "aoColumns": [{ - "sTitle": "Site Name" + "sTitle": "Site Name", + sClass: "siteName" }, { "sTitle": "Allocated", sClass: "alignCenter allocated" @@ -271,50 +319,48 @@ $(document).ready(function () { for (row in imageData) { $("#new-image").append(""); } - var nameOfSlice= $("#new-slice-name").val(); + var nameOfSlice = $("#new-slice-name").val(); var nameOfServiceClass = $("#new-service-class").val(); var nameOfImage = $("#new-image").val(); $("#create-slice-form").dialog({ - autoOpen: false, - height: 300, - width: 350, - modal: true, - buttons: { - "Submit": function () { - $.ajax({ - url: '/createnewslice/', - dataType: 'json', - data: { - sliceName: $("#new-slice-name").val(), - serviceClass: nameOfServiceClass, - imageName: nameOfImage, - actionToDo: "add", - csrfmiddlewaretoken: "{{ csrf_token }}", // < here - state: "inactive" - }, - type: 'POST', - beforeSend: function(){ - if (!$("#new-slice-name").val()) { - $("#tooltip").css("display","block"); - return false; - } - else{ - return true; - } - }, - success: function (response) { - }, - complete: function () { - location.reload(); - } - }); - }, - Cancel: function () { - $(this).dialog("close"); - } + autoOpen: false, + height: 300, + width: 350, + modal: true, + buttons: { + "Submit": function () { + $.ajax({ + url: '/createnewslice/', + dataType: 'json', + data: { + sliceName: $("#new-slice-name").val(), + serviceClass: nameOfServiceClass, + imageName: nameOfImage, + actionToDo: "add", + csrfmiddlewaretoken: "{{ csrf_token }}", // < here + state: "inactive" + }, + type: 'POST', + beforeSend: function () { + if (!$("#new-slice-name").val()) { + $("#tooltip").css("display", "block"); + return false; + } else { + return true; + } + }, + success: function (response) {}, + complete: function () { + location.reload(); + } + }); + }, + Cancel: function () { + $(this).dialog("close"); } - }); - $("#create-slice-form").dialog("open"); + } + }); + $("#create-slice-form").dialog("open"); }); } } -- 2.43.0