Commit Graph

26 Commits

Author SHA1 Message Date
Developer 200d319fb0 feat(widgets): add backend CRUD, registry, and default seeding
Introduce a closed, compile-time widget registry and backend CRUD for
dashboard widget instances.

- Add dashboard_widgets SQLite table in SettingsStore with CRUD helpers and
  default seeding (Jellyfin + Backups) on first install.
- Add Pydantic models with credential-key and secret-value rejection.
- Add widgets router: /api/widgets/sources, /types, /instances CRUD.
- Call ensure_defaults() in app lifespan so fresh installs seed defaults.
- Add backend tests covering registry, CRUD, validation, and seeding.
- Include SDD artifacts: exploration, proposal, spec, design, tasks.
2026-06-19 20:07:47 +00:00
Developer 08a3b616f6 refactor(monitoring): decommission legacy SSH-scraping poller (slice 1)
The 2026-06-16/17 observability update externalised metrics to
Prometheus + node_exporter + Grafana, but the legacy Manage-side
SSH-scraping monitor was never removed. It duplicated the new stack,
ran SSH df on every machine every 300s, and fed nothing (its UI was
deleted in e2ad731). This slice decommissions the duplication.

Removed (backend):
- services/monitoring_poller.py (MonitoringPoller) — entire file
- services/monitoring_actions.py (disk_space, run_machine_operation,
  poll_machine_snapshot, build_machine_client) — entire file;
  run_machine_operation had only 2 callers (the poller + /disk), both gone
- tests/test_monitoring_actions.py
- endpoints: POST /api/monitoring/poller, GET /machines/{id}/actions,
  GET /disk (and the now-dead _resolve_machine helper)
- lifespan wiring (main.py), dependency wrapper (dependencies.py),
  poller.start()/kick() from machine save (routers/settings.py)
- SettingsStore: monitoring_machine_actions table CREATE + 2 indexes +
  record/list/prune_machine_actions methods; DROP TABLE IF EXISTS on
  startup cleans existing DBs (user-approved)
- config knobs: monitoring_poll_interval_seconds,
  monitoring_poll_initial_delay_seconds, monitoring_action_retention_days
- test_api.py: TestMonitoring._ensure_machine + test_disk

Kept (fits the new model): /machines, /prometheus-targets, /alerts,
/alertmanager-status, /alertmanager-webhook; the disk_usage JOB template
(manual on-demand, not monitoring); node_exporter_* machine fields
(they point Prometheus at the right host).

Gate: backend pytest 173 passed; ruff clean.
2026-06-17 20:48:56 +00:00
Developer e2ad731b5f feat(observability): add Prometheus/Grafana/Loki/Alertmanager/Alloy stack and remove legacy Monitoring UI 2026-06-16 13:44:35 +00:00
alex a748512d22 test: verify backup monitoring implementation 2026-05-11 21:57:31 +02:00
alex 836f733a2e feat: Add API key authentication for backup tool
- Add get_api_key() and require_api_key() to auth.py
- Add generic key-value settings storage to SettingsStore
- Add test_api_key_auth to verify the implementation
- Uses secrets.compare_digest for timing-safe comparison
- Auto-generates API key on first use and stores in settings DB
2026-05-11 21:25:46 +02:00
alex f912623677 feat: add backup alert background poller 2026-05-11 20:47:08 +02:00
alex cc8056d398 feat: add backup alert generation engine 2026-05-11 20:41:33 +02:00
alex dd375a7e16 feat: add backup monitoring CRUD operations 2026-05-11 20:38:13 +02:00
alex 83d05ffea4 feat: add backup monitoring database schema 2026-05-11 20:22:23 +02:00
alex 80d38ed86d fixes and improvements 2026-05-11 17:00:46 +02:00
alex 7e80733837 fixes and improvements 2026-05-07 23:09:08 +02:00
alex a5910b0fd6 fixes and improvements 2026-05-07 22:49:56 +02:00
alex c73cfa27c3 fixes and improvements 2026-05-07 20:36:37 +02:00
alex 84dc2bd2f6 Add SSH connection validation for settings 2026-05-07 18:31:49 +02:00
alex 2219a5730f Fix SSH key handling for monitoring 2026-05-07 17:39:59 +02:00
alex 6d8b08d30f fixes and improvements 2026-05-07 15:43:22 +02:00
alex efc9b247c7 fixes and improvements 2026-05-07 13:48:10 +02:00
alex bba23165ab fixes and improvements 2026-05-07 12:34:16 +02:00
alex 2ecca84892 fixes and improvements 2026-05-07 10:17:58 +02:00
alex 016e3255f5 Add missing frontend and backend files 2026-05-06 23:46:08 +02:00
alex 8f0a9650b0 refactor frontend and backend modules 2026-05-04 22:57:57 +02:00
alex 7950bc9f64 redesign 2026-05-04 17:24:41 +02:00
alex f1694ac99b bugfixes 2026-05-04 17:07:44 +02:00
alex 4cdb4b144c simplifications and refactorings 2026-05-04 16:59:06 +02:00
alex 4226628d5a Phase 2: Docker and OIDC auth 2026-05-04 13:50:53 +02:00
alex 51b10438a9 Restructure into backend/ and frontend/ subprojects
- backend/ uses proper Python src layout (src/media_library_viewer_api/)
  with pyproject.toml, hatchling build, and PYTHONPATH=src convention
- frontend/ is a Vite + React + TypeScript SPA
- archive/ preserves the original Streamlit prototype for reference
- Cleaned up root to only contain docs, license, and subproject dirs
- Updated README for the new dual-subproject architecture
2026-04-30 21:48:46 +02:00