1
- from jupyter_server .utils import url_path_join as ujoin
2
-
3
- from .api import (
4
- IconHandler ,
5
- ListServersAPIHandler ,
6
- ServersAPIHandler ,
7
- ServersInfoHandler ,
8
- )
1
+ import traitlets
2
+
3
+ from .manager import ServerProxyAppManager
9
4
from .config import ServerProxy as ServerProxyConfig
10
5
from .config import get_entrypoint_server_processes , make_handlers , make_server_process
11
6
from .handlers import setup_handlers
7
+ from .api import setup_api_handlers
12
8
13
9
14
10
# Jupyter Extension points
@@ -43,14 +39,33 @@ def _jupyter_labextension_paths():
43
39
def _load_jupyter_server_extension (nbapp ):
44
40
# Set up handlers picked up via config
45
41
base_url = nbapp .web_app .settings ["base_url" ]
42
+
43
+ # Add server_proxy_manager trait to ServerApp and Instantiate a manager
44
+ nbapp .add_traits (
45
+ server_proxy_manager = traitlets .Instance (ServerProxyAppManager )
46
+ )
47
+ manager = nbapp .server_proxy_manager = ServerProxyAppManager ()
46
48
serverproxy_config = ServerProxyConfig (parent = nbapp )
47
49
50
+ # Add a long running background task that monitors the running proxies
51
+ try :
52
+ nbapp .io_loop .call_later (
53
+ serverproxy_config .monitor_interval ,
54
+ manager .monitor ,
55
+ serverproxy_config .monitor_interval
56
+ )
57
+ except AttributeError :
58
+ nbapp .log .debug (
59
+ "[jupyter-server-proxy] Server proxy manager is only supportted "
60
+ "for Notebook >= 7" ,
61
+ )
62
+
48
63
server_processes = [
49
64
make_server_process (name , server_process_config , serverproxy_config )
50
65
for name , server_process_config in serverproxy_config .servers .items ()
51
66
]
52
67
server_processes += get_entrypoint_server_processes (serverproxy_config )
53
- server_handlers = make_handlers (base_url , server_processes )
68
+ server_handlers = make_handlers (base_url , manager , server_processes )
54
69
nbapp .web_app .add_handlers (".*" , server_handlers )
55
70
56
71
# Set up default non-server handler
@@ -59,29 +74,10 @@ def _load_jupyter_server_extension(nbapp):
59
74
serverproxy_config ,
60
75
)
61
76
62
- icon_handlers = []
63
- for sp in server_processes :
64
- if sp .launcher_entry .enabled and sp .launcher_entry .icon_path :
65
- icon_handlers .append (
66
- (
67
- ujoin (base_url , f"server-proxy/icon/{ sp .name } " ),
68
- IconHandler ,
69
- {"path" : sp .launcher_entry .icon_path },
70
- )
71
- )
72
-
73
- nbapp .web_app .add_handlers (
74
- ".*" ,
75
- [
76
- (
77
- ujoin (base_url , "api/server-proxy/servers-info" ),
78
- ServersInfoHandler ,
79
- {"server_processes" : server_processes },
80
- ),
81
- (ujoin (base_url , r"api/server-proxy" ), ListServersAPIHandler ),
82
- (ujoin (base_url , r"api/server-proxy/(?P<name>.*)" ), ServersAPIHandler ),
83
- ]
84
- + icon_handlers ,
77
+ setup_api_handlers (
78
+ nbapp .web_app ,
79
+ manager ,
80
+ server_processes ,
85
81
)
86
82
87
83
nbapp .log .debug (
0 commit comments