clusterlist.js
199 lines
| 6.5 KiB
| application/javascript
|
JavascriptLexer
Brian Granger
|
r6195 | //---------------------------------------------------------------------------- | ||
MinRK
|
r13063 | // Copyright (C) 2011 The IPython Development Team | ||
Brian Granger
|
r6195 | // | ||
// Distributed under the terms of the BSD License. The full license is in | ||||
// the file COPYING, distributed as part of this software. | ||||
//---------------------------------------------------------------------------- | ||||
//============================================================================ | ||||
// NotebookList | ||||
//============================================================================ | ||||
var IPython = (function (IPython) { | ||||
MinRK
|
r13063 | "use strict"; | ||
var utils = IPython.utils; | ||||
Brian Granger
|
r6195 | |||
var ClusterList = function (selector) { | ||||
this.selector = selector; | ||||
if (this.selector !== undefined) { | ||||
this.element = $(selector); | ||||
this.style(); | ||||
this.bind_events(); | ||||
} | ||||
}; | ||||
Bussonnier Matthias
|
r9503 | ClusterList.prototype.baseProjectUrl = function(){ | ||
return this._baseProjectUrl || $('body').data('baseProjectUrl'); | ||||
}; | ||||
Brian Granger
|
r6195 | ClusterList.prototype.style = function () { | ||
MinRK
|
r10920 | $('#cluster_list').addClass('list_container'); | ||
Brian Granger
|
r6195 | $('#cluster_toolbar').addClass('list_toolbar'); | ||
$('#cluster_list_info').addClass('toolbar_info'); | ||||
$('#cluster_buttons').addClass('toolbar_buttons'); | ||||
}; | ||||
ClusterList.prototype.bind_events = function () { | ||||
var that = this; | ||||
$('#refresh_cluster_list').click(function () { | ||||
that.load_list(); | ||||
}); | ||||
}; | ||||
ClusterList.prototype.load_list = function () { | ||||
var settings = { | ||||
processData : false, | ||||
cache : false, | ||||
type : "GET", | ||||
dataType : "json", | ||||
success : $.proxy(this.load_list_success, this) | ||||
}; | ||||
MinRK
|
r13693 | var url = utils.url_join_encode(this.baseProjectUrl(), 'clusters'); | ||
Brian Granger
|
r6195 | $.ajax(url, settings); | ||
}; | ||||
ClusterList.prototype.clear_list = function () { | ||||
MinRK
|
r10920 | this.element.children('.list_item').remove(); | ||
MinRK
|
r13063 | }; | ||
Brian Granger
|
r6195 | |||
ClusterList.prototype.load_list_success = function (data, status, xhr) { | ||||
this.clear_list(); | ||||
var len = data.length; | ||||
for (var i=0; i<len; i++) { | ||||
MinRK
|
r10920 | var element = $('<div/>'); | ||
MinRK
|
r10911 | var item = new ClusterItem(element); | ||
Brian Granger
|
r6195 | item.update_state(data[i]); | ||
MinRK
|
r10911 | element.data('item', item); | ||
this.element.append(element); | ||||
MinRK
|
r13063 | } | ||
Brian Granger
|
r6195 | }; | ||
var ClusterItem = function (element) { | ||||
this.element = $(element); | ||||
this.data = null; | ||||
Brian Granger
|
r6197 | this.style(); | ||
Brian Granger
|
r6195 | }; | ||
Matthias BUSSONNIER
|
r9699 | ClusterItem.prototype.baseProjectUrl = function(){ | ||
return this._baseProjectUrl || $('body').data('baseProjectUrl'); | ||||
}; | ||||
Brian Granger
|
r6197 | ClusterItem.prototype.style = function () { | ||
MinRK
|
r10920 | this.element.addClass('list_item').addClass("row-fluid"); | ||
MinRK
|
r13063 | }; | ||
Brian Granger
|
r6197 | |||
Brian Granger
|
r6195 | ClusterItem.prototype.update_state = function (data) { | ||
this.data = data; | ||||
if (data.status === 'running') { | ||||
this.state_running(); | ||||
} else if (data.status === 'stopped') { | ||||
this.state_stopped(); | ||||
MinRK
|
r13063 | } | ||
}; | ||||
Brian Granger
|
r6195 | |||
ClusterItem.prototype.state_stopped = function () { | ||||
Brian Granger
|
r6197 | var that = this; | ||
MinRK
|
r10920 | var profile_col = $('<span/>').addClass('profile_col span4').text(this.data.profile); | ||
var status_col = $('<span/>').addClass('status_col span3').html('stopped'); | ||||
var engines_col = $('<span/>').addClass('engine_col span3'); | ||||
Matthias BUSSONNIER
|
r9289 | var input = $('<input/>').attr('type','number') | ||
.attr('min',1) | ||||
.attr('size',3) | ||||
.addClass('engine_num_input'); | ||||
Brian Granger
|
r6201 | engines_col.append(input); | ||
MinRK
|
r10891 | var start_button = $('<button/>').addClass("btn btn-mini").text("Start"); | ||
MinRK
|
r10920 | var action_col = $('<span/>').addClass('action_col span2').append( | ||
$("<span/>").addClass("item_buttons btn-group").append( | ||||
MinRK
|
r10891 | start_button | ||
) | ||||
); | ||||
MinRK
|
r10920 | this.element.empty() | ||
MinRK
|
r10911 | .append(profile_col) | ||
MinRK
|
r10920 | .append(status_col) | ||
MinRK
|
r10911 | .append(engines_col) | ||
MinRK
|
r10920 | .append(action_col); | ||
Brian Granger
|
r6195 | start_button.click(function (e) { | ||
Brian Granger
|
r6197 | var n = that.element.find('.engine_num_input').val(); | ||
Brian Granger
|
r6199 | if (!/^\d+$/.test(n) && n.length>0) { | ||
Brian Granger
|
r6197 | status_col.html('invalid engine #'); | ||
} else { | ||||
var settings = { | ||||
cache : false, | ||||
data : {n:n}, | ||||
type : "POST", | ||||
dataType : "json", | ||||
success : function (data, status, xhr) { | ||||
that.update_state(data); | ||||
}, | ||||
error : function (data, status, xhr) { | ||||
MinRK
|
r13063 | status_col.html("error starting cluster"); | ||
Brian Granger
|
r6197 | } | ||
}; | ||||
status_col.html('starting'); | ||||
MinRK
|
r13693 | var url = utils.url_join_encode( | ||
MinRK
|
r13063 | that.baseProjectUrl(), | ||
'clusters', | ||||
that.data.profile, | ||||
'start' | ||||
); | ||||
Brian Granger
|
r6197 | $.ajax(url, settings); | ||
MinRK
|
r13063 | } | ||
Brian Granger
|
r6195 | }); | ||
}; | ||||
Brian Granger
|
r6197 | |||
Brian Granger
|
r6195 | ClusterItem.prototype.state_running = function () { | ||
Brian Granger
|
r6197 | var that = this; | ||
MinRK
|
r10920 | var profile_col = $('<span/>').addClass('profile_col span4').text(this.data.profile); | ||
var status_col = $('<span/>').addClass('status_col span3').html('running'); | ||||
var engines_col = $('<span/>').addClass('engines_col span3').html(this.data.n); | ||||
MinRK
|
r10891 | var stop_button = $('<button/>').addClass("btn btn-mini").text("Stop"); | ||
MinRK
|
r10920 | var action_col = $('<span/>').addClass('action_col span2').append( | ||
$("<span/>").addClass("item_buttons btn-group").append( | ||||
MinRK
|
r10891 | stop_button | ||
) | ||||
); | ||||
MinRK
|
r10920 | this.element.empty() | ||
MinRK
|
r10911 | .append(profile_col) | ||
MinRK
|
r10920 | .append(status_col) | ||
MinRK
|
r10911 | .append(engines_col) | ||
MinRK
|
r10920 | .append(action_col); | ||
Brian Granger
|
r6197 | stop_button.click(function (e) { | ||
var settings = { | ||||
cache : false, | ||||
type : "POST", | ||||
dataType : "json", | ||||
success : function (data, status, xhr) { | ||||
that.update_state(data); | ||||
}, | ||||
error : function (data, status, xhr) { | ||||
console.log('error',data); | ||||
MinRK
|
r13063 | status_col.html("error stopping cluster"); | ||
Brian Granger
|
r6197 | } | ||
}; | ||||
MinRK
|
r13063 | status_col.html('stopping'); | ||
MinRK
|
r13693 | var url = utils.url_join_encode( | ||
MinRK
|
r13063 | that.baseProjectUrl(), | ||
'clusters', | ||||
that.data.profile, | ||||
'stop' | ||||
); | ||||
Brian Granger
|
r6197 | $.ajax(url, settings); | ||
Brian Granger
|
r6195 | }); | ||
}; | ||||
IPython.ClusterList = ClusterList; | ||||
IPython.ClusterItem = ClusterItem; | ||||
return IPython; | ||||
}(IPython)); | ||||