Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b6e656738b | |||
| f83cb07d57 | |||
| 7697c7dc2b | |||
| 1043fffc8d |
Generated
+2
-2
@@ -2162,7 +2162,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "socktop"
|
name = "socktop"
|
||||||
version = "0.1.3"
|
version = "1.40.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
@@ -2187,7 +2187,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "socktop_agent"
|
name = "socktop_agent"
|
||||||
version = "0.1.3"
|
version = "1.40.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
|
|||||||
+2
-1
@@ -1,10 +1,11 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "socktop"
|
name = "socktop"
|
||||||
version = "0.1.3"
|
version = "1.40.0"
|
||||||
authors = ["Jason Witty <jasonpwitty+socktop@proton.me>"]
|
authors = ["Jason Witty <jasonpwitty+socktop@proton.me>"]
|
||||||
description = "Remote system monitor over WebSocket, TUI like top"
|
description = "Remote system monitor over WebSocket, TUI like top"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
readme = "README.md"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tokio = { workspace = true }
|
tokio = { workspace = true }
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# socktop (client)
|
||||||
|
|
||||||
|
Minimal TUI client for the socktop remote monitoring agent.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
- Connects to a socktop_agent over WebSocket / secure WebSocket
|
||||||
|
- Displays CPU, memory, swap, disks, network, processes, (optional) GPU metrics
|
||||||
|
- Self‑signed TLS cert pinning via --tls-ca
|
||||||
|
- Profile management with saved intervals
|
||||||
|
- Low CPU usage (request-driven updates)
|
||||||
|
|
||||||
|
Quick start:
|
||||||
|
```
|
||||||
|
cargo install socktop
|
||||||
|
socktop ws://HOST:3000/ws
|
||||||
|
```
|
||||||
|
With TLS (copy agent cert first):
|
||||||
|
```
|
||||||
|
socktop --tls-ca cert.pem wss://HOST:8443/ws
|
||||||
|
```
|
||||||
|
Demo mode (spawns a local agent automatically on first run prompt):
|
||||||
|
```
|
||||||
|
socktop --demo
|
||||||
|
```
|
||||||
|
Full documentation, screenshots, and advanced usage:
|
||||||
|
https://github.com/jasonwitty/socktop
|
||||||
@@ -124,19 +124,29 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//support version flag (print and exit)
|
||||||
|
if env::args().any(|a| a == "--version" || a == "-V") {
|
||||||
|
println!("socktop {}", env!("CARGO_PKG_VERSION"));
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
if parsed.demo || matches!(parsed.profile.as_deref(), Some("demo")) {
|
if parsed.demo || matches!(parsed.profile.as_deref(), Some("demo")) {
|
||||||
return run_demo_mode(parsed.tls_ca.as_deref()).await;
|
return run_demo_mode(parsed.tls_ca.as_deref()).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
if parsed.verify_hostname {
|
if parsed.verify_hostname {
|
||||||
// Set env var consumed by ws::connect logic
|
// Set env var consumed by ws::connect logic
|
||||||
std::env::set_var("SOCKTOP_VERIFY_NAME", "1");
|
std::env::set_var("SOCKTOP_VERIFY_NAME", "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
let profiles_file = load_profiles();
|
let profiles_file = load_profiles();
|
||||||
let req = ProfileRequest {
|
let req = ProfileRequest {
|
||||||
profile_name: parsed.profile.clone(),
|
profile_name: parsed.profile.clone(),
|
||||||
url: parsed.url.clone(),
|
url: parsed.url.clone(),
|
||||||
tls_ca: parsed.tls_ca.clone(),
|
tls_ca: parsed.tls_ca.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let resolved = req.resolve(&profiles_file);
|
let resolved = req.resolve(&profiles_file);
|
||||||
let mut profiles_mut = profiles_file.clone();
|
let mut profiles_mut = profiles_file.clone();
|
||||||
let (url, tls_ca, metrics_interval_ms, processes_interval_ms): (
|
let (url, tls_ca, metrics_interval_ms, processes_interval_ms): (
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "socktop_agent"
|
name = "socktop_agent"
|
||||||
version = "0.1.3"
|
version = "1.40.0"
|
||||||
authors = ["Jason Witty <jasonpwitty+socktop@proton.me>"]
|
authors = ["Jason Witty <jasonpwitty+socktop@proton.me>"]
|
||||||
description = "Remote system monitor over WebSocket, TUI like top"
|
description = "Remote system monitor over WebSocket, TUI like top"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
readme = "README.md"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tokio = { version = "1", features = ["full"] }
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# socktop_agent (server)
|
||||||
|
|
||||||
|
Lightweight on‑demand metrics WebSocket server for the socktop TUI.
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
- Collects system metrics only when requested (keeps idle CPU <1%)
|
||||||
|
- Optional TLS (self‑signed cert auto‑generated & pinned by client)
|
||||||
|
- JSON for fast metrics / disks; protobuf (optionally gzipped) for processes
|
||||||
|
- Accurate per‑process CPU% on Linux via /proc jiffies delta
|
||||||
|
- Optional GPU & temperature metrics (disable via env vars)
|
||||||
|
- Simple token auth (?token=...) support
|
||||||
|
|
||||||
|
Run (no TLS):
|
||||||
|
```
|
||||||
|
cargo install socktop_agent
|
||||||
|
socktop_agent --port 3000
|
||||||
|
```
|
||||||
|
Enable TLS:
|
||||||
|
```
|
||||||
|
SOCKTOP_ENABLE_SSL=1 socktop_agent --port 8443
|
||||||
|
# cert/key stored under $XDG_DATA_HOME/socktop_agent/tls
|
||||||
|
```
|
||||||
|
Environment toggles:
|
||||||
|
- SOCKTOP_AGENT_GPU=0 (disable GPU collection)
|
||||||
|
- SOCKTOP_AGENT_TEMP=0 (disable temperature)
|
||||||
|
- SOCKTOP_TOKEN=secret (require token param from client)
|
||||||
|
- SOCKTOP_AGENT_METRICS_TTL_MS=250 (cache fast metrics window)
|
||||||
|
- SOCKTOP_AGENT_PROCESSES_TTL_MS=1000
|
||||||
|
- SOCKTOP_AGENT_DISKS_TTL_MS=1000
|
||||||
|
|
||||||
|
Systemd unit example & full docs:
|
||||||
|
https://github.com/jasonwitty/socktop
|
||||||
Reference in New Issue
Block a user