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)
(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 !!!
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
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
<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() {
{% 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() {
<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">
<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>
</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}}
<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 %}