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
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
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 = {}
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))
color:#333333;
}
h3 {
- font-size:13pt;
+ font-size:12pt;
+ letter-spacing:0.6pt;
color:#201E62;
}
input[type=checkbox] {
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;
font-size:12pt;
color:#333333;
}
+ul {
+ margin:0 0 0 15px;
+ padding:0;
+}
+li {
+}
span.subtitle {
color:#454545;
font-size:9pt;
text-decoration:underline;
}
.tab-pane {
- padding-top:15px;
}
/* buttons */
button.btn, input.btn {
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;
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
// 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, "\\$&");
}
<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>
p = myslice.projects();
if(p != null){
drawProjects(p);
+ drawProjectsTree(p,slices);
}
{% endif %}
});
$("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();
{% 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"> </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>
}
</script>
-->
-{# widget "_widget-monitor.html" #}
-{# widget "_widget-stats-top-slices.html" #}
{% endblock %}
{% 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 %}
<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>
<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>
{% 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 %}