Skip to content

Latest commit

 

History

History
109 lines (97 loc) · 18.3 KB

File metadata and controls

109 lines (97 loc) · 18.3 KB

dumpstore — Feature Tracker

Implemented

Feature Since Notes
System info v0.0.1 Hostname, OS, kernel, CPU, uptime, load averages, process stats
Pool overview v0.0.1 Health badges, usage bars, fragmentation, dedup ratio, vdev tree
I/O statistics v0.0.1 Live read/write IOPS and bandwidth per pool
Disk health (SMART) v0.0.1 Temperature, power-on hours, reallocated/pending/uncorrectable sectors via smartctl
Dataset browser v0.0.1 Depth-indented collapsible tree; compression, quota, mountpoint
Dataset creation v0.0.1 Filesystems and volumes with all ZFS properties
Dataset editing v0.0.1 Update properties in place (set or inherit)
Dataset deletion v0.0.1 Recursive option; confirm-by-typing dialog
Snapshot management v0.0.1 Grouped by dataset into collapsible sections (count/size/age header); create (recursive), delete single or batch via per-group/global select
Prometheus metrics v0.0.8 HTTP request counters/latency, Ansible playbook counters/duration, Go runtime stats
Install script v0.0.8 install.sh — build, install, register service on Linux and FreeBSD
Live updates (SSE) v0.0.2 Server-Sent Events for pools, datasets, snapshots, I/O; falls back to REST polling
POSIX ACL management v0.0.5 View, add, remove entries via getfacl/setfacl; recursive apply
NFSv4 ACL management v0.0.5 View, add, remove entries via nfs4_getfacl/nfs4_setfacl
User management v0.0.4 List, create, edit, delete local Unix users; system accounts protected
Group management v0.0.4 List, create, edit, delete local Unix groups; system groups protected
Dataset mountpoint chown v0.0.7 View and set owner/group of a dataset's mountpoint
Software inventory v0.0.7 Versions of all runtime tools shown in Sysinfo tab
NFS share management v0.0.9 Enable/configure/disable NFS sharing via ZFS sharenfs property; cross-platform
SMB share management v0.1.0 Create/remove Samba usershares; manage Samba users; one-click Samba setup; cross-platform
Pool scrub management v0.1.2 Trigger scrubs, cancel running scrubs, view last scrub time/status/progress per pool
Pool scrub scheduling v0.1.2 Per-pool schedule via Linux zfsutils-linux (2nd Sunday monthly) or FreeBSD periodic.conf (configurable threshold)
Auto-snapshot scheduling v0.1.3 Manage com.sun:auto-snapshot* ZFS properties per dataset; integrates with zfs-auto-snapshot (Linux) / zfstools (FreeBSD)
iSCSI target management v0.1.4 Expose zvols as iSCSI targets (targetcli/LIO on Linux, ctld on FreeBSD); dialog with IQN, portal, CHAP auth, initiator ACLs
SMB home shares v0.1.5 Enable/configure [homes] section in smb.conf; dataset picker or custom path; per-user auto-shares
Time Machine shares v0.1.6 Samba vfs_fruit Time Machine backup targets; named shares backed by ZFS datasets; configurable max size and valid users
User mgmt extensions v0.1.7 SSH authorized key add/remove, home directory change with optional file migration, Samba password sync on edit
Request ID correlation v0.1.8 Per-request req_id on all log lines; reads X-Request-ID from upstream proxies (nginx, Traefik) and echoes it back on response
Authentication v0.1.9 Session-based login, bcrypt password, --set-password CLI, trusted proxy delegation (X-Remote-User), per-IP rate limiting
Network interface overview v0.1.10 Read-only view of all interfaces: state badge, MAC, MTU, IPs, link speed, RX/TX counters; Linux via /sys/class/net, FreeBSD via ifconfig -a
Service management v0.1.10 Start/stop/restart/enable/disable Samba, NFS, iSCSI from the Services tab; live status via SSE; systemd on Linux, rc.d on FreeBSD; op-log for all mutations
TLS / HTTPS v0.1.10 --tls flag; self-signed cert generation (openssl via Ansible); path loader for existing certs; ACME issuance/renewal via lego; HTTP→HTTPS redirect; cert status card with expiry countdown
Samba full ownership v0.1.10 dumpstore owns smb.conf entirely — rendered from Go template on every write; directories auto-created; init gate blocks sub-features until Samba is bootstrapped; FreeBSD smb4.conf created on first init; resolves #75 #77 #78 #79 #81
FreeBSD-compliant paths v0.1.10 /usr/local/etc/dumpstore/ on FreeBSD, /etc/dumpstore/ on Linux — internal/platform.ConfigDir(goos) as single source of truth; usershares, TLS certs, rc.d script, Makefile, install.sh all updated
VM integration test suite v0.2.0 End-to-end tests (tests/integration, make test-integration) drive the deployed API in the Lima VM against real ZFS: auth, dataset/snapshot lifecycle, diff, quotas, send/recv jobs, full pool lifecycle on dedicated scratch disks. CI runs it nightly and on PRs labeled run-integration. Closes #117
Release build smoke test v0.2.0 Release recipe unified into make release; release-smoke CI job cross-builds all four targets on every PR and asserts --version reports the injected ldflag. Closes #118
Scope boundary (manage vs integrate) v0.2.0 Documented in CLAUDE.md + README: dumpstore manages ZFS + sharing, integrates with identity/observability/power/notifications. Planned table carries a per-row Scope verdict; #62/#52/#49 trimmed accordingly. Closes #121
ZFS capability gating v0.2.0 internal/zfs.Caps() probes the installed tools (zfs rewrite recognition, draid in zpool upgrade -v feature list) instead of comparing versions; exposed as capabilities in GET /api/schema; UI hides the rewrite section (with an explanatory note) and disables draid topology options when unsupported; Sysinfo shows a ZFS card with version + capability badges. Closes #119
Go ops layer v0.2.0 Single-command writes (scrub, device replace/offline/online, pool create/import/export/add/remove, quotas, snapshot create/destroy/clone) execute in-process via internal/ops — argv exec, no shell, no Python startup; same op-log/SSE contract as playbooks. 15 playbooks deleted; Ansible remains only for config-file/OS-resource writes. Closes #115
SMB init status badge v0.1.10 Users & Groups tab shows green "Initialised" badge with last-applied timestamp, or red "Not initialised"; GET /api/smb/status now includes conf_mtime
Dev VM environment v0.1.11 make vm-linux-start/deploy and make vm-freebsd-start/deploy; Ubuntu 24.04 + FreeBSD 15 with ZFS + Ansible; default admin/admin; closes #83
Dataset rename v0.1.11 Rename a dataset or volume in place; same-parent constraint; closes #21
Snapshot clone v0.1.11 Create a new dataset from an existing snapshot via zfs clone; closes #22
wsdd discovery hint v0.1.11 wsdd shown in Installed Software card; closes #80
Password hashing (argon2id) v0.1.13 argon2id replaces bcrypt; PHC string format; OWASP parameters; breaking — run --set-password after upgrade; closes #67
Snapshot send/receive v0.1.13 One-shot zfs send piped to zfs recv between local pools or to a remote host over SSH; optional incremental (-i) and --raw; runs as a background job tracked in the Jobs tab (status, runtime, cancel); SSH keys must be pre-configured; closes #26
Background jobs runner v0.1.13 internal/jobs.Manager spawns long-running data-plane operations (zfs send piped into zfs recv) outside Ansible; per-job process group + 10 s SIGTERM→SIGKILL cancel; 64 KiB stdout/stderr tail; JSON record per job persisted under /var/lib/dumpstore/jobs/ (Linux) or /var/db/dumpstore/jobs/ (FreeBSD); running jobs marked interrupted after a service restart; live updates via jobs.update SSE topic; new Jobs tab
Native auto-snapshot v0.1.13 dumpstore executes com.sun:auto-snapshot:* snapshots itself via the built-in scheduler — replaces the zfs-auto-snapshot (Linux) / zfstools (FreeBSD) OS daemons. Property inheritance honoured correctly (closes #74). One-click takeover/release; legacy zfs-auto-snap_* naming preserved; closes #56
Scheduled replication v0.1.13 Cron-scheduled zfs sendzfs recv tasks; new internal/scheduler (5-field cron, 1-min resolution) and internal/replication (JSON task store under StateDir, snapshot → hold → send → release → prune pipeline); per-run records with bounded history; manual "run now"; new Replication tab; runs surface in Jobs tab tagged replication.run; SSE topic replication.update; closes #53
Pool expansion v0.1.14 Expand… per pool card — add data vdev (confirm-by-typing), cache (L2ARC), log (SLOG, optionally mirrored), or hot spare; remove cache/log/spare devices from the vdev tree; closes #57
Pool lifecycle v0.1.14 Create pools (single/mirror/raidz1-3/draid1-3) with unused-device picker, ashift/compression options, confirm-by-typing; import with force option; export per pool card; closes #23
Per-user quota tracking v0.1.14 Usage dialog per filesystem — zfs userspace/zfs groupspace consumption table with inline userquota@/groupquota@ set/remove; GET /api/userspace/{name}, POST /api/userquota/{name}; closes #25
Snapshot diff v0.1.14 Diff button per snapshot row — zfs diff against a later snapshot or the live filesystem; color-coded change types, client-side filter, 10k entry cap; GET /api/snapshots/diff; closes #24
Dataset rewrite v0.1.14 "Rewrite data…" in the dataset detail drawer — zfs rewrite with -r/-S/-C options; runs as a background job (Jobs tab); POST /api/rewrite/{name}; closes #50
Frontend event delegation v0.2.0 One delegated listener per stable container dispatching on data-action; inline onclick= and all window.* handler globals removed; documented as a CLAUDE.md convention. Closes #120
Datasets tab redesign v0.2.0 Per-pool sections with health/capacity header rows, usage bars, status chips, hover-revealed quick actions, and a slide-in detail drawer with grouped actions and inline property editing; part 1 of #63
Snapshots tab redesign v0.2.0 Collapsible per-dataset groups with count/size/age headers, relative ages, per-group bulk select, hover-revealed actions; part 2 of #63, closes #63
Drive replacement v0.1.14 Replace pool devices from the vdev tree with an unused-device picker (zpool replace); offline/online devices for maintenance; resilver progress bar + completion toast; GET /api/devices lists block devices with in-use detection (new internal/blockdev); closes #55
Software card tiers Unreleased Installed Software card distinguishes required tools (ZFS, Ansible, Python) from optional ones — new "Needed for" column names the feature each optional tool unlocks; a missing required tool shows a red "missing" badge instead of grey N/A. Closes #135
ZFS presence checks Unreleased Startup dependency check now verifies zfs/zpool in PATH (fail fast instead of every tab erroring); on FreeBSD a System-panel warning appears when the ZFS kernel module is not loaded (kldstat -q -m zfs). Closes #136
OpenTelemetry export Unreleased Env-gated OTLP export (no-op by default): per-request trace spans with Ansible/ops child spans and background job/replication/autosnap root spans; single-producer log pipeline (journald format preserved byte-for-byte, OTLP branch adds trace_id correlation); Go runtime + HTTP metrics via OTLP alongside the unchanged Prometheus /metrics. Phases 1+2 of #49

Known Issues

Bug Priority Issue Notes
FreeBSD: no zfs_enable check in rc.conf — pools disappear after reboot if ZFS not enabled Medium #76 UI shows warning; full detection/remediation not yet implemented

Planned

Every row carries a Scope verdict from the manage-vs-integrate boundary (#121): manage = full config + lifecycle ownership, integrate = read/display/link out with minimal in-tree surface, internal = infrastructure/refactoring with no external domain.

Feature Priority Scope Issue Notes
Privilege separation Medium internal #116 Non-root web frontend + narrow root helper over a unix socket
wsdd configuration management Medium manage #86 Enable/configure wsdd (WS-Discovery) for Windows network visibility of SMB shares — discovery helper for managed SMB
FreeBSD port (sysutils/dumpstore) Medium internal #89 Port skeleton in contrib/, poudriere testing, ports-tree submission
lldap integration Medium integrate #62 Auth bind + read-only directory display; user/group management stays in lldap's UI (scope trimmed per #121)
UPS / NUT integration Low integrate #52 Status display via upsc + thin low-battery shutdown hook; no NUT configuration management (scope trimmed per #121)
ZFS native encryption Low manage #20 Load/unload keys, keystatus display. Deferred until #51 + #52 land
OpenTelemetry Low integrate #49 Export traces/metrics/logs only; dashboards/alert rules live in contrib/observability/ examples, never in-tree. Deferred until collector infra available

Cancelled / Out of Scope

Feature Reason
Snapshot rollback Not aligned with project goals; too destructive for a lightweight UI
Historical I/O graphs (#61) Delegated to Grafana/Prometheus via #49; a standard dashboard ships in contrib/observability/ instead of in-UI charting
Alerts (#27) Delegated to Grafana/Alertmanager via #49; standard alert rules ship in contrib/observability/ instead of a built-in alert engine
Log viewer (#59) Delegated to Grafana/Loki via #49; structured logs are already journald-friendly — no in-UI log tailing
File browser Scope creep; out of charter for a storage management tool
btrfs support Linux-only (breaks FreeBSD support); pool/RAID model too different from ZFS to share a UI cleanly; better served by a separate sibling project
LVM + filesystem Not a filesystem — requires managing three layers (PV/VG/LV + mkfs + fstab); no checksumming = silent data corruption; wrong tool for NAS data integrity
ext4 / XFS No checksumming, no native snapshots, no send/receive — not suitable for a NAS focused on data integrity
bcachefs Promising (checksums, CoW, snapshots, compression) but too immature for production NAS use; revisit when ecosystem stabilises (est. 2027+)
HAMMER2 Technically excellent but DragonFly BSD only — too niche to justify the abstraction cost
Multi-filesystem abstraction Adds significant complexity for little gain; dumpstore is ZFS + Linux/FreeBSD, period