Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into onelab
authorjavier <javier.garcial.external@atos.net>
Mon, 16 Jun 2014 08:17:06 +0000 (10:17 +0200)
committerjavier <javier.garcial.external@atos.net>
Mon, 16 Jun 2014 08:17:06 +0000 (10:17 +0200)
Conflicts:
plugins/queryupdater/static/js/queryupdater.js
portal/sliceresourceview.py
portal/templates/fed4fire/fed4fire_widget-slice-sections.html

jgarcia - Commit after merging HEAD files and SLA & Service Directory code

1  2 
myslice/urls.py
plugins/queryupdater/static/js/queryupdater.js
portal/sliceresourceview.py
portal/templates/_widget-slice-sections.html
portal/templates/fed4fire/fed4fire_widget-slice-sections.html
portal/templates/fed4fire/fed4fire_widget-topmenu.html
portal/templates/slice-resource-view.html
portal/templates/slice-view.html

diff --combined myslice/urls.py
@@@ -28,7 -28,8 +28,8 @@@ import portal.sliceresourcevie
  import portal.slicetabexperiment
  import portal.slicetabinfo
  import portal.slicetabtestbeds
- import portal.slicetabusers 
+ import portal.slicetabusers
+ import portal.slicetabmeasurements 
  
  #### high level choices
  # main entry point (set to the / URL)
@@@ -87,11 -88,9 +88,12 @@@ urls = 
      (r'^slice/(?P<slicename>[^/]+)/?$', portal.sliceview.SliceView.as_view()),
      (r'^info/(?P<slicename>[^/]+)/?$', portal.slicetabinfo.SliceInfoView.as_view()),
      (r'^testbeds/(?P<slicename>[^/]+)/?$', portal.slicetabtestbeds.SliceTabTestbeds.as_view()),
