Commit Graph

371 Commits

Author SHA1 Message Date
Min RK
304c005a85 fix priority of template namespace
allow overrides
2018-03-12 14:23:00 +01:00
Min RK
b8d2271191 add /spawn/:user for spawning servers for a specific user
part of admin-access
2018-03-12 14:23:00 +01:00
Min RK
b8978b0235 allow admin-access to launch servers via /user/:name
rather than checking if user.name == name,
check more directly if user should have access to :name's server
2018-03-12 14:23:00 +01:00
Min RK
d16461052b track activity of individual tokens 2018-02-22 15:05:18 +01:00
Min RK
079005eab1 Merge pull request #1643 from minrk/startup-lite
avoid instantiating idle Spawner objects during startup
2018-02-15 15:25:22 +01:00
Min RK
fbdeb4c386 move add_user call for new users to login_user
previous location was in a non-awaitable call
2018-02-07 11:22:47 +01:00
Min RK
06fb94b4ea Delay instantiation of User and Spawner objects
Avoids instantiating too many objects before they are used

- deletes Spawner instances after they stop to avoid lingering instances
- use user_dict cache more often instead of db queries
- check for empty spawners dict to avoid a few Spawner instantiations
2018-02-06 12:04:14 +01:00
Robert Schroll
9f6cef4fb4 Add option to redirect to running Jupyter server
This is how the system used to behave, but now it can be turned off, always
showing the control panel on login.  Adjustment is needed in two places.
2018-02-05 18:12:07 -08:00
Min RK
2db378e9c1 Merge pull request #1577 from minrk/session-cookie
add session-id cookie
2017-12-19 15:18:02 +01:00
Min RK
dac3b0a6f5 clear cookies for the right domain 2017-12-19 11:05:02 +01:00
Min RK
b29f19e206 add session_id for OAuth tokens
allows tracking and revoking tokens for a login session
2017-12-11 12:15:36 +01:00
yuvipanda
3cd526c019 Make sure our metrics don't appear & disappear intermittently
Create all timeseries from the beginning, regardless of wether
they happen or not. Also rename metric objects for consistency.
2017-12-10 21:23:32 -08:00
yuvipanda
2099cd37fa s/starttime/start_time/ 2017-12-10 17:00:15 -08:00
yuvipanda
ce3a940b11 Add histogram metric for proxy route addition 2017-12-10 15:01:47 -08:00
yuvipanda
6594e88390 Add metric recording spawn durations
Try to hit every possible exit point from the spawn_single_server
method, with an appropriate status code.

The default histogram buckets are also meant for request latencies,
but spawning usually takes longer so we use custom buckets
2017-12-10 14:54:34 -08:00
Jesse Kinkead
6504692c5c Commit when setting admin, but only if the field changed. 2017-11-30 11:21:09 -08:00
Jesse Kinkead
c1a7e0513b Allow Authenticators to return an admin flag for users. 2017-11-29 14:07:08 -08:00
Matthias Bussonnier
4e5cfa2077 Merge pull request #1540 from minrk/cookie-secure
allow override of cookie options
2017-11-21 10:58:25 +01:00
Min RK
0296e16232 allow override of cookie options
via `tornado_settings['cookie_options']`

for cases where default options are incorrect or insufficient (e.g. expiry or https detection fails)
2017-11-16 13:53:27 +01:00
Min RK
f6f7081483 adjust headers for CORS
- add `authorization` to default Access-Control-Allow-Headers
- allow overriding `Access-Control-Allow-Headers` just like everything else in case default is inappropriate
- ensure case-insensitive comparison for proper header checks
2017-11-16 11:46:40 +01:00
Min RK
b9caf95c72 copy exception before reraising
avoids growing traceback on each raise
2017-10-27 15:29:16 +02:00
Joshua Milas
c317cbce36 Added additional statsd info for the spawner
spawner.failure coutner collects the number of failures for various reasons:
spawner.stop timer for seeing how long it takes a user server to stop
2017-09-22 12:13:15 -04:00
Min RK
5f7ffaf1f6 allow default (empty) server name with named servers
remove generated names behavior because it doesn't work
2017-09-17 11:47:17 +02:00
Carol Willing
6fb31cc613 Merge pull request #1393 from minrk/spawn-future
improve reporting of spawn failure
2017-09-07 10:20:38 -07:00
Min RK
c26ede30b9 Point users to /hub/home to retry spawn on spawn failure 2017-09-06 15:03:26 +02:00
Min RK
ad7867ff11 add trailing slash on /user/name
proxies may not route `/user/name` correctly, only `/user/name/...`, so make sure that `/user/name` is redirected to `/user/name/`

this manifests as a redirect loop between /user/name and /hub/user/name when a route exists but /user/name is still
being routed to the Hub
2017-09-06 12:37:22 +02:00
Min RK
7e5a925f4f raise original spawn failure on implicit spawn
so the error message is the same, however it was arrived at.

