Skip to content

Commit ea92c6b

Browse files
authored
Merge pull request #93 from fcollonval/fcollonval/issue92
Clarify notebook/jupyter_server usage
2 parents 77ef234 + a26f76b commit ea92c6b

File tree

6 files changed

+33
-23
lines changed

6 files changed

+33
-23
lines changed

jupyter_resource_usage/__init__.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import json
22
import os.path as osp
33

4-
from notebook.utils import url_path_join
4+
from jupyter_server.utils import url_path_join
55
from tornado import ioloop
66

77
from jupyter_resource_usage.api import ApiHandler
@@ -19,7 +19,7 @@ def _jupyter_labextension_paths():
1919
return [{"src": "labextension", "dest": data["name"]}]
2020

2121

22-
def _jupyter_server_extension_paths():
22+
def _jupyter_server_extension_points():
2323
"""
2424
Set up the server extension for collecting metrics
2525
"""
@@ -40,19 +40,22 @@ def _jupyter_nbextension_paths():
4040
]
4141

4242

43-
def load_jupyter_server_extension(nbapp):
43+
def _load_jupyter_server_extension(server_app):
4444
"""
4545
Called during notebook start
4646
"""
47-
resuseconfig = ResourceUseDisplay(parent=nbapp)
48-
nbapp.web_app.settings["jupyter_resource_usage_display_config"] = resuseconfig
49-
base_url = nbapp.web_app.settings["base_url"]
47+
resuseconfig = ResourceUseDisplay(parent=server_app)
48+
server_app.web_app.settings["jupyter_resource_usage_display_config"] = resuseconfig
49+
base_url = server_app.web_app.settings["base_url"]
5050

51-
nbapp.web_app.add_handlers(
51+
server_app.web_app.add_handlers(
5252
".*", [(url_path_join(base_url, "/api/metrics/v1"), ApiHandler)]
5353
)
5454

5555
callback = ioloop.PeriodicCallback(
56-
PrometheusHandler(PSUtilMetricsLoader(nbapp)), 1000
56+
PrometheusHandler(PSUtilMetricsLoader(server_app)), 1000
5757
)
5858
callback.start()
59+
60+
61+
load_jupyter_server_extension = _load_jupyter_server_extension

jupyter_resource_usage/api.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from concurrent.futures import ThreadPoolExecutor
33

44
import psutil
5-
from notebook.base.handlers import IPythonHandler
5+
from jupyter_server.base.handlers import APIHandler
66
from tornado import web
77
from tornado.concurrent import run_on_executor
88

@@ -13,9 +13,14 @@
1313
from .utils import Callable
1414

1515

16-
class ApiHandler(IPythonHandler):
16+
class ApiHandler(APIHandler):
17+
def initialize(self):
18+
self.executor = ThreadPoolExecutor(max_workers=5)
1719

18-
executor = ThreadPoolExecutor(max_workers=5)
20+
def __del__(self):
21+
# Ensure the executor is properly shutdown
22+
self.executor.shutdown(wait=False)
23+
super().__del__()
1924

2025
@web.authenticated
2126
async def get(self):

jupyter_resource_usage/metrics.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
except ImportError:
44
psutil = None
55

6-
from notebook.notebookapp import NotebookApp
6+
from jupyter_server.serverapp import ServerApp
77

88

99
class PSUtilMetricsLoader:
10-
def __init__(self, nbapp: NotebookApp):
11-
self.config = nbapp.web_app.settings["jupyter_resource_usage_display_config"]
12-
self.nbapp = nbapp
10+
def __init__(self, server_app: ServerApp):
11+
self.config = server_app.web_app.settings[
12+
"jupyter_resource_usage_display_config"
13+
]
14+
self.server_app = server_app
1315

1416
def get_process_metric_value(self, process, name, kwargs, attribute=None):
1517
try:

jupyter_resource_usage/prometheus.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from typing import Optional
22

3-
from jupyter_resource_usage.metrics import PSUtilMetricsLoader
4-
from notebook.notebookapp import NotebookApp
53
from prometheus_client import Gauge
64

5+
from jupyter_resource_usage.metrics import PSUtilMetricsLoader
6+
77
try:
88
# Traitlets >= 4.3.3
99
from traitlets import Callable
@@ -16,7 +16,7 @@ def __init__(self, metricsloader: PSUtilMetricsLoader):
1616
super().__init__()
1717
self.metricsloader = metricsloader
1818
self.config = metricsloader.config
19-
self.session_manager = metricsloader.nbapp.session_manager
19+
self.session_manager = metricsloader.server_app.session_manager
2020

2121
gauge_names = ["total_memory", "max_memory", "total_cpu", "max_cpu"]
2222
for name in gauge_names:

jupyter_resource_usage/tests/test_basic.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ class TestBasic:
88
def test_import_serverextension(self):
99
"""Check that serverextension hooks are available"""
1010
from jupyter_resource_usage import (
11-
_jupyter_server_extension_paths,
11+
_jupyter_server_extension_points,
1212
_jupyter_nbextension_paths,
13-
load_jupyter_server_extension,
13+
_load_jupyter_server_extension,
1414
)
1515

16-
assert _jupyter_server_extension_paths() == [
16+
assert _jupyter_server_extension_points() == [
1717
{"module": "jupyter_resource_usage"}
1818
]
1919
assert _jupyter_nbextension_paths() == [
@@ -39,7 +39,7 @@ def test_import_serverextension(self):
3939
) as psutil_metrics_loader:
4040

4141
# load up with mock
42-
load_jupyter_server_extension(nbapp_mock)
42+
_load_jupyter_server_extension(nbapp_mock)
4343

4444
# assert that we installed the application in settings
4545
print(nbapp_mock.web_app.settings)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
long_description_content_type="text/markdown",
7676
cmdclass=cmdclass,
7777
packages=setuptools.find_packages(),
78-
install_requires=["notebook>=5.6.0", "prometheus_client", "psutil>=5.6.0"],
78+
install_requires=["jupyter_server>=1.0.0", "prometheus_client", "psutil>=5.6.0"],
7979
extras_require={
8080
"dev": ["autopep8", "black", "pytest", "flake8", "pytest-cov>=2.6.1", "mock"]
8181
},

0 commit comments

Comments
 (0)