Commit Graph

56 Commits

Author SHA1 Message Date
stellarshenson
920c8b82d5 docs: add volume sizes and resource tracking to README
- Add volume sizes to Activity Monitor feature description
- Add Volume sizes feature with per-volume breakdown tooltip
- Add JUPYTERHUB_ACTIVITYMON_VOLUMES_UPDATE_INTERVAL config option
2026-01-26 13:37:32 +01:00
stellarshenson
0905d5bd07 docs: add admin volume management to README
- Add feature bullet for admin volume management button
- Add note about admin capability in User Self-Service Workflow section
- Admins can manage any user's volumes via database icon in admin panel
2026-01-26 13:37:01 +01:00
stellarshenson
a76c99d6ab feat: increase activity monitor half-life to 72 hours (3 days)
Changed JUPYTERHUB_ACTIVITYMON_HALF_LIFE default from 48h to 72h
for more stable activity scores. Activity from 3 days ago now has
50% weight, better suited for users with irregular schedules.

Updated: Dockerfile, custom_handlers.py, activity_sampler.py,
settings_dictionary.yml, README.md, docs/activity-tracking-methodology.md
2026-01-25 11:50:19 +01:00
stellarshenson
4d9a97eb82 feat: increase activity monitor half-life to 48 hours
Changed JUPYTERHUB_ACTIVITYMON_HALF_LIFE default from 24h to 48h
for smoother decay in activity scoring. A sample from 48 hours ago
now has 50% weight (was 50% at 24h).
2026-01-22 01:52:01 +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
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 2026-01-18 18:18:29 +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
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
f5874b1e94 docs: add new user credentials screenshot and improve branding section 2026-01-08 14:37:37 +01:00
stellarshenson
8be73942da feat: server-side authorization discard button protection
- Add StellarsNativeAuthenticator subclass with CustomAuthorizationAreaHandler
- Pass hub_usernames set to template for Jinja2 conditional logic
- Remove JavaScript API call approach (was clunky with XSRF token handling)
- Fix Bootstrap 5 table hover color override (target td/th explicitly)
2026-01-07 01:16:52 +01:00
stellarshenson
8a420cbb63 feat: document mnemonic passwords and fix table hover styling 2026-01-07 00:44:00 +01:00
stellarshenson
c1ae9938c1 feat: comprehensive UI styling for notifications, admin panel, tokens
- Add notifications page styling (form, textarea, results table)
- Unify button font sizes to 0.8rem across all pages
- Set collapsed user card padding to 0
- Add subtle hover effect on admin user rows (0.015 alpha)
- Style Add Users form panel with dark mode support
- Style authorization and token pages consistently
2026-01-06 22:26:19 +01:00
stellarshenson
e001169663 feat: add user rename API and ENABLE_SIGNUP env variable
- RenameUserHandler: PATCH /hub/api/users/{username}/rename
  preserves NativeAuthenticator authorization on rename
- ENABLE_SIGNUP env var controls self-registration (default: 1)
- Updated README, compose.yml, Dockerfile with new config
2026-01-06 16:43:06 +01:00
stellarshenson
2674703317 feat: split docker access into docker-sock and docker-privileged groups
- docker-sock: mounts /var/run/docker.sock (container orchestration)
- docker-privileged: runs with --privileged flag (hardware access)

Updated pre_spawn_hook to check both groups and set spawner.volumes
or spawner.privileged accordingly. Documentation updated.
2025-12-12 15:54:47 +01:00
stellarshenson
d8bf7fb67b docs: add paypal donation badge 2025-11-15 17:38:14 +00:00
stellarshenson
af15336364 docs: update badges with github actions, jupyterlab 4, and kolomolo branding 2025-11-13 15:55:56 +00:00
stellarshenson
8f2670eb39 docs: add note about user volume reset capability 2025-11-12 11:46:12 +00:00
stellarshenson
5954db2ef0 docs: improve arrow alignment for shared volume in diagram 2025-11-12 11:42:42 +00:00
stellarshenson
01ddabf9ee fix: represent /mnt/shared as single shared resource across containers 2025-11-12 11:40:54 +00:00
stellarshenson
18de422fea docs: show multiple users sharing jupyterhub_shared volume in diagram 2025-11-12 11:40:02 +00:00
stellarshenson
f01aa75979 docs: simplify user container label in volume diagram 2025-11-12 11:39:25 +00:00
stellarshenson
57be9a0911 fix: escape underscores in volume architecture diagram node IDs 2025-11-12 11:36:21 +00:00
stellarshenson
2380c33252 docs: add volume architecture diagram
Added Volume Architecture diagram showing four persistent volumes per user with Docker host to container mount mapping. Diagram illustrates jupyterlab-{username}_* naming pattern for user-specific volumes (home, workspace, cache) and shared jupyterhub_shared volume. Shows mount points and example contents for each volume type, with note about CIFS mount capability for NAS integration.
2025-11-12 11:35:55 +00:00
stellarshenson
b10b685138 docs: add configuration flow, gpu auto-detection, and user workflow diagrams
Added three mermaid diagrams to README documenting system architecture and workflows. Configuration Flow diagram shows how environment variables from compose.yml flow through jupyterhub_config.py to spawned user containers, including DOCKER_SPAWNER_VOLUMES, VOLUME_DESCRIPTIONS, BUILTIN_GROUPS, pre_spawn_hook, extra_handlers, and template_paths. GPU Auto-Detection diagram illustrates the auto-detect mechanism with temporary CUDA container spawning nvidia-smi for detection. User Self-Service Workflow diagram demonstrates home page state management for restart server and manage volumes features. Converted HTML alert divs to GitHub-style WARNING blocks for better rendering.
2025-11-12 10:48:56 +00:00
stellarshenson
9d0c04562a doc: updated links in the README 2025-11-11 17:49:34 +00:00
stellarshenson
2d84024624 docs: update journal and clarify docker-privileged group in README
Added journal entry #13 documenting release v3.2.11 preparation:
- Git tag creation with annotations
- RELEASE.md delta notes
- Documentation simplification (docker-socket-permissions.md from 66 to 19 lines)
- project.env update with release metadata
- Security warning corrections (host system -> Docker host)
- HTML alert styling for warnings