potential downside: it could look like the current request is spawning and failing,
rather than the reality that a previous spawn failed and we are just re-presenting the earlier error.
It's possible for there to have been a long time in between spawn and error.
2017-09-04 14:27:01 +02:00
Min RK
3c61e422da prevent implicit spawn on /user/:name if previous spawn failed
require users to visit /hub/home and click 'Start My Server' to get a new server

Visits to /hub/user/:name will get an error if the previous spawn failed,
rather than triggering a new spawn.
This should guarantee that a user sees an error if their spawn failed,
regardless of when the failure occurred and how long it took.
Some cases of slow errors could result in triggering a new spawn indefinitely without
the user seeing an error message.

/hub/spawn was a simple redirect to /user/:name in the absence of a spawn form,
but now clears the `_spawn_future` prior to redirect
to signal that a new spawn has been explicitly requested in the case of a prior failure.
2017-09-04 14:17:24 +02:00
Min RK
0e2cf37981 point to single-user logs when spawner fails to start 2017-09-04 13:14:07 +02:00
Min RK
503d5e389f render pending page if triggered spawn doesn't finish
instead of redirecting, which starts redirect loop counter
2017-09-04 12:02:40 +02:00
Min RK
7b1e61ab2c allow waiting for pending spawn via spawner._spawn_future
avoids losing errors when visiting `/hub/user/:name` during a pending spawn
2017-09-04 11:53:42 +02:00
Min RK
210975324a fix logging error when login_user is called with no form data and login fails 2017-08-30 11:31:44 +02:00
Min RK
447edd081a Provide more detailed error message in case of version mismatch
this is the most likely cause of redirect loops when using docker,
so record the spawner version and check it when a redirect is detected.

In the event of a redirect and mismatch, fail with a message explaining the version mismatch and how to fix it.
2017-08-26 22:41:24 -04:00
Min RK
8e3553462c exercise start/stop race conditions
this doesn’t cover all the edge cases of each possible stage for the races, but it gets the basics covered.
2017-08-26 11:57:05 -04:00
Min RK
f7ea451df8 get the tests running 2017-08-25 18:12:15 -04:00
Min RK
2866be9462 don’t allow start while stop is pending
- start fails with 400 if stop is pending
- set spawn_pending across a whole spawn (including proxy)
- proxy_pending is only around the proxy
2017-08-23 23:35:19 -04:00
Min RK
f8648644bf ensure _stop_pending is always True on stop_single_user
previously there was a race during `delete_route`

apply the same logic as _start_pending
2017-08-23 18:30:49 -04:00
Min RK
69d4d48db0 rework spawn futures to fix races
1. set _proxy_pending before first wait to ensure that there is never a gap between setting spawn flags
2. always call `finish_user_spawn` to reduce the number of finalization cases
3. wait for proxy to finish on the slow_spawn timeout, not just start, because we are only interested in the total duration for page responsiveness
2017-08-21 11:27:30 +02:00
Min RK
546268809f add / to user-redirect
Some proxies may not correctly route /user/name, only /user/name/...
2017-08-08 12:02:36 +02:00
Min RK
886005be2a handle named servers in user_stopped callback 2017-08-03 11:09:28 +02:00
Min RK
684afed3f1 restore user.running property
it was made a method for handing named_servers,
but that made things way more complicated and replaced a boolean flag with a callable,
which would behave unexpectedly but without error if a boolean flag was expected.

Spawners have properties for dealing with this now, so use spawners

Restore `user.running` as an alias for `user.spawner.ready`
2017-08-03 11:09:27 +02:00
Min RK
210d7e59fd Merge pull request #1301 from minrk/total-running-limit
add active_server_limit
2017-08-03 11:08:23 +02:00
Min RK
9bf70208c8 return 'spawn' pending for spawn or proxy_pending
In general, we treat both the same way
2017-08-03 10:52:01 +02:00
Min RK
fada0d99f0 call it active_server_limit 2017-08-03 10:50:50 +02:00
Yuvi Panda
47b6014d13 Merge pull request #1297 from minrk/check-enabled-auth-state
prevent saving auth_state if auth_state is not enabled.
2017-08-01 09:24:34 -07:00
Min RK
f49606dff6 add user.count_active_users
produces summary of active/pending/ready spawner counts

Avoids brittle bookkeeping of running counts,
computing the value upon request.

For 10k users this is still only a few milliseconds, which seems worth it
2017-08-01 17:00:45 +02:00
Min RK
9c4972239d prevent saving auth_state if auth_state is not enabled.
allows Authenticators to return auth_state without having to check enable_auth_state
2017-08-01 10:51:44 +02:00
Min RK
88268bd76f test spawn_pending_count
make sure to cover various cases of spawn failure
so that failed spawns don't leak pending-spawn counts
2017-07-31 12:39:06 +02:00
Min RK
744d96330e use properties for spawn_pending 2017-07-31 11:45:01 +02:00
Min RK
c78e31b136 Merge pull request #1290 from yuvipanda/concurrent_spawn_limit
Add support for limiting the number of concurrent spawns
2017-07-31 10:28:37 +02:00