merge
authorCiro Scognamiglio <ciro.scognamiglio@cslash.net>
Wed, 15 Apr 2015 17:28:03 +0000 (19:28 +0200)
committerCiro Scognamiglio <ciro.scognamiglio@cslash.net>
Wed, 15 Apr 2015 17:28:03 +0000 (19:28 +0200)
.settings/org.eclipse.core.resources.prefs
influxdb/client.py
portal/slicetabmeasurements.py
portal/static/css/fed4fire.css
portal/static/css/onelab.css
portal/static/js/common.functions.js
portal/templates/base.html
portal/templates/fed4fire/fed4fire_home-view.html
portal/templates/onelab/onelab_slice-view.html
portal/templates/onelab/onelab_widget-slice-sections.html
portal/templates/slice-view.html

index dad9009..00f180d 100644 (file)
@@ -1,4 +1,6 @@
 eclipse.preferences.version=1
+encoding//forge/forms.py=utf-8
+encoding//forge/views.py=utf-8
 encoding//portal/django_passresetview.py=utf-8
 encoding//portal/forms.py=utf-8
 encoding//portal/migrations/0002_extend_slice.py=utf-8
@@ -6,6 +8,8 @@ encoding//portal/migrations/0005_extend_user.py=utf-8
 encoding//portal/migrations/0008_extend_user.py=utf-8
 encoding//portal/migrations/0009_initial.py=utf-8
 encoding//portal/migrations/0010_project.py=utf-8
+encoding//portal/migrations/0011_join.py=utf-8
 encoding//portal/models.py=utf-8
 encoding//portal/urls.py=utf-8
 encoding//portal/validationview.py=utf-8
+encoding//portal/views/__init__.py=utf-8
index 50daa30..8d28dd8 100644 (file)
@@ -1,15 +1,19 @@
 from django.http import HttpResponse
 from rest import error
-import os,json
-import ConfigParser
-import string, random
+import os,json,string,random
+import logging,ConfigParser
 
 from portal.models import MeasurementsDB
 
 from manifold.core.query             import Query, AnalyzedQuery
 from manifoldapi.manifoldapi         import execute_query
 
-from influxdb import InfluxDBClient
+logger = logging.getLogger(__name__)
+
+try :
+    from influxdb import InfluxDBClient
+except :
+    logger.error('can\'t import InfluxDBClient module')
 
 def createDatabase(request, slicename):
     result = {}
index 49afc69..a62067f 100644 (file)
@@ -6,7 +6,7 @@ from unfold.loginrequired           import LoginRequiredView
 from myslice.theme import ThemeView
 
 class SliceTabMeasurements (LoginRequiredView, ThemeView):
-    template_name = "slice-tab-measurement.html"
+    template_name = "slice-tab-measurements.html"
     
     def get(self, request, slicename):
