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
94from .config import ServerProxy as ServerProxyConfig
105from .config import get_entrypoint_server_processes , make_handlers , make_server_process
116from .handlers import setup_handlers
7+ from .api import setup_api_handlers
128
139
1410# Jupyter Extension points
@@ -43,14 +39,33 @@ def _jupyter_labextension_paths():
4339def _load_jupyter_server_extension (nbapp ):
4440 # Set up handlers picked up via config
4541 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 ()
4648 serverproxy_config = ServerProxyConfig (parent = nbapp )
4749
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+
4863 server_processes = [
4964 make_server_process (name , server_process_config , serverproxy_config )
5065 for name , server_process_config in serverproxy_config .servers .items ()
5166 ]
5267 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 )
5469 nbapp .web_app .add_handlers (".*" , server_handlers )
5570
5671 # Set up default non-server handler
@@ -59,29 +74,10 @@ def _load_jupyter_server_extension(nbapp):
5974 serverproxy_config ,
6075 )
6176
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 ,
8581 )
8682
8783 nbapp .log .debug (
0 commit comments