Skip to content

Commit 16595e9

Browse files
ZsailerGitHub Enterprise
authored andcommitted
add heartbeat extension (jupyter-server#106)
* add heartbeat extension * Bump to 0.8.1
1 parent 86c7b19 commit 16595e9

File tree

15 files changed

+110
-20
lines changed

15 files changed

+110
-20
lines changed

conftest.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def jp_server_config(datastudio_env):
7171
"jpserver_extensions": {
7272
"data_studio_jupyter_extensions": True,
7373
"data_studio_jupyter_extensions.extensions.telemetry": True,
74+
"data_studio_jupyter_extensions.extensions.heartbeat": True,
7475
"nbclassic": True,
7576
},
7677
},
@@ -85,12 +86,3 @@ def datastudio_extension(jp_serverapp):
8586
point = pkg.extension_points["data_studio_jupyter_extensions"]
8687
app = point.app
8788
return app
88-
89-
90-
@pytest.fixture
91-
def datastudio_telemetry_extension(jp_serverapp):
92-
name = "data_studio_jupyter_extensions.extensions.telemetry"
93-
pkg = jp_serverapp.extension_manager.extensions[name]
94-
point = pkg.extension_points["telemetry"]
95-
app = point.app
96-
return app

data_studio_jupyter_extensions/__init__.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,24 @@ def _jupyter_labextension_paths(): # pragma: no cover
1515

1616
def _jupyter_server_extension_points(): # pragma: no cover
1717
from data_studio_jupyter_extensions.app import DataStudioJupyterExtensions
18+
from data_studio_jupyter_extensions.extensions.telemetry.extension import (
19+
TelemetryExtension,
20+
)
21+
from data_studio_jupyter_extensions.extensions.heartbeat.extension import (
22+
HeartbeatExtension,
23+
)
1824

1925
return [
2026
{
2127
"module": "data_studio_jupyter_extensions.app",
2228
"app": DataStudioJupyterExtensions,
23-
}
29+
},
30+
{
31+
"module": "data_studio_jupyter_extensions.extensions.telemetry.extension",
32+
"app": TelemetryExtension,
33+
},
34+
{
35+
"module": "data_studio_jupyter_extensions.extensions.heartbeat.extension",
36+
"app": HeartbeatExtension,
37+
},
2438
]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.8.0" # pragma: no cover
1+
__version__ = "0.8.1" # pragma: no cover

data_studio_jupyter_extensions/app.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ class DataStudioJupyterExtensions(ExtensionAppJinjaMixin, ExtensionApp):
8686
def _default_ssl_cert_file(self): # pragma: no cover
8787
return get_ssl_cert(jupyter_runtime_dir())
8888

89+
dsw_url = UnicodeFromEnv(
90+
name=constants.DSW_URL,
91+
allow_none=True,
92+
).tag(config=True)
93+
8994
datastudio_url = UnicodeFromEnv(
9095
name=constants.DS_URL, allow_none=True, help="ACS Data Platform URL."
9196
).tag(config=True)
@@ -177,6 +182,7 @@ def _jupyter_server_config(self):
177182
"ds_ws_max_buffer_size": self.ds_ws_max_buffer_size,
178183
"ds_ws_max_message_size": self.ds_ws_max_message_size,
179184
},
185+
"allow_origin": self.dsw_url,
180186
},
181187
}
182188
apply_defaults(config, base_config)

data_studio_jupyter_extensions/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@
1414
STDINPORT = "STDINPORT"
1515
CONTROLPORT = "CONTROLPORT"
1616
NOTEBOOK_SERVICE_MODE = "NOTEBOOK_SERVICE_MODE"
17+
DSW_URL = "DSW_URL"
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from data_studio_jupyter_extensions.extensions.heartbeat.extension import (
2+
HeartbeatExtension,
3+
)
4+
5+
6+
def _jupyter_server_extension_points(): # pragma: no cover
7+
return [
8+
{
9+
"module": "data_studio_jupyter_extensions.extensions.heartbeat.extension",
10+
"app": HeartbeatExtension,
11+
}
12+
]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from jupyter_server.extension.application import ExtensionApp
2+
3+
from .handlers import handlers
4+
5+
6+
class HeartbeatExtension(ExtensionApp):
7+
"""Jupyter Server extension that verifies
8+
the health of the server.
9+
"""
10+
11+
name = "heartbeat"
12+
handlers = handlers
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"""Application Heartbeat for PIE Health check"""
2+
import os
3+
from urllib.parse import urlparse
4+
5+
from jupyter_server.base.handlers import JupyterHandler
6+
from jupyter_server.utils import url_path_join
7+
8+
9+
class HeartbeatHandler(JupyterHandler):
10+
"""Heartbeat handler"""
11+
12+
def set_default_headers(self):
13+
datastudio_url = os.environ.get("DSW_URL")
14+
parsed_uri = urlparse(datastudio_url)
15+
domain = "{uri.scheme}://{uri.netloc}".format(uri=parsed_uri)
16+
self.set_header("Access-Control-Allow-Origin", domain)
17+
self.set_header("Access-Control-Allow-Headers", "Authorization")
18+
self.set_header("Access-Control-Allow-Methods", "GET, OPTIONS")
19+
20+
def options(self):
21+
self.set_status(204)
22+
self.finish()
23+
24+
def get(self):
25+
"""HTTP GET Heartbeat handler"""
26+
self.finish("Yep, we're healthy here.")
27+
28+
29+
handlers = [
30+
(r"/__health", HeartbeatHandler),
31+
]

data_studio_jupyter_extensions/extensions/telemetry/__init__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44

55

66
def _jupyter_server_extension_points(): # pragma: no cover
7-
from data_studio_jupyter_extensions.extensions.telemetry.extension import (
8-
TelemetryExtension,
9-
)
10-
117
return [
128
{
139
"module": "data_studio_jupyter_extensions.extensions.telemetry.extension",

data_studio_jupyter_extensions/extensions/telemetry/extension.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ def initialize_settings(self):
2222
self.initialize_configurables()
2323
for schema_file in get_schema_files():
2424
self.telemetry_bus.register_schema_file(schema_file)
25-
self.settings.update({"telemetry_bus": self.telemetry_bus})
25+
self.settings.update(
26+
{
27+
"telemetry_bus": self.telemetry_bus,
28+
}
29+
)
2630

2731
def initialize_configurables(self):
2832
handlers = []

0 commit comments

Comments
 (0)