
WSDashboard
Real-time streaming monitoring and session control for your media server
WSDashboard - What’s Streaming Dashboard
What’s Streaming Dashboard (WSD) is a powerful, real-time monitoring and control system for Emby and Jellyfin media servers, exclusively available on QuickBox Pro. Monitor active streaming sessions, track bandwidth usage, view detailed media information, control playback, and manage user sessions—all through a beautiful, responsive dashboard that works seamlessly on desktop, tablet, and mobile devices.
What is WSD?
WSD (What’s Streaming Dashboard) is a comprehensive monitoring and control platform that integrates directly into your QuickBox Pro dashboard. Built with a modern, modular architecture, WSD provides complete visibility into your media server’s streaming activity with powerful management capabilities.
📊 Real-Time Session Tracking
Monitor active streams with live updates, bandwidth metrics, and detailed playback information
🎮 Session Control
Play, pause, stop, seek, and manage user sessions with admin-level controls
📱 Responsive Design
Beautiful interface that works seamlessly across desktop, tablet, and mobile devices
🌍 Multi-Language Support
Available in 7 languages: English, German, Spanish, French, Portuguese, Danish, and Chinese
🔍 Geolocation Tracking
See where your users are streaming from with integrated geolocation data
📈 Bandwidth Monitoring
Track upload/download usage per session and total server bandwidth consumption
QuickBox Pro Exclusive
WSD is exclusively available on QuickBox Pro and requires either Emby or Jellyfin media server to be installed. It integrates seamlessly with your QuickBox dashboard and leverages the QuickBox Framework for enhanced security and performance.
Installation
Prerequisites
Before installing WSD, ensure you have:
Symptoms
- Emby or Jellyfin media server installed and running
- QuickBox Pro v3 installed and configured
- API key generated from your media server
- Admin access to QuickBox dashboard
Resolution
- Install Emby or Jellyfin first via QuickBox CLI
- Generate API key from media server admin panel
- Use QuickBox's qb command for installation
- Automatic integration and configuration handled
Install WSD
Install What’s Streaming Dashboard for a specific user:
qb install wsdashboard -u usernameMedia Server Required
You must have Emby or Jellyfin installed and configured before installing WSD. The installer automatically detects your media server type and configures WSD accordingly.
Automatic Installation Process
The QuickBox installer handles everything automatically:
- 🔍 Detection - Automatically identifies Emby or Jellyfin installation
- 📦 Dependencies - Installs Node.js (v24.6.0) and Python 3 virtual environments
- 🗄️ Database - Creates SQLite database for session tracking and configuration
- 🔐 API Integration - Configures API keys and connection settings
- 🔒 Security - Sets up sandboxed systemd services with resource limits
- 🌐 Nginx - Configures reverse proxy with SSL support
- 💾 Service Files - Installs main daemon and log server services
- 🎨 Web Interface - Integrates dashboard into QuickBox UI
CLI Commands
Basic Operations
| Command | Description |
|---|---|
qb install wsdashboard -u username | Install WSD with enhanced service configuration |
qb reinstall wsdashboard -u username | Reinstall WSD (preserves configuration and database) |
qb update wsdashboard -u username | Update to latest version with automatic migration |
qb remove wsdashboard -u username | Remove WSD and clean up all service files |
qb help wsdashboard | Display comprehensive help and command information |
Usage Examples
Install WSD:
qb install wsdashboard -u myuserUpdate WSD with automatic backup:
qb update wsdashboard -u myuserReinstall (fix corrupted installation while preserving data):
qb reinstall wsdashboard -u myuserRemove WSD and clean up:
qb remove wsdashboard -u myuserMaintenance & Health Checks
WSD includes standalone maintenance scripts for diagnostics and repairs:
Run detailed health check:
/opt/quickbox/bin/qbwsd-health-check.sh --verboseAuto-fix common issues:
/opt/quickbox/bin/qbwsd-health-check.sh --fixView help for health check options:
/opt/quickbox/bin/qbwsd-health-check.sh --helpEnhanced Features
WSD on QuickBox Pro includes production-grade enhancements not found in standalone installations:
🔒 Security Sandboxing
Non-root execution as www-data user with comprehensive security restrictions (NoNewPrivileges, PrivateTmp, ProtectSystem)
📊 Health Monitoring
Automatic health checks with /opt/quickbox/bin/qbwsd-health-check.sh script featuring --verbose and --fix modes for diagnostics and auto-repair
🔄 Graceful Process Management
Proper lifecycle with PID file management, graceful shutdowns (30s timeout), and automatic restart on failure
📝 Structured Logging
Dual logging system with systemd journal integration and file-based logs with automatic rotation and configurable retention
🔐 SSL Certificate Integration
Automatic SSL certificate access for www-data user enabling secure HTTPS connections to media servers
⚡ Resource Limits
CPU quota (50%), memory limit (512MB), and task limits (1024) prevent resource exhaustion and ensure server stability
🌐 WebSocket Log Streaming
Real-time log viewing via dedicated log server service with WebSocket support for live troubleshooting
🔧 Modular Architecture
Modern codebase with focused modules for sessions, DataTables, and platform-specific implementations
System Architecture
WSD utilizes a dual-service architecture for reliability:
Main Service (qbwsd.service)
- Node.js daemon for session monitoring and transcode cleanup
- Runs with forking type and PID file management
- Configurable polling interval (default: 2000ms)
- Automatic restart with exponential backoff
Log Server (qbwsd-log-server.service)
- Dedicated WebSocket server for real-time log streaming
- Independent service ensures logging availability even during main service restarts
- Systemd journal integration with supplementary groups for log access
- Automatic port configuration via environment variables
Service Management
WSD operates through two systemd services for maximum reliability:
Main WSD Service
Check service status:
systemctl status qbwsd.serviceRestart main service:
systemctl restart qbwsd.serviceView live logs:
journalctl -u qbwsd.service -fEnable/disable service:
systemctl enable qbwsd.service # Start on boot
systemctl disable qbwsd.service # Prevent auto-startLog Server Service
Check log server status:
systemctl status qbwsd-log-server.serviceRestart log server:
systemctl restart qbwsd-log-server.serviceView log server logs:
journalctl -u qbwsd-log-server.service -fHealth Check Commands
The integrated health check script provides comprehensive diagnostics:
Run detailed health check:
/opt/quickbox/bin/qbwsd-health-check.sh --verboseAuto-fix common issues:
/opt/quickbox/bin/qbwsd-health-check.sh --fixDisplay help:
/opt/quickbox/bin/qbwsd-health-check.sh --helpAutomatic Recovery
Both WSD services are configured with automatic restart policies. The main service restarts on failure with a 10-second delay and 3-attempt burst limit. The log server uses a simple restart policy with always-on behavior for continuous log availability.
Service Configuration Override
Advanced users can customize service behavior without modifying the main service file:
# Edit override configuration
nano /etc/systemd/system/qbwsd.service.d/override.conf
# After changes, reload and restart
systemctl daemon-reload
systemctl restart qbwsd.serviceExample overrides:
[Service]
# Increase memory limit
MemoryMax=1G
# Adjust CPU quota
CPUQuota=75%
# Change daemon polling interval
Environment=DAEMON_INTERVAL=5000Configuration
Getting Your Media Server API Key
QuickBox Generated API Key
QuickBox automatically creates an API key named qb_token during Emby or Jellyfin installation. You can easily copy this key from the Service Control panel in your QuickBox Software Dashboard—just click the notepad icon next to the API Key field. This is the recommended key for WSD configuration.
For Emby:
- Open Emby web interface
- Navigate to Settings → Advanced → API Keys
- Look for
qb_tokenor create a new API key - Click New API Key (if creating new)
- Enter name:
WSD Dashboard - Copy the generated key
For Jellyfin:
- Open Jellyfin web interface
- Navigate to Dashboard → Advanced → API Keys
- Look for
qb_tokenor click the + button to create new - Enter app name:
WSD Dashboard - Copy the generated key
Environment Configuration
WSD uses a comprehensive environment configuration file that’s automatically created during installation:
nano /srv/quickbox/assets/plugins/wsd/env.confConfiguration breakdown:
# ============================================
# Application Configuration
# ============================================
APPLICATION_NAME=jellyfin # or 'emby'
APPLICATION_PORT=8096 # Media server port
APPLICATION_USERNAME=john_doe # QuickBox username
# URL Structure:
# Emby: http://localhost:${APPLICATION_PORT}
# Jellyfin: http://localhost:${APPLICATION_PORT}/${APPLICATION_USERNAME}/${APPLICATION_NAME}
APPLICATION_URL=http://localhost:8096/john_doe/jellyfin
# ============================================
# Node.js Configuration
# ============================================
NODE_TLS_REJECT_UNAUTHORIZED=0 # Disable TLS verification (localhost)
USE_LOCALHOST_HTTPS=true # Use HTTPS for media server connections
NODE_ENV=production # Production environment
# ============================================
# Daemon Configuration
# ============================================
DAEMON_INTERVAL=2000 # Polling interval in milliseconds
# Lower = more real-time, higher load
# Recommended: 2000-5000ms
# ============================================
# Database Configuration
# ============================================
QB_WSD_DB_PATH=/srv/quickbox/db/WSDashboard.db
QB_WSD_USER_GEOIP_DB_PATH=/srv/quickbox/db/WSDUserGeoIpMap.db
NODE_PATH=/srv/quickbox/assets/plugins/wsd/nodejs/.venv/lib/node_modules
# ============================================
# Logging Configuration
# ============================================
LOG_SERVER_PORT=3001 # WebSocket log server port
LOG_LEVEL=info # trace, debug, info, warn, error, fatal
LOG_CONSOLE=true # Enable console output
LOG_FILE=true # Enable file logging
LOG_DIR=/srv/quickbox/assets/plugins/wsd/logs
LOG_MAX_FILE_SIZE=10485760 # 10MB per log file
LOG_MAX_FILES=5 # Keep 5 rotated files
LOG_TIMESTAMP_FORMAT=HH:mm:ss
LOG_INCLUDE_TIMESTAMP=true
# ============================================
# Frontend Logging Configuration
# ============================================
WSD_FRONTEND_LOG_LEVEL=warn # none, error, warn, info, debug
WSD_FRONTEND_DEBUG=false # Enable debug mode
WSD_FRONTEND_LOG_MAX_RECORDS=1000 # Max in-memory log entries
WSD_FRONTEND_LOG_TTL_MS=900000 # 15 minutes TTL
WSD_FRONTEND_LOG_SAMPLE=0.0 # Sampling rate (0.0-1.0)
# ============================================
# Log Rotation Configuration
# ============================================
LOG_ROTATION_CHECK_INTERVAL=60000 # Check every minute
LOG_MIDNIGHT_OFFSET=0 # Midnight rotation offset
LOG_DAILY_RETENTION=7 # Keep 7 days of logs
LOG_DAILY_ROTATION=true # Enable daily rotation
WSD_ENABLE_POST_ROTATION_RESTART=true # Restart after rotationPerformance Tuning
The DAEMON_INTERVAL setting controls polling frequency:
- 2000ms (2s) - Most responsive, higher CPU usage
- 3000ms (3s) - Balanced (recommended)
- 5000ms (5s) - Lower resource usage, slight delay in updates
Adjust based on your server resources and monitoring needs.
Accessing WSD Dashboard
After installation, access the dashboard through multiple methods:
Access Methods
Primary Access (QuickBox Dashboard):
https://your-server-ip/whats-streaming.phpVia QuickBox Navigation:
- Navigate to QuickBox Pro dashboard
- Look for What’s Streaming Dashboard in the navigation menu
- Click to access the monitoring interface
Via Service Control Panel:
- Open the main QuickBox dashboard
- Locate the Service Control Panel
- Find your media server (Emby/Jellyfin)
- Click the WSD icon or link
Dashboard Overview
The WSD interface provides comprehensive streaming insights:
📊 Active Sessions Table
Real-time view of who's watching what, with user info, content details, playback quality, and bandwidth usage
🎮 Session Controls
Play, pause, stop, seek controls for each active session with administrative message and notification capabilities
📈 Bandwidth Monitoring
Live graphs showing total bandwidth consumption, per-session usage, and historical trends
🌍 Geolocation Data
Visual map showing where users are streaming from with IP-based location tracking
📱 Device Information
Detailed device data including client type, player, codec information, and transcoding status
📝 Live Log Panel
Real-time WebSocket log streaming with search, filtering, and tag-based organization for troubleshooting
Interactive Features
Session Management:
- Play/Pause Control - Remote playback control for any session
- Stop Session - Immediately terminate streaming sessions
- Seek Control - Jump to specific timestamps in media
- Send Messages - Push notifications to specific users or all active sessions
- Kick Users - Force disconnect with optional custom message
Data Visualization:
- Real-Time Updates - Live session data without page refreshes
- Sortable Tables - Click column headers to sort by any metric
- Search & Filter - Quickly find specific sessions or users
- Responsive Layout - Optimized for desktop, tablet, and mobile viewing
Advanced Log Panel Features
WSD includes a sophisticated log viewing system accessible directly from the dashboard:
Accessing the Log Panel
- Navigate to the WSD dashboard
- Click the settings dropdown for Emby or Jellyfin
- Select “View WSD Logs”
- Log panel opens in a modal with real-time streaming
Log Panel Capabilities
⚡ Real-Time Streaming
WebSocket-based live log updates with automatic scrolling and connection status indicator
🔍 Search & Filter
Full-text search with keyword highlighting and tag-based filtering for focused troubleshooting
🎨 Terminal UI
Dark theme with color-coded log levels (trace, debug, info, warn, error, fatal) for easy visual parsing
📊 Dual Modes
Switch between live streaming and static historical log viewing with seamless transitions
🎯 Smart Auto-Scroll
Automatic scrolling with manual override—scroll up to pause, resume when at bottom
🏷️ Tag Management
Toggle visibility of specific log tags and categories for focused debugging sessions
Log Panel Controls
Mode Toggle:
- Live Mode - Real-time WebSocket streaming from log server
- Static Mode - Historical logs with pagination
Search & Filter:
- Enter keywords to filter log entries in real-time
- Case-insensitive search across all log fields
- Results highlighted for easy identification
Tag Filters:
- Click tag buttons to show/hide specific log categories
- Multiple tags can be toggled simultaneously
- Visual indicators show active/inactive tags
Additional Controls:
- Clear Logs - Remove all entries from current buffer
- Connection Status - Visual indicator of WebSocket connection health
- Auto-Scroll Toggle - Enable/disable automatic scrolling
Directory Structure
Understanding WSD’s file organization:
Troubleshooting
Common Issues
WSD not connecting to media server:
# Check if media server is running
systemctl status jellyfin@username # or emby-server@username
# Verify API key is correct
/opt/quickbox/bin/qbwsd-health-check.sh --verbose
# Check WSD logs
journalctl -u qbwsd.service -n 50
# Test media server API manually
curl -H "X-Emby-Token: YOUR_API_KEY" http://localhost:8096/SessionsDashboard not loading:
# Restart WSD service
systemctl restart qbwsd.service
# Check nginx configuration
nginx -t
systemctl reload nginx
# Verify PHP-FPM is running
systemctl status php8.1-fpm
systemctl restart php8.1-fpm
# Check file permissions
ls -la /srv/quickbox/assets/plugins/wsd/No sessions showing in dashboard:
# Verify API key has proper permissions
# Check env.conf configuration
cat /srv/quickbox/assets/plugins/wsd/env.conf | grep APPLICATION
# Check database connectivity
sqlite3 /srv/quickbox/db/WSDashboard.db "SELECT * FROM media_api;"
# Ensure users are actively streaming
# Check media server's native dashboard for active sessionsLog panel not working:
# Check log server service
systemctl status qbwsd-log-server.service
systemctl restart qbwsd-log-server.service
# Verify WebSocket port configuration
grep LOG_SERVER_PORT /srv/quickbox/assets/plugins/wsd/env.conf
# Check nginx WebSocket proxy
grep -A 10 "wsd-logs/ws" /etc/nginx/software/wsd.conf
# Test WebSocket connection
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" \
http://localhost:3001/wsPermission errors:
# Run comprehensive auto-fix
/opt/quickbox/bin/qbwsd-health-check.sh --fix
# Fix file ownership
chown -R www-data:www-data /srv/quickbox/assets/plugins/wsd
chown www-data:www-data /srv/quickbox/db/WSDashboard.db
# Verify www-data group memberships
id www-data
# Should show emby/jellyfin in supplementary groups
# Reinstall if issues persist
qb reinstall wsdashboard -u usernameHigh resource usage:
# Check resource consumption
systemctl status qbwsd.service
top -p $(pgrep -f wsd-daemon)
# Adjust polling interval (increase DAEMON_INTERVAL)
nano /srv/quickbox/assets/plugins/wsd/env.conf
# Change DAEMON_INTERVAL=2000 to 5000 or higher
# Restart after changes
systemctl restart qbwsd.service
# Monitor resource limits
systemctl show qbwsd.service | grep -E "Memory|CPU"Use Cases
Server Capacity Planning
Monitor concurrent streams to ensure optimal server performance:
Symptoms
- 10+ concurrent streams causing buffering
- High bandwidth consumption during peak hours
- CPU/GPU transcoding overload
- Specific users consuming excessive resources
Resolution
- Upgrade server hardware (CPU, RAM, storage)
- Optimize media quality settings and transcoding
- Implement user limits or quality restrictions
- Schedule maintenance during low-traffic periods
User Activity Monitoring
Gain insights into viewing patterns and content popularity:
- 📊 Popular Content - Identify most-streamed movies, shows, and media
- ⏰ Peak Hours - Determine when server load is highest
- 👥 User Patterns - Track individual viewing habits and preferences
- 🌍 Geographic Distribution - See where your users stream from
- 📱 Device Analytics - Understand client types and player capabilities
Performance Troubleshooting
Diagnose and resolve playback issues in real-time:
- 🐌 Buffering Streams - Identify bandwidth bottlenecks or network issues
- ⚙️ Transcoding Load - Monitor CPU/GPU usage for transcoding operations
- 🎬 Direct Play vs Transcode - Optimize media formats for direct streaming
- 🔍 Session Diagnostics - View detailed codec, bitrate, and quality metrics
- 📝 Live Logs - Real-time troubleshooting with WebSocket log streaming
Administrative Control
Manage streaming sessions and enforce server policies:
- 🎮 Remote Control - Play, pause, or stop sessions remotely
- 💬 User Communication - Send messages or notifications to active users
- 🚫 Session Termination - Disconnect problematic or unauthorized sessions
- 📊 Resource Management - Monitor and limit bandwidth-intensive streams
- 🔐 Access Control - Track and manage user access patterns
Best Practices
Do
- Install Emby or Jellyfin before installing WSD for proper integration
- Use the QuickBox-generated qb_token API key for seamless setup
- Set DAEMON_INTERVAL between 2000-5000ms based on server resources
- Enable daily log rotation to prevent disk space issues
- Run /opt/quickbox/bin/qbwsd-health-check.sh periodically to verify system health
- Use the live log panel for real-time troubleshooting during issues
- Monitor resource usage and adjust CPU/memory limits if needed
- Keep WSD updated via qb update wsdashboard for latest features
Don't
- Don't set DAEMON_INTERVAL below 1000ms (excessive server load)
- Don't disable security sandboxing features in service configuration
- Don't run services as root—always use www-data user
- Don't ignore health check warnings from qbwsd-health-check.sh—investigate and resolve
- Don't manually edit database files—use API or reinstall
- Don't expose log server WebSocket port externally
- Don't disable log rotation—can cause disk space exhaustion
- Don't modify core service files—use override.conf instead
Additional Resources
Related Applications
WSD works seamlessly with these QuickBox Pro applications:
Join the Community
Media server operators sharing configs, getting support, and shaping the future of QuickBox Pro.