Amisha's latest changes to tenant view
authorScott Baker <smbaker@gmail.com>
Mon, 14 Apr 2014 16:29:30 +0000 (09:29 -0700)
committerScott Baker <smbaker@gmail.com>
Mon, 14 Apr 2014 16:29:30 +0000 (09:29 -0700)
planetstack/core/plus/sites.py
planetstack/core/plus/views.py
planetstack/templates/admin/dashboard/tenant.html

index c5dde52..f51fc1b 100644 (file)
@@ -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()),
index 0078d91..4211a30 100644 (file)
@@ -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')
index bcf9cc9..83556fd 100644 (file)
@@ -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();
                                $("<select></select>").attr('id', 'advTenantSliceDropDown').appendTo('#adv-slice-name-value');
                                for (row in rows) {
                                        $("#advTenantSliceDropDown").append("<option>" + rows[row]['sliceName'] + "</option>");
                                }
+                               $("#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], '<a href="#" class="edit-view">Edit</a>']);
                                        }
-                                       
+                                        $("#save-btn").click(function () {
+                                                       var newTableData={};
+                                                       var newSite = $(".siteName");
+                                                       var newAllocated = $(".allocated");
+                                                       for(i=1; i<newSite.length; i++){
+                                                               newTableData[$($(".siteName")[i]).text()]=$($(".allocated")[i]).text();
+                                                       }
+                                                       for(newRow in newTableData){
+                                                               if(newTableData[newRow] > 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("<option>" + imageData[row]['Image'] + "</option>");
                                }
-                               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");
                        });
                }
        }