mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-18 07:23:00 +00:00
server proxy error pages from the Hub
This commit is contained in:
@@ -937,6 +937,7 @@ class JupyterHub(Application):
|
|||||||
'--api-ip', self.proxy.api_server.ip,
|
'--api-ip', self.proxy.api_server.ip,
|
||||||
'--api-port', str(self.proxy.api_server.port),
|
'--api-port', str(self.proxy.api_server.port),
|
||||||
'--default-target', self.hub.server.host,
|
'--default-target', self.hub.server.host,
|
||||||
|
'--error-target', url_path_join(self.hub.server.url, 'error'),
|
||||||
]
|
]
|
||||||
if self.subdomain_host:
|
if self.subdomain_host:
|
||||||
cmd.append('--host-routing')
|
cmd.append('--host-routing')
|
||||||
|
@@ -410,6 +410,7 @@ class BaseHandler(RequestHandler):
|
|||||||
"""render custom error pages"""
|
"""render custom error pages"""
|
||||||
exc_info = kwargs.get('exc_info')
|
exc_info = kwargs.get('exc_info')
|
||||||
message = ''
|
message = ''
|
||||||
|
exception = None
|
||||||
status_message = responses.get(status_code, 'Unknown HTTP Error')
|
status_message = responses.get(status_code, 'Unknown HTTP Error')
|
||||||
if exc_info:
|
if exc_info:
|
||||||
exception = exc_info[1]
|
exception = exc_info[1]
|
||||||
|
@@ -3,12 +3,14 @@
|
|||||||
# Copyright (c) Jupyter Development Team.
|
# Copyright (c) Jupyter Development Team.
|
||||||
# Distributed under the terms of the Modified BSD License.
|
# Distributed under the terms of the Modified BSD License.
|
||||||
|
|
||||||
|
from http.client import responses
|
||||||
|
|
||||||
|
from jinja2 import TemplateNotFound
|
||||||
from tornado import web, gen
|
from tornado import web, gen
|
||||||
|
|
||||||
from .. import orm
|
from .. import orm
|
||||||
from ..utils import admin_only, url_path_join
|
from ..utils import admin_only, url_path_join
|
||||||
from .base import BaseHandler
|
from .base import BaseHandler
|
||||||
from urllib.parse import quote
|
|
||||||
|
|
||||||
|
|
||||||
class RootHandler(BaseHandler):
|
class RootHandler(BaseHandler):
|
||||||
@@ -160,9 +162,43 @@ class AdminHandler(BaseHandler):
|
|||||||
self.finish(html)
|
self.finish(html)
|
||||||
|
|
||||||
|
|
||||||
|
class ProxyErrorHandler(BaseHandler):
|
||||||
|
"""Handler for rendering proxy error pages"""
|
||||||
|
|
||||||
|
def get(self, status_code_s):
|
||||||
|
status_code = int(status_code_s)
|
||||||
|
status_message = responses.get(status_code, 'Unknown HTTP Error')
|
||||||
|
# build template namespace
|
||||||
|
|
||||||
|
hub_home = url_path_join(self.hub.server.base_url, 'home')
|
||||||
|
message_html = ''
|
||||||
|
if status_code == 503:
|
||||||
|
message_html = ' '.join([
|
||||||
|
"Your server appears to be down.",
|
||||||
|
"Try restarting it <a href='%s'>from the hub</a>" % hub_home
|
||||||
|
])
|
||||||
|
ns = dict(
|
||||||
|
status_code=status_code,
|
||||||
|
status_message=status_message,
|
||||||
|
message_html=message_html,
|
||||||
|
logo_url=hub_home,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.set_header('Content-Type', 'text/html')
|
||||||
|
# render the template
|
||||||
|
try:
|
||||||
|
html = self.render_template('%s.html' % status_code, **ns)
|
||||||
|
except TemplateNotFound:
|
||||||
|
self.log.debug("No template for %d", status_code)
|
||||||
|
html = self.render_template('error.html', **ns)
|
||||||
|
|
||||||
|
self.write(html)
|
||||||
|
|
||||||
|
|
||||||
default_handlers = [
|
default_handlers = [
|
||||||
(r'/', RootHandler),
|
(r'/', RootHandler),
|
||||||
(r'/home', HomeHandler),
|
(r'/home', HomeHandler),
|
||||||
(r'/admin', AdminHandler),
|
(r'/admin', AdminHandler),
|
||||||
(r'/spawn', SpawnHandler),
|
(r'/spawn', SpawnHandler),
|
||||||
|
(r'/error/(\d+)', ProxyErrorHandler),
|
||||||
]
|
]
|
||||||
|
@@ -17,6 +17,11 @@
|
|||||||
{{message}}
|
{{message}}
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if message_html %}
|
||||||
|
<p>
|
||||||
|
{{message_html | safe}}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
{% endblock error_detail %}
|
{% endblock error_detail %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user