Better respect for abstraction barriers

Jessica B. Hamrick 12 years ago
parent 2f3d8617b4
commit cf98a0a5a0

@ -121,15 +121,13 @@ define([
// Implicitly start off in Command mode, switching to Edit mode will trigger event
$modal_ind_icon.attr('class','command_mode_icon').attr('title','Command Mode');
// Kernel events
this.events.on('status_idle.Kernel',function () {
that.save_widget.update_document_title();
$kernel_ind_icon.attr('class','kernel_idle_icon').attr('title','Kernel Idle');
// Kernel events
this.events.on('status_started.Kernel', function () {
knw.info("Kernel Started", 500);
});
this.events.on('status_busy.Kernel',function () {
window.document.title='(Busy) '+window.document.title;
$kernel_ind_icon.attr('class','kernel_busy_icon').attr('title','Kernel Busy');
this.events.on('status_connected.Kernel', function () {
knw.info("Websockets Connected", 500);
});
this.events.on('status_restarting.Kernel',function () {
@ -137,33 +135,41 @@ define([
knw.set_message("Restarting kernel", 2000);
});
this.events.on('status_dead.Kernel',function () {
that.save_widget.update_document_title();
knw.danger("Dead kernel");
$kernel_ind_icon.attr('class','kernel_dead_icon').attr('title','Kernel Dead');
});
this.events.on('status_interrupting.Kernel',function () {
knw.set_message("Interrupting kernel", 2000);
});
// Start the kernel indicator in the busy state, and send a kernel_info request.
// When the kernel_info reply arrives, the kernel is idle.
$kernel_ind_icon.attr('class','kernel_busy_icon').attr('title','Kernel Busy');
this.events.on('status_started.Kernel', function (evt, data) {
knw.info("Kernel Started", 500);
this.events.on('status_disconnected.Kernel', function () {
$kernel_ind_icon
.attr('class', 'kernel_disconnected_icon')
.attr('title', 'No Connection to Kernel');
});
this.events.on('status_connected.Kernel', function (evt, data) {
knw.info("Websockets Connected", 500);
that.events.trigger('status_busy.Kernel');
data.kernel.kernel_info(function () {
that.events.trigger('status_idle.Kernel');
this.events.on('early_disconnect.Kernel', function (ws_url) {
var msg = "A WebSocket connection could not be established." +
" You will NOT be able to run code. Check your" +
" network connection or notebook server configuration.";
dialog.modal({
title: "WebSocket connection failed",
body: msg,
keyboard_manager: that.keyboard_manager,
notebook: that.notebook,
buttons : {
"OK": {},
"Reconnect": {
click: that.notebook.kernel.reconnect
}
}
});
});
this.events.on('status_restart_failed.Kernel',function () {
this.events.on('status_dead.Kernel',function () {
that.save_widget.update_document_title();
knw.danger("Dead kernel");
$kernel_ind_icon.attr('class','kernel_dead_icon').attr('title','Kernel Dead');
});
this.events.on('status_dead.Kernel',function () {
var msg = 'The kernel has died, and the automatic restart has failed.' +
' It is possible the kernel cannot be restarted.' +
' If you are not able to restart the kernel, you will still be able to save' +
@ -178,10 +184,7 @@ define([
buttons : {
"Manual Restart": {
class: "btn-danger",
click: function () {
that.events.trigger('status_restarting.Kernel');
that.notebook.start_kernel();
}
click: that.notebook.kernel.restart
},
"Don't restart": {}
}
@ -229,45 +232,19 @@ define([
knw.danger(short, undefined, showMsg);
});
this.events.on('status_disconnected.Kernel', function (event, data) {
var kernel = data.kernel;
var ws_url = data.ws_url;
var early = data.early;
var msg;
this.events.on('status_idle.Kernel',function () {
that.save_widget.update_document_title();
$kernel_ind_icon.attr('class','kernel_idle_icon').attr('title','Kernel Idle');
});
$kernel_ind_icon
.attr('class', 'kernel_disconnected_icon')
.attr('title', 'No Connection to Kernel');
if (!early) {
knw.warning('Reconnecting');
setTimeout(function () {
kernel.start_channels();
}, 5000);
return;
}
console.log('WebSocket connection failed: ', ws_url);
msg = "A WebSocket connection could not be established." +
" You will NOT be able to run code. Check your" +
" network connection or notebook server configuration.";
dialog.modal({
title: "WebSocket connection failed",
body: msg,
keyboard_manager: that.keyboard_manager,
notebook: that.notebook,
buttons : {
"OK": {},
"Reconnect": {
click: function () {
knw.warning('Reconnecting');
setTimeout(function () {
kernel.start_channels();
}, 5000);
}
}
}
});
this.events.on('status_busy.Kernel',function () {
window.document.title='(Busy) '+window.document.title;
$kernel_ind_icon.attr('class','kernel_busy_icon').attr('title','Kernel Busy');
});
// Start the kernel indicator in the busy state, and send a kernel_info request.
// When the kernel_info reply arrives, the kernel is idle.
$kernel_ind_icon.attr('class','kernel_busy_icon').attr('title','Kernel Busy');
};
/**

@ -176,6 +176,9 @@ define([
* POST /api/kernels/[:kernel_id]/restart
*/
Kernel.prototype.restart = function (success, error) {
this.events.trigger('status_restarting.Kernel', {kernel: this});
this.stop_channels();
var that = this;
var on_success = function (data, status, xhr) {
that._kernel_started(data, status, xhr);
@ -195,6 +198,18 @@ define([
});
};
/**
* Not actually a HTTP request, but useful function nonetheless
* for reconnecting to the kernel if the connection is somehow lost
*/
Kernel.prototype.reconnect = function () {
this.events.trigger('status_reconnecting.Kernel');
var that = this;
setTimeout(function () {
that.start_channels();
}, 5000);
};
Kernel.prototype._on_success = function (success) {
var that = this;
return function (data, status, xhr) {
@ -224,9 +239,12 @@ define([
this.start_channels();
};
Kernel.prototype._kernel_restarting = function () {
this.events.trigger('status_restarting.Kernel', {kernel: this});
this.stop_channels();
Kernel.prototype._kernel_connected = function () {
var that = this;
this.events.trigger('status_connected.Kernel');
this.kernel_info(function () {
that.events.trigger('status_idle.Kernel');
});
};
Kernel.prototype._kernel_dead = function () {
@ -234,12 +252,6 @@ define([
this.stop_channels();
};
Kernel.prototype._ws_closed = function(ws_url, early) {
this.stop_channels();
this.events.trigger('status_disconnected.Kernel',
{ws_url: ws_url, kernel: this, early: early}
);
};
/**
* Start the `shell`and `iopub` channels.
@ -325,6 +337,17 @@ define([
}
};
Kernel.prototype._ws_closed = function(ws_url, early) {
this.stop_channels();
this.events.trigger('status_disconnected.Kernel');
if (!early) {
this.reconnect();
} else {
console.log('WebSocket connection failed: ', ws_url);
this.events.trigger('early_disconnect.Kernel', ws_url);
}
};
/**
* Stop the websocket channels.
* @method stop_channels

@ -50,7 +50,6 @@ define([
Session.prototype.start = function (success, error) {
var that = this;
var on_success = function (data, status, xhr) {
console.log("Session started: ", data.id);
var kernel_service_url = utils.url_path_join(that.base_url, "api/kernels");
that.kernel = new kernel.Kernel(
kernel_service_url, that.ws_url, that.notebook,

Loading…
Cancel
Save