UI
- F1 Dashboard now holds CPU/MEM/storage/network/services/disks in a
single dense view (was split across F1/F3/F4). F2 Logs stays separate.
- CPU and MEM rendered inline (label + bar + summary on one row) so the
dashboard fits more on screen.
- DataTables and Services list capped for compactness; services sorted
with interesting+running first.
Refresh
- Three tiers: fast (1s) for system+network, medium (5s) for storage+
services, slow (30s) for disks (smartctl is heavy). Each tier runs
in an exclusive worker group so overlaps are dropped, not queued.
Log filter
- Bindings (a / 1-4) moved from LogsTab container to the App, so they
fire regardless of focus. Pressing one auto-switches to the logs tab.
Synology DSM 7.3+ compatibility (verified against DS720+ / DSM 7.3.2)
- DSM version read from /etc/VERSION (synoinfo.conf no longer has
productversion on newer DSM).
- Disks discovered as /dev/sata{N} as well as /dev/sd{a..z} and NVMe;
smartctl runs with -d sat so SMART data is actually readable.
- SAS-style smartctl output (Vendor:/Product:) parsed as a fallback
when Device Model: is absent.
- Services collected via plain systemctl list-units, since
synoservicectl/synosystemctl are gone on recent DSM builds.
- Network primary() picks the interface with the most accumulated
traffic instead of hard-coded eth0.
Cleanup
- Removed ConfirmDialog and service start/stop/restart actions — the
app is now truly read-only, matching the stated philosophy and
eliminating a key conflict with `r`=refresh.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
46 lines
1.3 KiB
TOML
46 lines
1.3 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "dsmview"
|
|
version = "0.2.0"
|
|
description = "TUI SSH monitor for Synology DSM 7.x"
|
|
readme = "README.md"
|
|
license = { text = "MIT" }
|
|
requires-python = ">=3.12"
|
|
authors = [{ name = "Jan Vetesnik" }]
|
|
keywords = ["synology", "dsm", "nas", "tui", "ssh", "monitoring"]
|
|
classifiers = [
|
|
"Development Status :: 4 - Beta",
|
|
"Environment :: Console :: Curses",
|
|
"Intended Audience :: System Administrators",
|
|
"License :: OSI Approved :: MIT License",
|
|
"Operating System :: MacOS",
|
|
"Operating System :: POSIX :: Linux",
|
|
"Programming Language :: Python :: 3 :: Only",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Topic :: System :: Monitoring",
|
|
"Topic :: System :: Systems Administration",
|
|
]
|
|
dependencies = [
|
|
"textual>=0.47.0",
|
|
"paramiko>=3.4.0",
|
|
"click>=8.1.0",
|
|
"plotext>=5.2.0",
|
|
"textual-plotext>=0.2.1",
|
|
]
|
|
|
|
[project.scripts]
|
|
dsmview = "dsmview.cli:main"
|
|
|
|
[project.urls]
|
|
Homepage = "https://github.com/janvete/dsmview"
|
|
Repository = "https://github.com/janvete/dsmview"
|
|
Issues = "https://github.com/janvete/dsmview/issues"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["dsmview"]
|
|
|
|
[tool.hatch.build.targets.sdist]
|
|
include = ["/dsmview", "/README.md", "/LICENSE"]
|