Skip to content

feat: add Spencer — real-time server monitoring dashboard#953

Open
ipetinate wants to merge 3 commits into
IceWhaleTech:mainfrom
ipetinate:add-spencer
Open

feat: add Spencer — real-time server monitoring dashboard#953
ipetinate wants to merge 3 commits into
IceWhaleTech:mainfrom
ipetinate:add-spencer

Conversation

@ipetinate

@ipetinate ipetinate commented Jun 7, 2026

Copy link
Copy Markdown

Spencer — Real-time server monitoring dashboard

Version: v0.3.0
Repo: https://github.com/ipetinate/spencer
Docker Hub: https://hub.docker.com/r/ipetinate/spencer

What is Spencer?

Spencer is a lightweight, fully self-hosted server monitoring dashboard with a modern drag-and-drop UI.

Metrics covered:

  • CPU — aggregate usage + per-core breakdown with sparklines
  • Memory — used/available/swap with history chart
  • Disk — usage per partition with visual bars
  • Network — per-interface rx/tx with live charts
  • Temperature — all sensors displayed as gauge dials (native Linux only)
  • GPU — usage, VRAM, temperature, power via nvidia-smi or rocm-smi (native Linux only)
  • Processes — sortable table with configurable columns and inline detail popover

UI highlights:

  • Drag-and-drop + resizable widget grid (persisted across reloads)
  • 10 themes (dark/light variants: Nord, Dracula, Catppuccin, Solarized, GitHub…)
  • PWA-installable as a standalone desktop/mobile app
  • Configurable UI scale (useful for TV/large monitor setups)
  • Widget visibility manager — show/hide widgets with drag-and-drop in Settings
  • Real-time updates via Server-Sent Events (SSE)
  • Optional Bearer-token authentication (SPENCER_AUTH=true)

Docker Compose changes in this update (v0.3.0)

  • Added TZ environment variable for correct timezone display
  • Added /host/root bind mount (required for disk usage metrics)
  • Added healthcheck for container health monitoring
  • Added description metadata for all volumes
  • Updated description to mention GPU monitoring support

Requirements

The volume mounts (/proc, /sys, /dev, /) are read-only and required for full metric coverage. Without them Spencer will run but metrics will be limited.

ipetinate and others added 2 commits June 7, 2026 09:58
- Add '---' YAML document separator (required by CasaOS parser)
- Remove 'source: /' root mount (caused nil pointer dereference in parser)
- Remove TZ env var (unresolved variable causing parse issues)
- Add /DATA/AppData/$AppID:/data bind mount for SQLite persistence
- Add store_app_id field
- Move pid: host before volumes (consistent ordering)
- Bump version to 0.1.2

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@ipetinate

Copy link
Copy Markdown
Author

CI failure is not caused by Spencer

The build check failure is a pre-existing bug in Apps/Etherpad/docker-compose.yml, unrelated to this PR.

The Spencer file validates cleanly:

./Apps/Spencer/docker-compose.yml
pass validate

The crash happens on the next file the validator processes:

./Apps/Etherpad/docker-compose.yml
ERROR: failed to parse docker-compose file runtime error: invalid memory address or nil pointer dereference

I confirmed this locally by running casaos-app-management-validator against both files:

  • Spencer/docker-compose.ymlpass validate
  • Etherpad/docker-compose.ymlERROR: nil pointer dereference

The Etherpad compose has multiline environment variables with newlines and special characters (DEFAULT_PAD_TEXT) that appear to trigger a bug in the validator. This issue exists on main independently of this PR.

Could this be merged despite the pre-existing CI failure, or would you prefer to fix Etherpad first? Happy to open a separate PR for that.

@sonarqubecloud

sonarqubecloud Bot commented Jun 8, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant