48 lines
1.9 KiB
Markdown
48 lines
1.9 KiB
Markdown
# TUI Resource Monitor Plan
|
||
|
||
## Language Choice: Rust
|
||
|
||
Why Rust for this:
|
||
- Produces a single static-ish native binary easily (great for self-contained executables).
|
||
- Strong ecosystem for TUIs (`ratatui`, `crossterm`) and system stats (`sysinfo`).
|
||
- Good performance and low runtime overhead for frequent refresh loops.
|
||
|
||
## Plan
|
||
|
||
1. Define scope and MVP metrics
|
||
- CPU usage (total + per core), memory, swap, disk usage, network throughput, process count, uptime.
|
||
- Target Linux first (then add macOS/Windows support if needed).
|
||
|
||
2. Bootstrap project structure
|
||
- Create a Rust CLI app with modules for `collectors`, `ui`, `state`, and `config`.
|
||
- Add dependencies: `ratatui`, `crossterm`, `sysinfo`, `anyhow`, `clap`, `serde` (optional config).
|
||
|
||
3. Implement data collection layer
|
||
- Build a polling engine (e.g., 500ms–1s interval) that samples resource metrics.
|
||
- Normalize all values into a shared state model for UI rendering.
|
||
- Add delta-based metrics (network/disk rates) from successive samples.
|
||
|
||
4. Build TUI layout and rendering
|
||
- Header: host info, uptime, refresh rate.
|
||
- Main panes: CPU, memory/swap, disk, network.
|
||
- Footer/help bar with keybindings.
|
||
- Add responsive layout for small terminal sizes.
|
||
|
||
5. Add interaction model
|
||
- Keybindings: quit, pause/resume, change refresh interval, toggle detailed view.
|
||
- Optional sorting/filtering for top processes view.
|
||
|
||
6. Packaging and self-contained build
|
||
- Configure release profile (`lto`, `panic=abort`, `strip`) for small fast binary.
|
||
- Document build command for optimized executable.
|
||
- Optional: static linking strategy for fully portable Linux binary.
|
||
|
||
7. Quality gates
|
||
- Unit tests for metric calculations and rate/delta logic.
|
||
- Smoke test for startup/render loop.
|
||
- Run `clippy` and `fmt` checks.
|
||
|
||
8. Delivery
|
||
- Provide binary + README with usage, keybindings, and supported platforms.
|
||
- Include known limitations and next-step roadmap (alerts, historical sparklines, per-process drilldown).
|