-        return render_to_response(self.template, {"theme": self.theme, "username": request.user, "slice" : slicename, "section":"measurements"}, context_instance=RequestContext(request))
+        return render_to_response(self.template, {"theme": self.theme, "username": request.user, "slicename" : slicename, "section":"measurements"}, context_instance=RequestContext(request))
index 70de2a8..6340326 100644 (file)
@@ -27,7 +27,8 @@ h2 {
     color:#333333;
 }
 h3 {
-    font-size:13pt;
+    font-size:12pt;
+    letter-spacing:0.6pt;
     color:#201E62;
 }
 input[type=checkbox] {
@@ -651,17 +652,28 @@ div.secondary .account span {
 div.secondary .account a {
     color:black;
 }
-div.dashboard div {
-    margin:25px 0;
-}
+
 div.dashboard {
-    text-align:center;
+}
+div.dashboard a {
+    color:black;
+}
+div.dashboard a:hover {
 }
 div.dashboard ul {
     text-align:left;
     margin-left:24px;
     list-style:none;
 }
+div.dashboard h3 {
+    border-bottom:0.5px solid #E0E0E0;
+    margin-right:15px;
+}
+div.dashboard h3 img {
+    margin:15px 15px 15px 0;
+}
+
+
 div.dataTables_filter label{
     float:left;
     width:400px;
index 45f5efc..4023e6c 100644 (file)
@@ -56,6 +56,12 @@ h4 {
     font-size:12pt;
     color:#333333;
 }
+ul {
+    margin:0 0 0 15px;
+    padding:0;
+}
+li {
+}
 span.subtitle {
     color:#454545;
     font-size:9pt;
@@ -121,7 +127,6 @@ div.breadcrumbs a:hover {
     text-decoration:underline;
 }
 .tab-pane {
-    padding-top:15px;
 }
 /* buttons */
 button.btn, input.btn {
@@ -389,6 +394,31 @@ div.sl-filter-facilities {
 div.sl-filter-facilities h4 {
     margin-bottom:15px;
     
+}
+.sl-menu {
+    padding:0;
+}
+.sl-menu h4 {
+    margin:0 0 15px 0;
+    padding:0;
+}
+.sl-menu ul {
+    list-style:none;
+    margin:0;
+    padding:0;
+}
+.sl-menu li {
+    color:gray;
+    cursor:pointer;
+    padding:4px 8px;
+}
+.sl-menu li img {
+    vertical-align:top;
+}
+.sl-menu li.active {
+    color:black;
+}
+.sl-menu-item {
 }
 img.sl-image {
     margin:0 5px 5px 0;
index 481e947..a74132e 100644 (file)
@@ -19,13 +19,13 @@ function getKeySplitId(id,separator){
 if ( typeof String.prototype.startsWith != 'function' ) {
   String.prototype.startsWith = function( str ) {
     return this.substring( 0, str.length ) === str;
-  }
+  };
 };
 
 if ( typeof String.prototype.endsWith != 'function' ) {
   String.prototype.endsWith = function( str ) {
     return this.substring( this.length - str.length, this.length ) === str;
-  }
+  };
 };
 // http://stackoverflow.com/questions/646628/javascript-startswith
 
@@ -58,15 +58,19 @@ jQuery.fn.spin = function(opts) {
 // FROM Triptych : http://stackoverflow.com/users/43089/triptych
 // http://stackoverflow.com/questions/979256/how-to-sort-an-array-of-javascript-objects
 // data.sort(sort_by('city', false, function(a){return a.toUpperCase()}));
-var sort_by = function(field, reverse, primer){
+var sort_by = function(field, reverse, primer) {
 
-   var key = function (x) {return primer ? primer(x[field]) : x[field]};
+   var key = function(x) { return primer ? primer(x[field]) : x[field]; };
    //var key = primer ? function (x) { return primer(x[field]); } : function (x) { return x[field]; }
    
-   return function (a,b) {
+   return function(a,b) {
        var A = key(a), B = key(b);
        return (A < B ? -1 : (A > B ? 1 : 0)) * [1,-1][+!!reverse];
        //return ((A < B) ? -1 :
        //        (A > B) ? +1 : 0)) * [-1,1][+!!reverse];                  
-   }
+   };
+};
+
+function escapeRegExp(str) {
+  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
 }
index aed282c..fd1869e 100644 (file)
@@ -21,7 +21,7 @@
 <script src="{{ STATIC_URL }}js/jquery.dataTables.min.js"></script>
 <script src="{{ STATIC_URL }}js/jquery.qtip.min.js"></script>
 <script src="{{ STATIC_URL }}js/bootstrap.datatables.js"></script>
-<!-- <script src="{{ STATIC_URL }}js/stash.min.js"></script> -->
+<script src="{{ STATIC_URL }}js/common.functions.js"></script>
 <script src="{{ STATIC_URL }}js/myslice.js"></script>
 <script src="{{ STATIC_URL }}js/myslice-ui.js"></script>
 
@@ -82,6 +82,7 @@ $(document).ready(function() {
         p = myslice.projects();
         if(p != null){
             drawProjects(p);
+            drawProjectsTree(p,slices);
         }
         {% endif %}
     });
@@ -106,6 +107,26 @@ $(document).ready(function() {
         $("div#home-project-list").html($( "<ul/>", { html: items.join( "" ) }));
         $("ul#dropdown-project-list").append(items.join( "" ));
     }
+    function drawProjectsTree(projects,slices) {
+        var items = [];
+        var items_sl = [];
+        $.each( projects, function(i, p) {
+            $.each( slices, function(y, s) {
+                console.log(escapeRegExp(p));
+                if (s.match('^' + escapeRegExp(p))) {
+                     items_sl.push( "<li><a href=\"/resources/" + s + "\">" + s.replace(p + '.','') + "</a></li>" );
+                }
+            });
+            el = "<li><a href=\"/portal/project/" + p + "\">" + p + "</a>";
+            if (items_sl.length > 0) {
+                el += "<ul>" + items_sl.join( "" ) + "</ul>";
+            }
+            el += "</li>";
+            items.push(el);
+            items_sl = [];
+        });
+        $("div#home-project-tree").html($( "<ul/>", { html: items.join( "" ) }));
+    }
     {% endif %}
 {% endif %}
        jQuery('[title!=""]').qtip();
index 53f353c..1e69db3 100644 (file)
 {% widget '_widget-news.html' %}
 </div> -->
 {% if username %}
+
 {% block head %} 
-<script type="text/javascript" src="https://java.com/js/dtjava.js"/>
-<script type="text/javascript">
-</script>
+<script type="text/javascript" src="https://java.com/js/dtjava.js"></script>
 {% endblock head %}
 
 {% widget "_widget-no_credentials.html" %}
 <div class="container dashboard">
        <div class="row">
+           <div class="col-md-12">
        {%if 'no_creds'  in user_cred %}
        <p class="command"><a href="#" style="color:red" data-toggle="modal" data-target="#myModal">NO CREDENTIALS</a> are delegated to the portal!</p>
        {%endif%}
        {%if 'creds_expired'  in user_cred %}
        <p class="command"><a href="#" style="color:red" data-toggle="modal" data-target="#myModal">EXPIRED CREDENTIALS</a> Please delegate again your credentials to the portal!</p>
     {%endif%}
-               <div class="col-md-3">
-                       <h3>
-                               EXPERIMENT
-                       </h3>
-                       <div>
-                               <a href="/portal/slice_request"><img src="{{ STATIC_URL }}img/icon_slices.png" alt="" /></a>
-                       </div>
-                       <div>
-                               <button id="slicerequestbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-plus"></span> Create slice</button>
-                       </div>
-                       <div>
-                               <p><strong>Your slices </strong>
-                                       <span title="A slice is a set of testbed resources on which you can conduct an experiment. 
-                                       Either ask your colleagues to give you access to an existing slice or request a new slice by clicking 'Request Slice'. 
-                                       However, on the Fed4FIRE portal, you will only see slices that you have created through Fed4FIRE. If you have created slices elsewhere, 
-                                       those slices will not appear here."
-                                       class="glyphicon glyphicon-info-sign">
-                               </span>
-
-                               </p>
-                       </div>
-                       <div>   
-                               <div id="home-slice-list"><img src="{{ STATIC_URL }}img/loading.gif" alt="Loading Slices" /></div>
-                       </div>
-                       <h3 title="Some tools do their own slice creation and management.">Experiment now</h3>
-                       <a class="btn btn-primary" id="webstart-button" style="width: 150px;" 
+        </div>
+    </div>
+    <div class="row">
+        <div class="col-sm-4">
+            <h3>
+                <a href="/portal/slice_request"><img src="{{ STATIC_URL }}img/icon_slices_small.png" alt="" /></a>EXPERIMENT
+            </h3>
+            
+            <div>
+                Your projects and slices
+                <span title="A <b>slice</b> is a set of testbed resources on which you can conduct an experiment. 
+                Either ask your colleagues to give you access to an existing slice or request a new slice by clicking 'Request Slice'. 
+                However, on the Fed4FIRE portal, you will only see slices that you have created through Fed4FIRE. If you have created slices elsewhere, 
+                those slices will not appear here. <br /><br /> A <b>project</b> is a sub-authority under the responsability of your institution gathering users, 
+                who will be able to create slices for their experiments." class="glyphicon glyphicon-info-sign">&nbsp;</span> 
+            </div>
+            
+            <div>   
+                <div id="home-project-tree"><img src="{{ STATIC_URL }}img/loading.gif" alt="Loading projects" /></div>
+            </div>
+            <div>
+                <span class="glyphicon glyphicon-plus"></span> <a href="/portal/slice_request/">Create slice</a>
+                <span class="glyphicon glyphicon-cog"></span> <a href="/portal/project_request/">Create/Join project</a>
+            </div>
+            
+            <div>
+                <h3 title="Some tools do their own slice creation and management.">Experiment now</h3>
+                    <a class="btn btn-primary" id="webstart-button" style="width: 150px;" 
                     href='http://jfed.iminds.be/releases/5.4-dev/r2314/webstart/experimenter/jfed-experimenter.jnlp'
-                                       title="Click here to start your experiment with jFed">
+                    title="Click here to start your experiment with jFed">
                     <span class="glyphicon glyphicon-cloud"></span> jFed</a>
-               </div>
-               <div class="col-md-3">
-                       <h3>MANAGEMENT</h3>
-                       <div>
-                               <a href="/portal/institution"><img src="{{ STATIC_URL }}img/icon_authority_color.png" alt="" /></a>
-                       </div>
-                       <div>
-                               <button id="projectrequestbtn" type="button" class="btn btn-default" style="width:165px;"><span class="glyphicon glyphicon-plus"></span> Create/Join project</button>
-                       </div>
-                       <div>
-                               <button id="validaterequestbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-ok"></span> Validate Requests</button>
-                       </div>
-                       <div>
-                               <p><strong>Your projects </strong>
-                                       <span title="A project is a sub-authority under the responsability of your institution gathering users, who will be able to create slices for their experiments."
-                                       class="glyphicon glyphicon-info-sign">
-                               </span>
-                               </p>
-                       </div>
-                       <div>   
-                               <div id="home-project-list"><img src="{{ STATIC_URL }}img/loading.gif" alt="Loading projects" /></div>
-                       </div>
-
-               </div>
-               <div class="col-md-3">
-                       <h3>
-                               SUPPORT
-                       </h3>
-                       <div>
-                               <a href="/portal/support"><img src="{{ STATIC_URL }}img/icon_support.png" alt="" /></a>
-                       </div>
-                       <div>
-                               <button id="ticketbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-envelope"></span> Contact</button>
-                       </div>
-                       <p></p>
-                       <div>
-                       <button id="statbtn" type="button" style="width: 170px;" class="btn btn-default"><span class="glyphicon glyphicon-stats" style="margin-right: 10px;"></span>Testbeds' status</button>
-                       </div>
-                       <div>
-                       <button id="repbtn" type="button" style="width: 170px;" class="btn btn-default"><span class="glyphicon glyphicon-stats"></span>Testbeds' reputation</button>
-                       </div>
-               </div>
-               
-               <div class="col-md-3">
-                       <h3>
-                               ACCOUNT
-                       </h3>
-                       <div>
-                               <a href="/portal/account/"><img src="{{ STATIC_URL }}img/icon_user_color.png" alt="" /></a>
-                       </div>
-                       <div>
-                               <button id="logoutbtn" type="button" class="btn btn-default" data-username="{{ username }}"><span class="glyphicon glyphicon-off"></span> Logout</button>
-                       </div>
-                       <div>
-                               {% if person.last_name %}
-                                       {{person.first_name}} {{person.last_name}}<br />
-                               {% endif %}
-                       <span class="label">Username:</span> <a href='/portal/account/' title="Click here to see and edit your account details.">{{person.email}}</a>
-               </div>
-               </div>
-       </div>
-
+            </div>
+        </div>
+        <div class="col-sm-4">
+            <div class="row">
+                <h3>
+                    <a href="/portal/account/"><img src="{{ STATIC_URL }}img/icon_user_small.png" alt="" /></a>ACCOUNT
+                </h3>
+                
+                <div>
+                    <button id="logoutbtn" type="button" class="btn btn-default" data-username="{{ username }}"><span class="glyphicon glyphicon-off"></span> Logout</button>
+                </div>
+            <div>
+                {% if person.last_name %}
+                    {{person.first_name}} {{person.last_name}}<br />
+                {% endif %}
+                <span class="label">Username:</span> <a href='/portal/account/' title="Click here to see and edit your account details.">{{person.email}}</a>
+            </div>
+            </div>
+            <div class="row">
+                <h3>
+                    <a href="/portal/institution"><img src="{{ STATIC_URL }}img/icon_authority_color_small.png" alt="" /></a>MANAGEMENT
+                </h3>
+               
+                <div>
+                    <span class="glyphicon glyphicon-ok"></span> <a href="/portal/institution#requests">Validate Requests</a>
+                </div>
+            </div>
+        </div>
+        <div class="col-sm-4">
+            <div class="row">
+                <h3>
+                    <a href="/portal/support"><img src="{{ STATIC_URL }}img/icon_support_small.png" alt="" /></a>SUPPORT 
+                </h3>
+                <p>
+                    <span class="glyphicon glyphicon-envelope"></span> <a href="/portal/contact/">Contact</a>
+                </p>
+                <p>
+                    <span class="glyphicon glyphicon-stats"></span> <a target="_blank" href="https://flsmonitor.fed4fire.eu">Testbeds' status</a>
+                    </br />
+                    <span class="glyphicon glyphicon-stats"></span> <a href="/portal/reputation">Testbeds' reputation</a>
+                </p>
+           
+            </div>
+            
+            
+        </div>
+    </div>
 </div>
 {% else %}
 <div class="container-fluid home">
                        $('div.home-panel').hide();
                        $('div#'+$(this).data('panel')).show();
                });
-               $('button#validaterequestbtn').click(function() {
-                       window.location="/portal/institution#requests";
-               });
-               $('button#ticketbtn').click(function() {
-                       window.location="/portal/contact/";
-               });
-               $('button#statbtn').click(function() {
-               window.location="https://flsmonitor.fed4fire.eu";
-               });
-                $('button#repbtn').click(function() {
-               window.location="/portal/reputation";
-                });
-               $('button#signupbtn').click(function() {
-                       window.location="/portal/register/";
-               });
-               $('button#slicerequestbtn').click(function() {
-                       window.location="/portal/slice_request/";
-               });
-               $('button#projectrequestbtn').click(function() {
-                       window.location="/portal/project_request/";
-               });
-
-        myslice.loadSlices();
+               
 });
 </script>
 
@@ -206,7 +171,5 @@ for jfed tool
      }
 </script>
 -->
-{# widget "_widget-monitor.html" #}
-{# widget "_widget-stats-top-slices.html" #}
 
 {% endblock %}
index c8b6b44..21a7dae 100644 (file)
@@ -5,15 +5,14 @@
 
 {% block content %}
 {% include theme|add:"_widget-slice-sections.html" %}
-         
 <div class="container-fluid tab-content container-slice">
-  <div class="tab-pane active row" id="info">...</div>
-  <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="measurements">...</div> -->
-  <div class="tab-pane row" id="experiment">...</div>
-  <!-- <div class="tab-pane row" id="studentslabs">...</div> -->
+  <div class="tab-pane active row" id="info"></div>
+  <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="measurements"></div>
+  <div class="tab-pane row" id="experiment"></div>
+  <!-- <div class="tab-pane row" id="studentslabs"></div> -->
 </div>         
 {% endblock %}
index e03a53c..44b5d63 100644 (file)
@@ -18,7 +18,7 @@
        <li><a href="/slice/{{ slice }}#users">Users</a></li>
        <li><a href="/slice/{{ slice }}#info">Information</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 }}#measurements">Measurements</a></li>
        <li><a href="/slice/{{ slice }}#experiment">Tools</a></li>
        <!-- <li><a href="/slice/{{ slice }}#studentslabs">Students Labs</a></li> -->
 </ul>
@@ -29,7 +29,7 @@
        <li class="users"><a href="#users">Users</a></li>
        <li class="active"><a href="#info">Information</a></li>
        <!-- <li class="statistics"><a href="#experiment">Statistics</a></li> -->
-       <!-- <li class="measurements"><a href="#experiment">Measurements</a></li> -->
+       <li class="measurements"><a href="#measurements">Measurements</a></li>
        <li class="experiment"><a href="#experiment">Tools</a></li>
        <!-- <li class="studentslabs"><a href="#studentslabs">Students Labs</a></li> -->
 </ul>
index 91d3f73..4aebe06 100644 (file)
@@ -6,7 +6,6 @@
 {% endblock %}
 
 {% block content %}
-
 <div class="container">
        <div class="row">
                <div class="col-md-12">
        </div>
 </div>
 <div class="container-fluid tab-content">
-  <div class="tab-pane active row" id="info">...</div>
-  <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 active row" id="info"></div>
+  <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="measurements">...</div>
-  <div class="tab-pane row" id="experiment">...</div>
-  <div class="tab-pane row" id="sla">...</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 %}