Show More
@@ -295,6 +295,9 b' define([' | |||
|
295 | 295 | this.element.find('#restart_kernel').click(function () { |
|
296 | 296 | that.notebook.restart_kernel(); |
|
297 | 297 | }); |
|
298 | this.element.find('#reconnect_kernel').click(function () { | |
|
299 | that.notebook.kernel.reconnect(); | |
|
300 | }); | |
|
298 | 301 | // Help |
|
299 | 302 | if (this.tour) { |
|
300 | 303 | this.element.find('#notebook_tour').click(function () { |
@@ -132,6 +132,13 b' define([' | |||
|
132 | 132 | knw.warning("Connecting to kernel"); |
|
133 | 133 | }); |
|
134 | 134 | |
|
135 | this.events.on('kernel_connection_dead.Kernel', function (evt, info) { | |
|
136 | knw.danger("Not Connected", undefined, function () { | |
|
137 | // schedule reconnect a short time in the future, don't reconnect immediately | |
|
138 | setTimeout($.proxy(info.kernel.reconnect, info.kernel), 500); | |
|
139 | }, {title: 'click to reconnect'}); | |
|
140 | }); | |
|
141 | ||
|
135 | 142 | this.events.on('kernel_connected.Kernel', function () { |
|
136 | 143 | knw.info("Connected", 500); |
|
137 | 144 | }); |
@@ -66,6 +66,7 b' define([' | |||
|
66 | 66 | |
|
67 | 67 | this._autorestart_attempt = 0; |
|
68 | 68 | this._reconnect_attempt = 0; |
|
69 | this.reconnect_limit = 7; | |
|
69 | 70 | }; |
|
70 | 71 | |
|
71 | 72 | /** |
@@ -332,8 +333,15 b' define([' | |||
|
332 | 333 | * @function reconnect |
|
333 | 334 | */ |
|
334 | 335 | Kernel.prototype.reconnect = function () { |
|
335 | this.events.trigger('kernel_reconnecting.Kernel', {kernel: this}); | |
|
336 | setTimeout($.proxy(this.start_channels, this), 3000); | |
|
336 | if (this.is_connected()) { | |
|
337 | return; | |
|
338 | } | |
|
339 | this._reconnect_attempt = this._reconnect_attempt + 1; | |
|
340 | this.events.trigger('kernel_reconnecting.Kernel', { | |
|
341 | kernel: this, | |
|
342 | attempt: this._reconnect_attempt, | |
|
343 | }); | |
|
344 | this.start_channels(); | |
|
337 | 345 | }; |
|
338 | 346 | |
|
339 | 347 | /** |
@@ -524,12 +532,27 b' define([' | |||
|
524 | 532 | this.events.trigger('kernel_disconnected.Kernel', {kernel: this}); |
|
525 | 533 | if (error) { |
|
526 | 534 | console.log('WebSocket connection failed: ', ws_url); |
|
527 | this._reconnect_attempt = this._reconnect_attempt + 1; | |
|
528 | 535 | this.events.trigger('kernel_connection_failed.Kernel', {kernel: this, ws_url: ws_url, attempt: this._reconnect_attempt}); |
|
529 | 536 | } |
|
530 | this.reconnect(); | |
|
537 | this._schedule_reconnect(); | |
|
531 | 538 | }; |
|
532 | ||
|
539 | ||
|
540 | Kernel.prototype._schedule_reconnect = function () { | |
|
541 | // function to call when kernel connection is lost | |
|
542 | // schedules reconnect, or fires 'connection_dead' if reconnect limit is hit | |
|
543 | if (this._reconnect_attempt < this.reconnect_limit) { | |
|
544 | var timeout = Math.pow(2, this._reconnect_attempt); | |
|
545 | console.log("Connection lost, reconnecting in " + timeout + " seconds."); | |
|
546 | setTimeout($.proxy(this.reconnect, this), 1e3 * timeout); | |
|
547 | } else { | |
|
548 | this.events.trigger('kernel_connection_dead.Kernel', { | |
|
549 | kernel: this, | |
|
550 | reconnect_attempt: this._reconnect_attempt, | |
|
551 | }); | |
|
552 | console.log("Failed to reconnect, giving up."); | |
|
553 | } | |
|
554 | }; | |
|
555 | ||
|
533 | 556 | /** |
|
534 | 557 | * Close the websocket channels. After successful close, the value |
|
535 | 558 | * in `this.channels[channel_name]` will be null. |
@@ -230,10 +230,16 b' class="notebook_app"' | |||
|
230 | 230 | <ul id="kernel_menu" class="dropdown-menu"> |
|
231 | 231 | <li id="int_kernel" |
|
232 | 232 | title="Send KeyboardInterrupt (CTRL-C) to the Kernel"> |
|
233 |
<a href="#">Interrupt</a> |
|
|
233 | <a href="#">Interrupt</a> | |
|
234 | </li> | |
|
234 | 235 | <li id="restart_kernel" |
|
235 | 236 | title="Restart the Kernel"> |
|
236 |
<a href="#">Restart</a> |
|
|
237 | <a href="#">Restart</a> | |
|
238 | </li> | |
|
239 | <li id="reconnect_kernel" | |
|
240 | title="Reconnect to the Kernel"> | |
|
241 | <a href="#">Reconnect</a> | |
|
242 | </li> | |
|
237 | 243 | <li class="divider"></li> |
|
238 | 244 | <li id="menu-change-kernel" class="dropdown-submenu"> |
|
239 | 245 | <a href="#">Change kernel</a> |
@@ -257,7 +257,11 b' casper.notebook_test(function () {' | |||
|
257 | 257 | 'ws_closed_error', |
|
258 | 258 | [ |
|
259 | 259 | 'kernel_disconnected.Kernel', |
|
260 | 'kernel_connection_failed.Kernel' | |
|
260 | 'kernel_connection_failed.Kernel', | |
|
261 | 'kernel_reconnecting.Kernel', | |
|
262 | 'kernel_connected.Kernel', | |
|
263 | 'kernel_busy.Kernel', | |
|
264 | 'kernel_idle.Kernel' | |
|
261 | 265 | ], |
|
262 | 266 | function () { |
|
263 | 267 | this.thenEvaluate(function () { |
@@ -265,6 +269,8 b' casper.notebook_test(function () {' | |||
|
265 | 269 | }); |
|
266 | 270 | } |
|
267 | 271 | ); |
|
272 | // wait for any last idle/busy messages to be handled | |
|
273 | this.wait_for_kernel_ready(); | |
|
268 | 274 | |
|
269 | 275 | // start the kernel back up |
|
270 | 276 | this.thenEvaluate(function () { |
General Comments 0
You need to be logged in to leave comments.
Login now