bvandeusen
93d5ed8fb0
feat: managed NUT setup, plugin config improvements, migration fix
...
- Add managed NUT mode: configure NUT daemon from Settings → Plugins
(UPS plugin), writes /data/nut_managed.json read by entrypoint on
restart — no env vars or USB passthrough required
- entrypoint.sh: start NUT from /data/nut_managed.json or NUT_MANAGED=1
env var; drop to app user via gosu after NUT daemons start
- nut_setup.py: support --from-file <json> in addition to env vars
- Dockerfile: add nut, nut-client, gosu packages and entrypoint
- docker-compose.yml: document optional NUT_MANAGED env var block
- Fix plugin hot-reload migration failure: pass all plugin migration
dirs to Alembic so previously-stamped revisions from other plugins
remain resolvable (fixes UPS and any plugin with depends_on)
- Fix plugin list-type config (e.g. SNMP devices) rendering as broken
text input — now shows a read-only note to edit plugin.yaml instead
- Fix _sync_nut_managed_config: only write JSON when nut_ups_host is
non-empty, preventing NUT startup loop on container restart
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-23 08:15:48 -04:00
bvandeusen
ced1eebe1d
feat: maintenance windows, reports, uptime widget, alert improvements
...
- Add maintenance window scheduling to suppress alerts during planned
downtime (model, routes, templates)
- Add weekly email/webhook reports with host summary (core/reports.py,
Settings → Reports tab)
- Add host uptime history widget with per-check sparkline view
- Expand alert rules: dynamic metric catalog for plugin sources,
per-rule HTMX field loading, maintenance window awareness
- Register additional dashboard widgets (uptime, SNMP, UniFi, UPS)
- Add Settings → Reports tab configuration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-23 08:15:30 -04:00
bvandeusen
3c70ac56b3
feat: OIDC/LDAP auth, audit log, maintenance windows, migrations
...
- Add OIDC (OpenID Connect) authentication with discovery URL support,
group-based role mapping, and token introspection
- Add LDAP authentication with bind credentials, group-based role
mapping, and configurable attribute names
- Add audit log (model, routes, templates) tracking settings changes,
plugin enable/disable, login events
- Add migrations 0009 (widget variants), 0010 (maintenance windows),
0011 (audit log)
- Add optional dependency groups to pyproject.toml: [ldap], [snmp]
- Add Settings → Auth tab with OIDC and LDAP configuration forms
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-23 08:15:15 -04:00
bvandeusen
484da1f263
feat: show update available when catalog version differs from installed
...
Catalog partial now compares catalog version vs installed plugin.yaml version.
Gold border + "Update available — installed vX.Y.Z" badge when newer.
Update button uses btn-warn styling. Route passes installed_versions dict.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-22 18:42:50 -04:00
bvandeusen
3f437141fb
chore: update plugin catalog URL to git.fabledsword.com
...
Default plugins.index_url and all documentation URLs now point to
https://git.fabledsword.com/bvandeusen/FabledScryer-plugins .
Anchor /plugins/ in .gitignore so it only matches the root directory
(not docs/plugins/).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-22 18:36:09 -04:00
bvandeusen
230b542015
feat: rename to FabledScryer, multi-dashboard system, plugin management, branding
...
- Rename package fablednetmon → fabledscryer throughout
- Multi-dashboard: ownership, per-user defaults, HTMX edit (add/remove/reorder)
- Read-only share tokens scoped to individual dashboards
- Dashboard edit is HTMX-driven (no page reloads)
- Plugin management system: remote catalog, download/install, hot-reload, in-app restart
- plugin_index.py: fetch/cache remote index.yaml; default URL → bvandeusen/fabledscryer-plugins
- plugin_manager.py: download_and_install_plugin, hot_reload_plugin, restart_app
- ZIP extraction handles GitHub archive formats (name-v1.0.0/, name-main/)
- Settings split into tabbed sections: General, Notifications, Ansible, Plugins
- Plugins tab: catalog browser (HTMX), install/activate/update/restart actions
- UI/branding: dark palette (#07071a), crystal ball SVG logo, animated star field,
Libertinus Serif applied to headings, nav, labels, and section titles
- Widget registry (core/widgets.py) for dashboard plugin integration
- UPS widget.html (dashboard card) and settings/_tabs.html include
- Migrations 0005–0008: dashboards, is_default, ownership, share tokens
- docs/plugins/: writing-a-plugin.md updated with publishing guide,
index.yaml.example template for fabledscryer-plugins repo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-22 18:27:56 -04:00