Commit Graph

244 Commits

Author SHA1 Message Date
stellarshenson
a0dee35bd6 fix: add spinner to refresh button and show relative time 2026-01-20 17:16:00 +01:00
stellarshenson
5e563af39b feat: add Activity Monitor admin page with 3-state status and reset functionality
- Add ActivitySample SQLAlchemy model for database persistence
- Add ActivityMonitor singleton with scoring, reset, lifecycle methods
- Add JUPYTERHUB_ACTIVITYMON_INACTIVE_AFTER env var (default 60 min)
- Update defaults: SAMPLE_INTERVAL=600s, RETENTION_DAYS=7
- Fix score calculation to use measured samples only (not theoretical max)
- Add 3-state status: green (active), yellow (inactive), red (offline)
- Add recently_active field in API response
- Add Reset button with confirmation dialog
- Fix green color (explicit #28a745 instead of text-success)
- Add ThreadPoolExecutor for non-blocking Docker stats
- Remove old background sampler code (on-demand sampling now)
- Bump version to 3.7.0
2026-01-20 17:08:23 +01:00
stellarshenson
8a4be041ac docs: update journal with spawner.orm_spawner.last_activity fix CHECKPOINT_BEFORE_ACTIVITY_TAB_3.6.24 FIX_SPAWNER_ACTIVITY_TRACKING_3.6.24 3.6.28_cuda-13.0.2_jh-5.4.2 3.6.24_cuda-13.0.2_jh-5.4.2 2026-01-20 10:08:35 +01:00
stellarshenson
30f3000ab7 chore: bump version to 3.6.24 2026-01-20 10:08:03 +01:00
stellarshenson
d2ff63b2e1 fix: use spawner.orm_spawner.last_activity (Server object has no last_activity) 2026-01-20 10:05:53 +01:00
stellarshenson
44f8ce0318 docs: update journal with server.last_activity fix and checkpoint command 2026-01-20 10:02:35 +01:00
stellarshenson
5d24f17900 fix: use server.last_activity instead of user.last_activity for idle tracking
- user.last_activity updates on Hub page access (causes timer reset on refresh)
- server.last_activity only updates on actual JupyterLab activity
- Matches what jupyterhub-idle-culler uses for culling decisions
2026-01-20 10:01:52 +01:00
stellarshenson
4b4f254dfb docs: clarify checkpoint tag format - shortened version as suffix 2026-01-20 09:47:42 +01:00
stellarshenson
f0f1ddc0ee docs: rename short_version to version_suffix in checkpoint command 2026-01-20 09:47:16 +01:00
stellarshenson
8fa6fa0dd9 feat: add /checkpoint command for creating milestone tags 2026-01-20 09:46:54 +01:00
stellarshenson
a5fd82b3ea updated version CHECKPOINT_BEFORE_ACTIVITY_TRACKER_3.6.22 2026-01-19 08:06:52 +01:00
stellarshenson
b440a7fe07 fix: show max extension error as disappearing warning alert, remove duplicate static text 3.6.22_cuda-13.0.2_jh-5.4.2 2026-01-18 21:58:25 +01:00
stellarshenson
d492232802 updated version 2026-01-18 21:48:00 +01:00
stellarshenson
439472999d fix: show max hours in extension limit warning message 3.6.21_cuda-13.0.2_jh-5.4.2 2026-01-18 21:45:24 +01:00
stellarshenson
7c9d78d4a5 updated version 3.6.20_cuda-13.0.2_jh-5.4.2 2026-01-18 21:24:32 +01:00
stellarshenson
af9c415d4b docs: update journal with extend button behavior 2026-01-18 21:23:20 +01:00
stellarshenson
3264c26d6b fix: keep extend button enabled when max reached (backend handles rejection) 2026-01-18 21:22:44 +01:00
stellarshenson
6762a5739a fix: truncate excess extension hours instead of rejecting request
- Truncate requested hours to max available instead of returning error
- Add 'truncated' flag in API response with detailed message
- UI shows warning alert (yellow) when truncated, success (green) otherwise
- Warning displays 4 seconds vs 2 seconds for normal success
- Fixed extend button re-enable after successful extension
2026-01-18 21:18:47 +01:00
stellarshenson
42180502e7 fix: extension now ADDS hours (cumulative), added detailed logging 2026-01-18 21:11:34 +01:00
stellarshenson
63efb1a264 fix: simplify session extension - reset activity and SET hours (not add) 2026-01-18 21:04:24 +01:00
stellarshenson
61807cac1f fix: session extension now adds hours instead of resetting timer 2026-01-18 21:03:09 +01:00
stellarshenson
de3863ef5e fix: use offset-naive datetime for last_activity to match JupyterHub internal format 2026-01-18 21:01:28 +01:00
stellarshenson
1d5fb93c49 feat: improve session extension UI with numeric input and idle note 2026-01-18 20:56:58 +01:00
stellarshenson
e0ceed8004 feat: add idle culler session extension and harmonize env settings
Session Extension Feature:
- Add JUPYTERHUB_IDLE_CULLER_MAX_EXTENSION env var (default 24h)
- Add SessionInfoHandler and ExtendSessionHandler API endpoints
- Add Session Status card to home page with countdown timer
- Extension tracking in spawner state (resets on server restart)
- Color-coded warnings (yellow <1h, red <30min)

Environment Settings Harmonization:
- Add all ENV defaults to Dockerfile
- Add idle culler settings to compose.yml
- Standardize logo as JUPYTERHUB_LOGO_URI with file:// prefix
- Update NVIDIA_IMAGE to nvidia/cuda:13.0.2-base-ubuntu24.04
2026-01-18 20:28:33 +01:00
stellarshenson
1db8ed1129 feat: rename JUPYTERHUB_SERVICE_GLANCES to JUPYTERHUB_SERVICE_RESOURCES_MONITOR CHECKPOINT_3.6.12 3.6.12_cuda-13.0.2_jh-5.4.2 2026-01-18 18:18:29 +01:00
stellarshenson
45cb18da4d feat: enhance traefik-host-based-routing with CIFS and cert installers
- Add optional CIFS mount support via compose_cifs.yml and .env
- Create install_cert.sh for Linux (multi-distro support)
- Enhance install_cert.bat with folder argument and help flags
- Fix compose_override.yml stray quote, add idle culler defaults
- Enhance generate-certs.sh with generic CN and verification
- Update start.sh/stop.sh to support ENABLE_CIFS from .env
- Update README with CIFS and certificate installation docs
2026-01-16 16:27:45 +01:00
stellarshenson
72fcc32eaf feat: add stop.sh script for platform shutdown 2026-01-16 14:34:17 +01:00
stellarshenson
7cd56fe2d6 fix: fixed issue with the gpustat not showing in the prompt RELEASE_3.6.11 3.6.11_cuda-13.0.2_jh-5.4.2 2026-01-16 11:38:58 +01:00
stellarshenson
349d243545 chore: update journal with server_version fix 3.6.10_cuda-13.0.2_jh-5.4.2 2026-01-14 17:36:04 +01:00
stellarshenson
35955c9671 fix: add server_version to global template_vars
HomeHandler doesn't pass server_version to templates (only AdminHandler does).
Added jupyterhub.__version__ to c.JupyterHub.template_vars for global access.
2026-01-14 17:35:18 +01:00
stellarshenson
940ac7e0d9 feat: add version footer to home page
Display Stellars JupyterHub DS and JupyterHub versions in footer.
Uses short version format (major.minor.patch) only.
3.6.8_cuda-13.0.2_jh-5.4.2
2026-01-14 17:30:40 +01:00
stellarshenson
181e2ac5f4 chore: cleanup templates directory structure
- Remove unused *.html from services/jupyterhub/templates/
- Keep only certs/ subdirectory in templates/
- Rename templates_enhanced to html_templates_enhanced
- Update Dockerfile COPY paths
3.6.6_cuda-13.0.2_jh-5.4.2
2026-01-14 17:19:12 +01:00
stellarshenson
6a1ac93d1f updated project version 2026-01-14 17:13:04 +01:00
stellarshenson
9e52c3c36a feat: xkcdpass password generation with configurable options
- Move settings_dictionary.yml to services/jupyterhub/conf/
- Replace hardcoded word list with xkcdpass library
- Add JUPYTERHUB_AUTOGENERATED_PASSWORD_WORDS (default: 4)
- Add JUPYTERHUB_AUTOGENERATED_PASSWORD_DELIMITER (default: "-")
- Fix ENABLE_SIGNUP to JUPYTERHUB_SIGNUP_ENABLED in Dockerfile
3.6.5_cuda-13.0.2_jh-5.4.2
2026-01-14 17:11:27 +01:00
stellarshenson
f7770d5e3a updated project version 2026-01-14 16:53:42 +01:00
stellarshenson
d8a306a0d5 feat: externalize settings metadata to YAML dictionary
- Add config/settings_dictionary.yml with category-based structure
- Categories as top-level keys (JupyterHub Core, Docker Spawner, etc.)
- Each setting has name, description, default, optional empty_display
- Update SettingsPageHandler to load from YAML file
- Add pyyaml to Dockerfile pip dependencies
- Refactor pip install to heredoc format with echo message
3.6.4_cuda-13.0.2_jh-5.4.2
2026-01-14 16:43:26 +01:00
stellarshenson
022e970dbf feat: standardize env vars with JUPYTERHUB_ prefix, add admin settings page
- Rename 13 environment variables to use JUPYTERHUB_ prefix:
  - ENABLE_GPU_SUPPORT -> JUPYTERHUB_GPU_ENABLED
  - ENABLE_JUPYTERHUB_SSL -> JUPYTERHUB_SSL_ENABLED
  - ENABLE_SERVICE_* -> JUPYTERHUB_SERVICE_*
  - ENABLE_SIGNUP -> JUPYTERHUB_SIGNUP_ENABLED
  - DOCKER_NOTEBOOK_IMAGE -> JUPYTERHUB_NOTEBOOK_IMAGE
  - DOCKER_NETWORK_NAME -> JUPYTERHUB_NETWORK_NAME
  - NVIDIA_AUTODETECT_IMAGE -> JUPYTERHUB_NVIDIA_IMAGE
  - IDLE_CULLER_* -> JUPYTERHUB_IDLE_CULLER_*
- Add SettingsPageHandler with admin-only access at /settings
- Add Settings link to admin navbar
- Sync templates from templates_enhanced to templates
- Update README.md and CLAUDE.md documentation
- No backward compatibility for old variable names
2026-01-14 16:39:34 +01:00
stellarshenson
a40bb19f5b feat: add Notifications link to admin navbar 2026-01-14 16:17:26 +01:00
stellarshenson
4b6ac08ab0 feat: idle server culler for automatic shutdown of inactive servers
- Add jupyterhub-idle-culler package to Dockerfile
- Configure as managed JupyterHub service with role-based scopes
- Environment variables: IDLE_CULLER_ENABLED, IDLE_CULLER_TIMEOUT,
  IDLE_CULLER_CULL_EVERY, IDLE_CULLER_MAX_AGE
- Default: disabled, 24h timeout, 10min check interval
- Bump version to 3.6.0
2026-01-14 16:15:21 +01:00
stellarshenson
cd9c6bf7fa feat: selective notification recipients
Add ability to send notifications to selected servers instead of all.
- New ActiveServersHandler at GET /api/notifications/active-servers
- BroadcastNotificationHandler accepts optional recipients array
- UI with "Send to all" checkbox and server selection list
- Select All/Deselect All buttons, dynamic button text
- Backward compatible - sends to all if recipients not specified
CHECKPOINT_BEFORE_INACTIVITY_SHUTDOWN_3.5.46 3.5.46_cuda-12.9.1_jh-5.4.2
2026-01-14 12:46:49 +01:00
stellarshenson
f5874b1e94 docs: add new user credentials screenshot and improve branding section CHECKPOINT_before_selective_notifications_3.5.44_cuda-12.9.1_jh-5.4.2 2026-01-08 14:37:37 +01:00
stellarshenson
ad789d7632 fix: lowercase hex encoding for docker volume names FIX_volume_encoding_3.5.43 3.5.44_cuda-12.9.1_jh-5.4.2 2026-01-08 14:24:06 +01:00
stellarshenson
5e633a9841 fix: encode usernames for docker volume/container names
Use escapism library (same as DockerSpawner) to encode special
characters in usernames when constructing Docker volume and container
names. Fixes volume reset for users with dots in names (e.g., user.name).
2026-01-08 13:37:53 +01:00
stellarshenson
ea7d45c696 updated cert installer for linux 2026-01-07 05:09:12 +01:00
stellarshenson
abc11c5872 updated startup scripts with images pull 2026-01-07 03:52:40 +01:00
stellarshenson
117e1d6c58 added pull for lab 2026-01-07 03:50:51 +01:00
stellarshenson
988cebf9f1 chore: enhance certs-installer with folder param and help
- Add optional directory argument to install_cert.sh and install_cert.bat
- Add -h/--help flags showing usage, file types, and examples
- Display scanning directory in output
- Increase logo height to 2.25rem
2026-01-07 03:44:31 +01:00
stellarshenson
36933afe2b chore: further enhanced display of logo 2026-01-07 03:05:16 +01:00
stellarshenson
f50dfbd3c5 docs: update journal with custom logo support RELEASE_3.5.36 3.5.38_cuda-12.9.1_jh-5.4.2 2026-01-07 01:45:22 +01:00
stellarshenson
a6686ab4a2 feat: custom logo support and authorization handler fix
- Add JUPYTERHUB_LOGO_FILE config for custom logo (served at /hub/logo)
- Fix CustomAuthorizationAreaHandler with @needs_scope decorator
- Import orm inside get() method to fix NameError
- Simplify page.html logo block (always use base_url/logo)
2026-01-07 01:44:54 +01:00