Updated README.md to explicitly name 'docker-privileged' group in opening
description of privileged access section for clarity.
2025-11-10 00:19:21 +01:00
stellarshenson
d0de218074 docs: fix docker.sock security warnings and add alert styling
Corrected security warnings to accurately describe docker.sock access:
- Changed 'host system' to 'Docker host' (docker.sock grants access to Docker
  daemon, not physical host system)
- Applied warning alert style (alert-block alert-warning) to security notes in
  README.md for better visibility

Updated in:
- README.md: Two security warnings (Requirements section, Privileged Access)
- doc/docker-socket-permissions.md: Security note
- .claude/CLAUDE.md: Security warning

Security warnings now use HTML alert boxes for emphasis and accurate terminology.
2025-11-10 00:18:10 +01:00
stellarshenson
28cb8098dc docs: simplify architecture diagram labels
Condensed verbose diagram labels following modus primaris:
- "NativeAuthenticator User Management" -> "NativeAuthenticator"
- "User: alice" -> "alice"
- "alice_home/alice_workspace/alice_cache" -> "Volumes home/workspace/cache"
- "jupyterhub_shared CIFS/NAS Optional" -> "Shared Storage CIFS/NAS"
- Removed verbose edge labels (|Mounts|, |Shared|) for cleaner flow

Diagram remains clear while reducing visual noise and text verbosity.
2025-11-09 22:28:51 +01:00
stellarshenson
cc124e2a3a docs: simplify notification broadcast feature description
Condensed verbose notification broadcast description to essential facts:
- Admin broadcast capability
- Route location (/hub/notifications)
- Six notification types
- 140-character limit
- Extension dependency

Reduced from 3 sentences to 2 short sentences following modus primaris brevity.
2025-11-09 22:28:12 +01:00
stellarshenson
3516be1f63 docs: reorganize README structure with features first, modus primaris style
Restructured README.md following modus primaris approach:
1. Simplified intro (one concise paragraph)
2. Features as bullet points at top
3. User Interface screenshots (with explanations before images)
4. Architecture diagram and explanation
5. Remaining sections (References, Requirements, Quickstart, etc.)

Removed duplicate Features and User Interface sections that were previously
positioned after Architecture. Content now flows logically from high-level
features to visual examples to technical architecture details.
2025-11-09 22:26:43 +01:00
stellarshenson
6cfd8a9af5 docs: reorganize README screenshots with explanations before images
Reordered User Interface section:
- Home control panel (server restart and volume management)
- Volume management screenshots grouped together
- Admin notification broadcast (last)

Changed format: explanation text with heading before each screenshot image,
replacing italic captions below images for better readability.
2025-11-09 22:25:11 +01:00
stellarshenson
9eda62edd7 docs: add comprehensive documentation and update screenshots
Added three new documentation files following modus primaris style:
- doc/ui-template-customization.md: Guide for extending JupyterHub UI
  templates with RequireJS, Bootstrap 5, CSRF protection, and custom handlers
- doc/docker-socket-permissions.md: Docker socket access control documentation
  covering group-based permissions, security implications, and best practices
- doc/notifications.md: Complete notification broadcast system documentation
  including implementation details, API integration, error handling, and
  troubleshooting

Updated UI screenshots in README.md:
- Replaced screenshot-restart-server.png with screenshot-home.png showing
  complete user control panel (restart server + volume management)
- Added screenshot-send-notification.png showing admin notification broadcast
  interface with message composer, type selector, and delivery results

