12a757ba1e
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>
48 lines
1.5 KiB
TOML
48 lines
1.5 KiB
TOML
[package]
|
|
name = "socktop"
|
|
version = "1.50.0"
|
|
authors = ["Jason Witty <jasonpwitty+socktop@proton.me>"]
|
|
description = "Remote system monitor over WebSocket, TUI like top"
|
|
edition = "2024"
|
|
license = "MIT"
|
|
readme = "README.md"
|
|
homepage = "https://github.com/jasonwitty/socktop"
|
|
repository = "https://github.com/jasonwitty/socktop"
|
|
|
|
[dependencies]
|
|
# socktop connector for agent communication
|
|
socktop_connector = "1.50.0"
|
|
|
|
tokio = { workspace = true }
|
|
futures-util = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
url = { workspace = true }
|
|
ratatui = { workspace = true }
|
|
crossterm = { workspace = true }
|
|
unicode-width = { workspace = true }
|
|
anyhow = { workspace = true }
|
|
dirs-next = { workspace = true }
|
|
sysinfo = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
assert_cmd = "2.0"
|
|
tempfile = "3"
|
|
|
|
[package.metadata.deb]
|
|
maintainer = "Jason Witty <jasonpwitty+socktop@proton.me>"
|
|
copyright = "2024, Jason Witty <jasonpwitty+socktop@proton.me>"
|
|
license-file = ["../LICENSE", "4"]
|
|
extended-description = """\
|
|
socktop is a remote system monitor with a rich terminal user interface (TUI) \
|
|
that connects to remote hosts running the socktop_agent over WebSocket. \
|
|
It provides real-time monitoring of CPU, memory, processes, and more with \
|
|
an interface similar to the traditional 'top' command."""
|
|
depends = "$auto"
|
|
section = "admin"
|
|
priority = "optional"
|
|
assets = [
|
|
["target/release/socktop", "usr/bin/", "755"],
|
|
["../README.md", "usr/share/doc/socktop/", "644"],
|
|
]
|