ebda3c51af
Three panes painted two independent pieces of text onto one row with nothing reserving space between them, so below roughly 105 columns the right-hand piece was simply drawn over the tail of the left one: socktop — host: cachyos-gaming | 🔒✗ TLS | (a: about⏱ 500ms metrics | 2000ms The width arithmetic used str::len(), a byte count, so the emoji in these strings overstated their width and left orphaned glyphs at the right edge as well. The process table had the same problem in a different form: it handed the layout solver a fixed, over-constrained column set, so a narrow pane crushed the percentage-sized Name column to nothing while fixed-width PID and Mem % kept their full width — losing the one field that identifies a process. Add ui::fit (measure in terminal columns, truncate on character boundaries, pick the richest wording that fits) and give each pane a priority ladder: - Header: drop the key hints, then the TLS/token badges, then the "socktop — host:" prefix, then the metrics/procs words, and only then shorten the hostname. Hostname and intervals are what survive longest. - CPU pane: drop the "CPU Temp:" label, then the now:/avg: labels, then the average, then the temperature's decimal, and the temperature itself last — a thermal warning outranks a second decimal place. - Process table: Name is unconditional; CPU %, then Mem, then PID, then Mem % are added as the pane widens, so Mem % is the first to go and Name the last. Also fixes sort-header clicks, which resolved against a Layout that omitted the column spacing the Table renders with, so a click landed off by up to four columns. Covered by a test that clicks each label where it is actually drawn. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
51 lines
935 B
TOML
51 lines
935 B
TOML
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"socktop",
|
|
"socktop_agent",
|
|
"socktop_connector"
|
|
]
|
|
|
|
[workspace.dependencies]
|
|
# async + streams
|
|
tokio = { version = "1", features = ["full"] }
|
|
futures-util = "0.3"
|
|
anyhow = "1.0"
|
|
|
|
# websocket
|
|
tokio-tungstenite = { version = "0.24", features = ["__rustls-tls", "connect"] }
|
|
url = "2.5"
|
|
|
|
# JSON + error handling
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|
|
|
|
# system stats (align across crates)
|
|
sysinfo = "0.37"
|
|
|
|
# CLI UI
|
|
ratatui = "0.30"
|
|
crossterm = "0.29"
|
|
unicode-width = "0.2"
|
|
|
|
# web server (remote-agent)
|
|
axum = { version = "0.7", features = ["ws"] }
|
|
|
|
# protobuf
|
|
prost = "0.13"
|
|
dirs-next = "2"
|
|
|
|
# compression
|
|
flate2 = "1.0"
|
|
|
|
# TLS
|
|
rustls = { version = "0.23", features = ["ring"] }
|
|
rustls-pemfile = "2.1"
|
|
|
|
[profile.release]
|
|
# Favor smaller, simpler binaries with good runtime perf
|
|
lto = "thin"
|
|
codegen-units = 1
|
|
panic = "abort"
|
|
opt-level = 3
|
|
strip = "symbols" |