+     (r'^measurements/(?P<slicename>[^/]+)/?$', portal.slicetabmeasurements.SliceTabMeasurements.as_view()),
      (r'^experiment/(?P<slicename>[^/]+)/?$', portal.slicetabexperiment.ExperimentView.as_view()),
      url(r'^portal/', include('portal.urls')),
 +
 +    # SLA
 +    url(r'^sla/', include('sla.urls')),
  ]
  
  #this one would not match the convention
      var QueryUpdater = Plugin.extend({
  
          init: function(options, element) {
-           this.classname="queryupdater";
+               this.classname="queryupdater";
              this._super(options, element);
  
              var self = this;
+             this.initial = Array();
              this.table = this.elmt('table').dataTable({
  // the original querytable layout was
  //                sDom: "<'row'<'col-xs-5'l><'col-xs-1'r><'col-xs-6'f>>t<'row'<'col-xs-5'i><'col-xs-7'p>>",
  
          do_update: function(e) {
              var self = e.data;
 -            self.spin();
 -            console.log("do_update");
 -
 +            var username = e.data.options.username;
 +            var urn = data.value;
              // XXX check that the query is not disabled
 -            manifold.raise_event(self.options.query_uuid, RUN_UPDATE);
  
 -            // how to stop the spinning after the event? 
 -            // this should be triggered by some on_updatequery_done ?
 +            console.log("DATA VALUE: " + data.value);
 +
 +            if (data.value.toLowerCase().indexOf("iminds") >= 0){
 +
 +                $('#sla_dialog').show();
 +                $('#slamodal').modal('show');
 +                
 +                $(document).ready(function() {
 +                    $("#accept_sla").click(function(){
 +                        console.log("SLA ACCEPTED");
 +                        console.log("With username: " + username);
 +                        if(urn.toLowerCase().indexOf("wall2") >= 0){ 
 +                            $.post("/sla/agreements/simplecreate", 
 +                                { "template_id": "iMindsServiceVirtualwall",
 +                                  "user": username,
 +                                  "expiration_time": new Date() // jgarcia: FIXME
 +                                });
 +                        } else if(urn.toLowerCase().indexOf("wilab2") >= 0){
 +                            $.post("/sla/agreements/simplecreate", 
 +                                { "template_id":"iMindsServiceWiLab2",
 +                                  "user":username,
 +                                  "expiration_time": new Date() // jgarcia: FIXME
 +                                });
 +                        }
 +                        $('#slamodal').modal('hide');
-                         console.log("Executing raise_event after sending SLA");
-                         // manifold.raise_event(self.options.query_uuid, RUN_UPDATE);
++                        self.spin();
++                        console.log("Executing do_update after sending SLA");
++                        // XXX check that the query is not disabled
++                        manifold.raise_event(self.options.query_uuid, RUN_UPDATE);
++
++                        // how to stop the spinning after the event? 
++                        // this should be triggered by some on_updatequery_done ?
 +                    }); 
 +                });
 +
 +                $(document).ready(function() {
 +                    $("#dismiss_sla").click(function(){
 +                        console.log("SLA NOT ACCEPTED");
 +                        $('#slamodal').modal('hide');
 +                    }); 
 +                });
 +
 +            } else {
-                 console.log("Executing raise_event");
++                self.spin();
++                console.log("do_update");
++                // XXX check that the query is not disabled
 +                manifold.raise_event(self.options.query_uuid, RUN_UPDATE);
++
++                // how to stop the spinning after the event? 
++                // this should be triggered by some on_updatequery_done ?
 +            }
++
          },
  
        // related buttons are also disabled in the html template
  
          set_state: function(data)
          {
+             console.log("function set_state");
              var action;
              var msg;
              var button = '';
  
          on_new_record: function(record)
          {
+             console.log("query_updater on_new_record");
+             console.log(record);
              // if (not and update) {
  
                  // initial['resource'], initial['lease'] ?
-                 this.initial.push(record.urn);
+                 this.initial.push(record);
  
+             //this.set_record_state(record, RECORD_STATE_ATTACHED);
                  // We simply add to the table
              // } else {
                  //                 \ this.initial_resources
  
          on_query_in_progress: function()
          {
-           messages.debug("queryupdater.on_query_in_progress");
+               messages.debug("queryupdater.on_query_in_progress");
              this.spin();
          },
  
              this.clear();
          },
  
-         on_new_record: function(record)
-         {
-         },
          on_query_done: function()
          {
+             console.log("on_query_done");
              this.unspin();
          },
  
          // NOTE: record_key could be sufficient 
          on_added_record: function(record)
          {
+             console.log("on_added_record = ",record);
              this.set_record_state(record, RECORD_STATE_ADDED);
              // update pending number
          },
  
          on_removed_record: function(record_key)
          {
+             console.log("on_removed_record = ",record_key);
              this.set_record_state(RECORD_STATE_REMOVED);
          },
  
  
          on_field_state_changed: function(result)
          {
+             console.log("on_field_state_changed");
+             console.log(result);
              messages.debug(result)
              /* this.set_state(result.request, result.key, result.value, result.status); */
              this.set_state(result);
               if (!change)
                  return;
               // ioi: Refubrished
-              var initial = this.initial_resources;
+              var initial = this.initial;
               //var r_removed  = []; //
               /*-----------------------------------------------------------------------
                  TODO: remove this dirty hack !!!
@@@ -19,7 -19,7 +19,8 @@@ from plugins.queryupdater            im
  from plugins.testbeds                import TestbedsPlugin
  from plugins.scheduler2              import Scheduler2
  from plugins.columns_editor          import ColumnsEditor
 +from plugins.sladialog               import SlaDialog
+ from plugins.lists.simplelist        import SimpleList
  
  from myslice.theme import ThemeView
  
@@@ -44,13 -44,16 +45,16 @@@ class SliceResourceView (LoginRequiredV
          user_fields = ['user_hrn'] # [column['name'] for column in user_md['column']]
  
          # TODO The query to run is embedded in the URL
+         # Example: select slice_hrn, resource.urn, lease.resource, lease.start_time, lease.end_time from slice where slice_hrn == "ple.upmc.myslicedemo"
          main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename)
          main_query.select(
                  'slice_hrn',
                  'resource.urn', 
                  'resource.hostname', 'resource.type',
                  'resource.network_hrn',
-                 'lease.urn',
+                 'lease.resource',
+                 'lease.start_time',
+                 'lease.end_time',
                  #'user.user_hrn',
                  #'application.measurement_point.counter'
          )
          # RESERVED RESOURCES LIST
          # resources as a list using datatable plugin
   
-         list_reserved_resources = QueryTable(
-             page       = page,
-             domid      = 'resources-reserved-list',
-             title      = 'List view',
-             query      = sq_resource,
-             query_all  = sq_resource,
-             init_key   = "urn",
-             checkboxes = True,
-             datatables_options = {
-                 'iDisplayLength': 25,
-                 'bLengthChange' : True,
-                 'bAutoWidth'    : True,
-                 },
+         list_reserved_resources = SimpleList(
+             title = None,
+             page  = page,
+             key   = 'urn',
+             query = sq_resource,
          )
  
+         list_reserved_leases = SimpleList(
+             title = None,
+             page  = page,
+             key   = 'resource',
+             query = sq_lease,
+         )
+ #        list_reserved_resources = QueryTable(
+ #            page       = page,
+ #            domid      = 'resources-reserved-list',
+ #            title      = 'List view',
+ #            query      = sq_resource,
+ #            query_all  = sq_resource,
+ #            init_key   = "urn",
+ #            checkboxes = True,
+ #            datatables_options = {
+ #                'iDisplayLength': 25,
+ #                'bLengthChange' : True,
+ #                'bAutoWidth'    : True,
+ #                },
+ #        )
          # --------------------------------------------------------------------------
          # COLUMNS EDITOR
          # list of fields to be applied on the query 
              toggled             = False,
              domid               = 'pending',
              outline_complete    = True,
 +            username            = request.user,
          )
  
          # --------------------------------------------------------------------------
                  },
          )
  
 +        # --------------------------------------------------------------------------
 +        # SLA View and accept dialog
 +        
 +        sla_dialog = SlaDialog(
 +            page                = page,
 +            title               = 'sla dialog',
 +            query               = main_query,
 +            togglable           = False,
 +            # start turned off, it will open up itself when stuff comes in
 +            toggled             = True,
 +            domid               = 'sla_dialog',
 +            outline_complete    = True,
 +            username            = request.user,
 +        )
 +
          template_env = {}
          template_env['list_resources'] = list_resources.render(self.request)
- #         template_env['list_reserved_resources'] = list_reserved_resources.render(self.request)
+         template_env['list_reserved_resources'] = list_reserved_resources.render(self.request)
+         template_env['list_reserved_leases'] = list_reserved_leases.render(self.request)
  
          template_env['columns_editor'] = filter_column_editor.render(self.request)
  
          template_env['map_resources'] = map_resources.render(self.request)
          template_env['scheduler'] = resources_as_scheduler2.render(self.request)
          template_env['pending_resources'] = pending_resources.render(self.request)
 +        template_env['sla_dialog'] = sla_dialog.render(self.request)
          template_env["theme"] = self.theme
          template_env["username"] = request.user
          template_env["slice"] = slicename
@@@ -4,10 -4,9 +4,10 @@@
        <li><a href="/slice/{{ slice }}#testbeds">Testbeds</a></li>
        <li class="active"><a class="link" href="/resources/{{ slice }}">Resources</a></li>
        <li><a href="/slice/{{ slice }}#users">Users</a></li>
-       <li><a href="/slice/{{ slice }}#experiment">Statistics</a></li>
-       <li><a href="/slice/{{ slice }}#experiment">Measurements</a></li>
+       <!--<li><a href="/slice/{{ slice }}#statistics">Statistics</a></li> -->
+       <li><a href="/slice/{{ slice }}#measurements">Measurements</a></li>
        <li><a href="/slice/{{ slice }}#experiment" data-toggle="tab">Experiment</a></li>
 +      <li><a href="/slice/{{ slice }}#sla">SLA</a></li>
  </ul>
  {% else %}
  <ul class="nav nav-tabs nav-section">
        <li class="testbeds"><a href="#testbeds">Testbeds</a></li>
        <li><a class="link" href="/resources/{{ slice }}">Resources</a></li>
        <li class="users"><a href="#users">Users</a></li>
      <li class="statistics"><a href="#experiment">Statistics</a></li>
-       <li class="measurements"><a href="#experiment">Measurements</a></li>
<!--  <li class="statistics"><a href="#statistics">Statistics</a></li> -->
+       <li class="measurements"><a href="#measurements">Measurements</a></li>
        <li class="experiment"><a href="#experiment" data-toggle="tab">Experiment</a></li>
 +      <li class="sla"><a href="#sla" data-toggle="tab">SLA</a></li>
  </ul>
  <script>
  $(document).ready(function() {
@@@ -1,24 -1,22 +1,27 @@@
  {% if section == "resources" %}
  <ul class="nav nav-tabs nav-section">
        <li><a href="/slice/{{ slice }}#info"><img src="{{ STATIC_URL }}icons/slices-xs.png" alt="About MySlice" /> {{ slice }}</a></li>
      <li><a href="/slice/{{ slice }}#testbeds">Testbeds</a></li>
<!--  <li><a href="/slice/{{ slice }}#testbeds">Testbeds</a></li> -->
        <li class="active"><a class="link" href="/resources/{{ slice }}">Resources</a></li>
        <li><a href="/slice/{{ slice }}#users">Users</a></li>
-       <li><a href="/slice/{{ slice }}#experiment">Statistics</a></li>
-       <li><a href="/slice/{{ slice }}#experiment">Measurements</a></li>
-       <li><a href="/slice/{{ slice }}#experiment" data-toggle="tab">Experiment</a></li>
-       <li><a href="/slice/{{ slice }}#sla">SLA</a></li>
++
+ <!--  <li><a href="/slice/{{ slice }}#experiment">Statistics</a></li> 
+       <li><a href="/slice/{{ slice }}#measurements">Measurements</a></li>
+       <li><a href="/slice/{{ slice }}#experiment" data-toggle="tab">Experiment</a></li> -->
++
  </ul>
  {% else %}
  <ul class="nav nav-tabs nav-section">
        <li class="active"><a href="#info"><img src="{{ STATIC_URL }}icons/slices-xs.png" alt="About MySlice" /> {{ slice }}</a></li>
-       <li class="testbeds"><a href="#testbeds">Testbeds</a></li>
+       <!--<li class="testbeds"><a href="#testbeds">Testbeds</a></li> -->
        <li><a class="link" href="/resources/{{ slice }}">Resources</a></li>
        <li class="users"><a href="#users">Users</a></li>
-       <li class="statistics"><a href="#experiment">Statistics</a></li>
 -      <!--<li class="statistics"><a href="#experiment">Statistics</a></li> 
 -      <li class="measurements"><a href="#measurements">Measurements</a></li>
++
++      <!-- <li class="statistics"><a href="#experiment">Statistics</a></li>
 +      <li class="measurements"><a href="#experiment">Measurements</a></li>
-       <li class="experiment"><a href="#experiment" data-toggle="tab">Experiment</a></li>
+       <li class="experiment"><a href="#experiment" data-toggle="tab">Experiment</a></li> -->
 +      <li class="sla" style="display:none"><a href="#sla" data-toggle="tab">SLA</a></li>
++
  </ul>
  <script>
  $(document).ready(function() {
@@@ -2,7 -2,7 +2,7 @@@
  <div id="header">
        <div class="wrapper">
                <div class="logo">
-                       <a href="/"><img src="{{ STATIC_URL }}img/f4f-logo.png" alt="Fed4Fire Portal" width="80px" />Fed4Fire Portal</a>
+                       <a href="/"><img src="{{ STATIC_URL }}img/f4f-logo.png" alt="Fed4Fire Portal" width="80px" />Home</a>
                </div>
                
                <div id="secondary">
@@@ -20,7 -20,7 +20,7 @@@
                <ul>
                        <li id="nav-account"><a href="/portal/account/">{{ username }}</a></li>
                        <li>|</li>
-                       <li id="nav-institution" class=""><a href="/portal/institution">INSTITUTION</a></li>
+                       <li id="nav-institution" class=""><a href="/portal/institution">AUTHORITY</a></li>
                        <li class="slices">
                                <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                                        SLICES <span class="caret"></span>
@@@ -40,7 -40,6 +40,7 @@@
                                </div>
                                </li>
                        <li id="nav-request"><a href="/portal/validate">REQUESTS</a></li>
 +                      <li id="nav-request"><a href="/portal/servicedirectory">SERVICES</a></li>
                        <li id="nav-support"><a href="http://doc.fed4fire.eu/support.html" target="_blank">SUPPORT</a></li>
                        <li>|</li>
                        <li id="nav-logout" style="margin-top: 10px;"><a id="logout" style="cursor:pointer;" data-username="{{ username }}"><span class="glyphicon glyphicon-off"></span> LOGOUT</a></li>
                                <!-- <table cellpadding="0" cellspacing="0" border="0" class="table" id="objectList"></table> -->
                        </div>
                        <div id="reserved" class="panel" style="height:370px;display:none;">
-                 {{list_reserved_resources}}
+                 <table width="80%">
+                     <tr><th width="50%" style="text-align:center;">resources</th><th width="50%" style="text-align:center;">leases</th></tr>
+                     <tr>
+                         <td style="text-align:center">{{list_reserved_resources}}</td>
+                         <td style="text-align:center">{{list_reserved_leases}}</td>
+                     </tr>
+                 </table>
                        </div>
                        <div id="pending" class="panel" style="height:370px;display:none;">
                  {{pending_resources}}
 +                      </div>
 +                      <div id="sla_dialog" class="panel" style="height:370px;display:none;">
 +                {{sla_dialog}}
                        </div>
                        <div id="map" class="panel" style="height:370px;display:none;">
                  {{map_resources}}
@@@ -19,9 -19,8 +19,9 @@@
    <div class="tab-pane row" id="testbeds">...</div>
    <div class="tab-pane row" id="resources">...</div>
    <div class="tab-pane row" id="users">...</div>
-   <div class="tab-pane row" id="statistics">...</div>
+   <!-- <div class="tab-pane row" id="statistics">...</div> -->
    <div class="tab-pane row" id="measurements">...</div>
    <div class="tab-pane row" id="experiment">...</div>
 +  <div class="tab-pane row" id="sla">...</div>
  </div>        
  {% endblock %}