Skip to content

Fix/smart device graphs - #14

Merged
inode64 merged 10 commits into
mainfrom
fix/smart-device-graphs
Aug 23, 2026
Merged

Fix/smart device graphs#14
inode64 merged 10 commits into
mainfrom
fix/smart-device-graphs

Conversation

@inode64

@inode64 inode64 commented Aug 23, 2026

Copy link
Copy Markdown
Owner

No description provided.

inode64 added 10 commits August 23, 2026 13:39
Objective: Show session PIDs in a dedicated dashboard column and allow exact systemd-logind closure for eligible unavailable SSH attribution rows.

Invariant: Unverifiable SSH ancestry never authorizes direct PID signalling; login1 must revalidate process generation, session ID, leader, TTY, remote state and sshd service.

Evidence: make check; 116 Playwright desktop/mobile tests; targeted utmp, login1, operation, API and session inventory tests.

Limitations: Managed unavailable-session closure requires systemd and a live remote utmp leader with readable process start ticks.
Objective: Keep login1 wiring and SSH inventory conversion under the SSH session owner, deriving action availability from the wired closer.

Invariant: Unattributed sessions advertise managed close only when the exact login1 closer is available; verified signaling remains unchanged.

Evidence: Targeted internal/app SSH session tests and make check.

Limitations: None.
Objective: Reuse one session-row representation for metrics that have not been measured.

Invariant: SSH attribution issues and empty terminal sources keep the same displayed values, actions, and accessibility behavior.

Evidence: Four targeted Playwright session tests and make check.

Limitations: None.
Objective: block libvirt network destruction when guest attachment state or network XML cannot be verified.

Invariant: NetworkDestroy runs only after every relevant guest and bridge identity has been checked; no real service operation is used in tests.

Evidence: go test -race ./internal/virt; git diff --check.

Limitations: Remote validation will inspect configured network targets without destroying a live network.
Objective: launch Chromium with the generated isolated profile and unpacked authentication extension.

Invariant: dashboard passwords remain outside URLs and process arguments while only the generated extension is enabled.

Evidence: ruff check scripts/open_sermo_dashboards.py scripts/test_open_sermo_dashboards.py; python3 -m unittest scripts/test_open_sermo_dashboards.py; git diff --check.

Limitations: Browser startup is validated by argument construction; remote server validation does not launch a graphical browser.
Objective: make init-scoped optional entries follow SERMO_BACKEND and engine.backend before host autodetection.

Invariant: service and catalog resolution share one pruning path and malformed optional predicates remain fail-safe.

Evidence: go test -race ./internal/config -run TestEnableIfInit -count=1; git diff --check.

Limitations: None.
Objective: delete an exact .local sibling whenever its retired base watch is normalized, preventing orphan overrides.

Invariant: the complete /etc/sermo tree is backed up before the first deletion, unrelated watch files remain untouched, and failed validation still restores the snapshot.

Evidence: shellcheck scripts/remote-deploy/remote_normalize_retired_watch_types.sh; ruff check scripts/remote-deploy/test_normalize_retired_watch_types.py; python3 -m unittest scripts/remote-deploy/test_normalize_retired_watch_types.py; git diff --check.

Limitations: Companion matching is intentionally exact by filename within the corresponding .local directory.
Objective: avoid delaying completed manual operations when audit persistence fails with a permanent SQLite error.

Invariant: BUSY and LOCKED result codes, including extended codes, retain bounded retries and every unrecorded operation still fails loudly.

Evidence: go test -race ./internal/state ./internal/cli -run Test\(IsSQLiteContention\|RecordManualActionEvent\) -count=1; git diff --check.

Limitations: Retry duration and pause remain unchanged for genuine contention.
Objective: show GeoIP age, network driver/speed/assigned IPs, and the SMART interface in their watch tables, including compact desktop layouts.

Invariant: typed columns read the same canonical API readings as watch expansions; narrow mobile layouts still avoid horizontal overflow, and network address counts remain distinct from assigned IP values.

Evidence: make check; targeted Go address-reading test; targeted Playwright test on desktop and mobile; live pre-deploy API inspection on bk1.srvdr.com.

Limitations: interfaces without an address, driver, speed, or kernel bus continue to show an em dash rather than an inferred value.
Objective: Hide graph panels and empty-data notices for SMART indicators a device does not publish.

Invariant: Current and retained SMART readings preserve supported historical graphs for both watches and service checks.

Evidence: make check; remote validation on bk1.srvdr.com confirmed 44 healthy services, 51 fresh watches, and device-specific SMART metrics.

Limitations: SMART capability becomes visible after a current or retained device reading.
@inode64
inode64 merged commit 152eb7f into main Aug 23, 2026
6 of 7 checks passed
@inode64
inode64 deleted the fix/smart-device-graphs branch August 24, 2026 06:37
@inode64
inode64 restored the fix/smart-device-graphs branch August 26, 2026 14:51
@inode64
inode64 deleted the fix/smart-device-graphs branch August 26, 2026 15:33
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