All documentation follows consistent structure: brief overview, key facts in
bullet points, explanatory narrative, and technical specifications without
excessive nesting or marketing language.
2025-11-09 22:20:28 +01:00
stellarshenson
0e39fac7ac feat: add admin notification broadcast system for active JupyterLab servers
Implemented comprehensive notification broadcast functionality allowing
administrators to send notifications to all active user JupyterLab servers
simultaneously through a dedicated admin panel.

Core Features:
- Admin-only notification panel accessible at /hub/notifications
- Concurrent delivery to all active servers using asyncio with 5s timeout
- Temporary API token generation (5-minute expiry) for authentication
- Support for 6 notification types: default, info, success, warning, error, in-progress
- 140-character message limit with live character counter
- Auto-close toggle and dismiss button in notifications
- Dynamic endpoint URL construction using spawner.server.base_url
- Comprehensive error handling with user-friendly messages
- One-line logging per server with message preview and outcome

Technical Implementation:
- Created BroadcastNotificationHandler in custom_handlers.py
- Created NotificationsPageHandler for admin UI rendering
- Added notifications.html template with Bootstrap 5 form
- Registered handlers in jupyterhub_config.py extra_handlers
- Sends to /jupyterlab-notifications-extension/ingest endpoint
- Payload includes type, message, autoClose, and actions array
- Navigation link added to home.html for admin access

Integration:
- Requires jupyterlab_notifications_extension installed on JupyterLab servers
- Uses correct payload format (type field, not variant)
- Includes Dismiss action button for manual notification closure

Documentation:
- Updated .claude/CLAUDE.md with complete feature documentation
- Updated README.md Features section with notification broadcast details
- Updated .claude/JOURNAL.md with implementation summary
- Removed obsolete FEATURE_PLAN.md

Version: 3.2.0 (bumped from 3.1.2)
2025-11-09 22:05:06 +01:00
stellarshenson
067b613397 feat: add group-based docker.sock access control for privileged users
Implemented built-in protected group system enabling admins to grant trusted users read-write Docker socket access within their JupyterLab containers. Groups are managed through admin panel and cannot be permanently deleted.
2025-11-05 20:15:30 +01:00
stellarshenson
274237ee7c docs: remove fill colors from architecture diagram for transparent background
- Remove fill colors from mermaid diagram nodes
- Keep stroke colors and widths for visual distinction
- Improves compatibility with different GitHub themes (light/dark mode)
2025-11-04 10:54:10 +01:00
stellarshenson
a296338db1 docs: reorganize README with architecture diagram and improved structure
- Add mermaid diagram illustrating JupyterHub architecture and user flow
- Move screenshots higher in document under dedicated User Interface section
- Visualize relationships between Traefik, Hub, Spawner, and user containers
- Show per-user volumes and shared storage configuration
- Improve document flow: Architecture -> UI -> Features -> Setup
2025-11-04 10:53:12 +01:00
stellarshenson
c06baa8372 docs: add features section and screenshots to README v3.0.14
Documentation enhancements:
- Add comprehensive Features section highlighting key capabilities
- Document GPU auto-detection, user self-service, isolated environments
- Include production-ready features (Traefik, TLS, Watchtower)
- Add Self-Service Volume Management subsection with visual examples
- Include three screenshots demonstrating UI features:
  - Restart Server button (active state)
  - Manage Volumes button (stopped state)
  - Volume selection modal (checkbox interface)
- Position screenshots prominently after feature list
- Provide one-sentence descriptions for each screenshot

Technical updates:
- Increase Stop Server refresh delay to 3 seconds for stability
- Update version to 3.0.14

Screenshots stored in .resources/ directory for future reference
2025-11-04 10:16:45 +01:00
Konrad Jeleń
b28cbe7570 Remove GitHub Stars badge from README
Removed GitHub Stars badge from README.
2025-10-26 18:43:57 +01:00
stellarshenson
cfd62254dd feat: add docker pulls and github stars badges to readme
Added Docker pulls badge and GitHub stars badge alongside existing Docker image size badge for better project visibility and metrics tracking.
2025-10-26 17:37:56 +00:00
stellarshenson
fba2347463 updated readme 2025-08-08 01:46:26 +02:00
stellarshenson
cb8e6e106f updated permissions 2025-08-07 17:22:30 +02:00
stellarshenson
8d8d874a1c updated names of the enable variables 2025-07-23 23:56:01 +02:00
stellarshenson
d856089b64 small fixes to the documentation of the config files 2025-07-22 09:45:39 +00:00
stellarshenson
c98349a111 updated readme with shared cifs example 2025-07-19 14:06:24 +02:00
stellarshenson
aff7eb90da updated link to admin 2025-07-18 19:29:30 +02:00
stellarshenson
a68810e7ec updated with more examples: volume, GPU, custom config 2025-07-18 19:26:13 +02:00
stellarshenson
f4ec65ce50 updated with examples for custom config 2025-07-18 19:22:37 +02:00
stellarshenson
1bd280326e updated override mechanism 2025-07-18 16:23:47 +02:00
stellarshenson
0dfe3bc882 updated 2025-07-18 02:50:24 +02:00