##// END OF EJS Templates
Merge pull request #5215 from ivanov/running-kernels...
Paul Ivanov -
r15520:44a94be1 merge
parent child Browse files
Show More
@@ -0,0 +1,40 b''
1 //----------------------------------------------------------------------------
2 // Copyright (C) 2014 The IPython Development Team
3 //
4 // Distributed under the terms of the BSD License. The full license is in
5 // the file COPYING, distributed as part of this software.
6 //----------------------------------------------------------------------------
7
8 //============================================================================
9 // Running Kernels List
10 //============================================================================
11
12 var IPython = (function (IPython) {
13 "use strict";
14
15 var utils = IPython.utils;
16
17 var KernelList = function (selector, options) {
18 IPython.NotebookList.call(this, selector, options, 'running');
19 };
20
21 KernelList.prototype = Object.create(IPython.NotebookList.prototype);
22
23 KernelList.prototype.sessions_loaded = function (d) {
24 this.sessions = d;
25 this.clear_list();
26 var item;
27 for (var path in d) {
28 item = this.new_notebook_item(-1);
29 this.add_link('', path, item);
30 this.add_shutdown_button(item, this.sessions[path]);
31 }
32
33 $('#running_list_header').toggle($.isEmptyObject(d));
34 }
35
36 IPython.KernelList = KernelList;
37
38 return IPython;
39
40 }(IPython));
@@ -0,0 +1,52 b''
1 //----------------------------------------------------------------------------
2 // Copyright (C) 2014 The IPython Development Team
3 //
4 // Distributed under the terms of the BSD License. The full license is in
5 // the file COPYING, distributed as part of this software.
6 //----------------------------------------------------------------------------
7
8 //============================================================================
9 // Running Kernels List
10 //============================================================================
11
12 var IPython = (function (IPython) {
13 "use strict";
14
15 var utils = IPython.utils;
16
17 var SesssionList = function (options) {
18 this.sessions = {};
19 this.base_url = options.base_url || utils.get_body_data("baseUrl");
20 };
21
22 SesssionList.prototype.load_sessions = function(){
23 var that = this;
24 var settings = {
25 processData : false,
26 cache : false,
27 type : "GET",
28 dataType : "json",
29 success : $.proxy(that.sessions_loaded, this)
30 };
31 var url = utils.url_join_encode(this.base_url, 'api/sessions');
32 $.ajax(url, settings);
33 };
34
35 SesssionList.prototype.sessions_loaded = function(data){
36 this.sessions = {};
37 var len = data.length;
38 var nb_path;
39 for (var i=0; i<len; i++) {
40 nb_path = utils.url_path_join(
41 data[i].notebook.path,
42 data[i].notebook.name
43 );
44 this.sessions[nb_path] = data[i].id;
45 }
46 $([IPython.events]).trigger('sessions_loaded.Dashboard', this.sessions);
47 };
48 IPython.SesssionList = SesssionList;
49
50 return IPython;
51
52 }(IPython));
@@ -0,0 +1,5 b''
1 Dashboard "Running" Tab
2 -----------------------
3
4 The dashboard now has a "Running" tab which shows all of the running
5 notebooks.
@@ -22,8 +22,10 b' $(document).ready(function () {'
22 base_url : IPython.utils.get_body_data("baseUrl"),
22 base_url : IPython.utils.get_body_data("baseUrl"),
23 notebook_path : IPython.utils.get_body_data("notebookPath"),
23 notebook_path : IPython.utils.get_body_data("notebookPath"),
24 };
24 };
25 IPython.session_list = new IPython.SesssionList(opts);
25 IPython.notebook_list = new IPython.NotebookList('#notebook_list', opts);
26 IPython.notebook_list = new IPython.NotebookList('#notebook_list', opts);
26 IPython.cluster_list = new IPython.ClusterList('#cluster_list', opts);
27 IPython.cluster_list = new IPython.ClusterList('#cluster_list', opts);
28 IPython.kernel_list = new IPython.KernelList('#running_list', opts);
27 IPython.login_widget = new IPython.LoginWidget('#login_widget', opts);
29 IPython.login_widget = new IPython.LoginWidget('#login_widget', opts);
28
30
29 var interval_id=0;
31 var interval_id=0;
@@ -35,14 +37,14 b' $(document).ready(function () {'
35 //refresh immediately , then start interval
37 //refresh immediately , then start interval
36 if($('.upload_button').length == 0)
38 if($('.upload_button').length == 0)
37 {
39 {
38 IPython.notebook_list.load_sessions();
40 IPython.session_list.load_sessions();
39 IPython.cluster_list.load_list();
41 IPython.cluster_list.load_list();
40 }
42 }
41 if (!interval_id){
43 if (!interval_id){
42 interval_id = setInterval(function(){
44 interval_id = setInterval(function(){
43 if($('.upload_button').length == 0)
45 if($('.upload_button').length == 0)
44 {
46 {
45 IPython.notebook_list.load_sessions();
47 IPython.session_list.load_sessions();
46 IPython.cluster_list.load_list();
48 IPython.cluster_list.load_list();
47 }
49 }
48 }, time_refresh*1000);
50 }, time_refresh*1000);
@@ -71,7 +73,7 b' $(document).ready(function () {'
71
73
72 // bound the upload method to the on change of the file select list
74 // bound the upload method to the on change of the file select list
73 $("#alternate_upload").change(function (event){
75 $("#alternate_upload").change(function (event){
74 IPython.notebook_list.handelFilesUpload(event,'form');
76 IPython.notebook_list.handleFilesUpload(event,'form');
75 });
77 });
76
78
77 // set hash on tab click
79 // set hash on tab click
@@ -14,7 +14,10 b' var IPython = (function (IPython) {'
14
14
15 var utils = IPython.utils;
15 var utils = IPython.utils;
16
16
17 var NotebookList = function (selector, options) {
17 var NotebookList = function (selector, options, element_name) {
18 var that = this
19 // allow code re-use by just changing element_name in kernellist.js
20 this.element_name = element_name || 'notebook';
18 this.selector = selector;
21 this.selector = selector;
19 if (this.selector !== undefined) {
22 if (this.selector !== undefined) {
20 this.element = $(selector);
23 this.element = $(selector);
@@ -25,32 +28,35 b' var IPython = (function (IPython) {'
25 this.sessions = {};
28 this.sessions = {};
26 this.base_url = options.base_url || utils.get_body_data("baseUrl");
29 this.base_url = options.base_url || utils.get_body_data("baseUrl");
27 this.notebook_path = options.notebook_path || utils.get_body_data("notebookPath");
30 this.notebook_path = options.notebook_path || utils.get_body_data("notebookPath");
31 $([IPython.events]).on('sessions_loaded.Dashboard',
32 function(e, d) { that.sessions_loaded(d); });
28 };
33 };
29
34
30 NotebookList.prototype.style = function () {
35 NotebookList.prototype.style = function () {
31 $('#notebook_toolbar').addClass('list_toolbar');
36 var prefix = '#' + this.element_name
32 $('#drag_info').addClass('toolbar_info');
37 $(prefix + '_toolbar').addClass('list_toolbar');
33 $('#notebook_buttons').addClass('toolbar_buttons');
38 $(prefix + '_list_info').addClass('toolbar_info');
34 $('#notebook_list_header').addClass('list_header');
39 $(prefix + '_buttons').addClass('toolbar_buttons');
40 $(prefix + '_list_header').addClass('list_header');
35 this.element.addClass("list_container");
41 this.element.addClass("list_container");
36 };
42 };
37
43
38
44
39 NotebookList.prototype.bind_events = function () {
45 NotebookList.prototype.bind_events = function () {
40 var that = this;
46 var that = this;
41 $('#refresh_notebook_list').click(function () {
47 $('#refresh_' + this.element_name + '_list').click(function () {
42 that.load_list();
48 that.load_sessions();
43 });
49 });
44 this.element.bind('dragover', function () {
50 this.element.bind('dragover', function () {
45 return false;
51 return false;
46 });
52 });
47 this.element.bind('drop', function(event){
53 this.element.bind('drop', function(event){
48 that.handelFilesUpload(event,'drop');
54 that.handleFilesUpload(event,'drop');
49 return false;
55 return false;
50 });
56 });
51 };
57 };
52
58
53 NotebookList.prototype.handelFilesUpload = function(event, dropOrForm) {
59 NotebookList.prototype.handleFilesUpload = function(event, dropOrForm) {
54 var that = this;
60 var that = this;
55 var files;
61 var files;
56 if(dropOrForm =='drop'){
62 if(dropOrForm =='drop'){
@@ -98,37 +104,12 b' var IPython = (function (IPython) {'
98 };
104 };
99
105
100 NotebookList.prototype.load_sessions = function(){
106 NotebookList.prototype.load_sessions = function(){
101 var that = this;
107 IPython.session_list.load_sessions();
102 var settings = {
103 processData : false,
104 cache : false,
105 type : "GET",
106 dataType : "json",
107 success : $.proxy(that.sessions_loaded, this)
108 };
109 var url = utils.url_join_encode(this.base_url, 'api/sessions');
110 $.ajax(url,settings);
111 };
108 };
112
109
113
110
114 NotebookList.prototype.sessions_loaded = function(data){
111 NotebookList.prototype.sessions_loaded = function(data){
115 this.sessions = {};
112 this.sessions = data;
116 var len = data.length;
117 if (len > 0) {
118 for (var i=0; i<len; i++) {
119 var nb_path;
120 if (!data[i].notebook.path) {
121 nb_path = data[i].notebook.name;
122 }
123 else {
124 nb_path = utils.url_path_join(
125 data[i].notebook.path,
126 data[i].notebook.name
127 );
128 }
129 this.sessions[nb_path] = data[i].id;
130 }
131 }
132 this.load_list();
113 this.load_list();
133 };
114 };
134
115
@@ -24,6 +24,7 b' data-notebook-path="{{notebook_path}}"'
24 <div id="tab_content" class="tabbable">
24 <div id="tab_content" class="tabbable">
25 <ul id="tabs" class="nav nav-tabs">
25 <ul id="tabs" class="nav nav-tabs">
26 <li class="active"><a href="#notebooks" data-toggle="tab">Notebooks</a></li>
26 <li class="active"><a href="#notebooks" data-toggle="tab">Notebooks</a></li>
27 <li><a href="#running" data-toggle="tab">Running</a></li>
27 <li><a href="#clusters" data-toggle="tab">Clusters</a></li>
28 <li><a href="#clusters" data-toggle="tab">Clusters</a></li>
28 </ul>
29 </ul>
29
30
@@ -32,7 +33,7 b' data-notebook-path="{{notebook_path}}"'
32 <div id="notebook_toolbar" class="row-fluid">
33 <div id="notebook_toolbar" class="row-fluid">
33 <div class="span8">
34 <div class="span8">
34 <form id='alternate_upload' class='alternate_upload' >
35 <form id='alternate_upload' class='alternate_upload' >
35 <span id="drag_info" style="position:absolute" >
36 <span id="notebook_list_info" style="position:absolute" >
36 To import a notebook, drag the file onto the listing below or <strong>click here</strong>.
37 To import a notebook, drag the file onto the listing below or <strong>click here</strong>.
37 </span>
38 </span>
38 <input type="file" name="datafile" class="fileinput" multiple='multiple'>
39 <input type="file" name="datafile" class="fileinput" multiple='multiple'>
@@ -60,6 +61,26 b' data-notebook-path="{{notebook_path}}"'
60 </div>
61 </div>
61 </div>
62 </div>
62
63
64 <div id="running" class="tab-pane">
65
66 <div id="running_toolbar" class="row-fluid">
67 <div class="span8">
68 <span id="running_list_info">Currently running IPython notebooks</span>
69 </div>
70 <div class="span4" class="clearfix">
71 <span id="running_buttons" class="pull-right">
72 <button id="refresh_running_list" title="Refresh running list" class="btn btn-small"><i class="icon-refresh"></i></button>
73 </span>
74 </div>
75 </div>
76
77 <div id="running_list">
78 <div id="running_list_header" class="row-fluid list_header">
79 <div> There are no notebooks running. </div>
80 </div>
81 </div>
82 </div>
83
63 <div id="clusters" class="tab-pane">
84 <div id="clusters" class="tab-pane">
64
85
65 <div id="cluster_toolbar" class="row-fluid">
86 <div id="cluster_toolbar" class="row-fluid">
@@ -92,7 +113,9 b' data-notebook-path="{{notebook_path}}"'
92 {{super()}}
113 {{super()}}
93 <script src="{{ static_url("base/js/utils.js") }}" type="text/javascript" charset="utf-8"></script>
114 <script src="{{ static_url("base/js/utils.js") }}" type="text/javascript" charset="utf-8"></script>
94 <script src="{{static_url("base/js/dialog.js") }}" type="text/javascript" charset="utf-8"></script>
115 <script src="{{static_url("base/js/dialog.js") }}" type="text/javascript" charset="utf-8"></script>
116 <script src="{{static_url("tree/js/sessionlist.js") }}" type="text/javascript" charset="utf-8"></script>
95 <script src="{{static_url("tree/js/notebooklist.js") }}" type="text/javascript" charset="utf-8"></script>
117 <script src="{{static_url("tree/js/notebooklist.js") }}" type="text/javascript" charset="utf-8"></script>
118 <script src="{{static_url("tree/js/kernellist.js") }}" type="text/javascript" charset="utf-8"></script>
96 <script src="{{static_url("tree/js/clusterlist.js") }}" type="text/javascript" charset="utf-8"></script>
119 <script src="{{static_url("tree/js/clusterlist.js") }}" type="text/javascript" charset="utf-8"></script>
97 <script src="{{static_url("tree/js/main.js") }}" type="text/javascript" charset="utf-8"></script>
120 <script src="{{static_url("tree/js/main.js") }}" type="text/javascript" charset="utf-8"></script>
98 {% endblock %}
121 {% endblock %}
General Comments 0
You need to be logged in to leave comments. Login now