Process monitors stop at the browser boundary, so the thing that usually pegs a machine is invisible: forty identical processes, no age, no tab names, no idea which page is the offender. Vitals resolves every process to a human identity (container, flatpak, systemd unit, tree root, or script), then joins the OS view to the browser's own DevTools counters so each tab carries its own page-work number beside the cores its browser instance is burning. The gap between those two numbers is the diagnosis: idle page, burning compositor. - dependency-free sampler over /proc, 2s cadence, 5 min in-memory history - minimal CDP client (WebSocket + JSON) with no third-party packages - both unit systems side by side: percent of machine and fractional cores - flags for leaked automation instances and live WebRTC calls - user service with CPUQuota so the monitor can never be the problem - identity tests that need no root, server, or browser MIT licensed. Runs on Linux, reads /proc, asks for no privilege.
27 lines
900 B
Bash
Executable file
27 lines
900 B
Bash
Executable file
#!/usr/bin/env bash
|
|
# Install Vitals as a systemd user service. Idempotent.
|
|
set -euo pipefail
|
|
|
|
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
UNIT_DIR="$HOME/.config/systemd/user"
|
|
UNIT="$UNIT_DIR/vitals.service"
|
|
|
|
command -v python3 >/dev/null || { echo "python3 is required"; exit 1; }
|
|
[ -d /proc ] || { echo "this tool needs /proc (Linux)"; exit 1; }
|
|
|
|
mkdir -p "$UNIT_DIR"
|
|
sed "s|%h/Projects/vitals|$HERE|g" "$HERE/systemd/vitals.service" > "$UNIT"
|
|
|
|
systemctl --user daemon-reload
|
|
systemctl --user enable --now vitals.service
|
|
sleep 1
|
|
|
|
if systemctl --user is-active --quiet vitals.service; then
|
|
echo "Vitals is running: http://127.0.0.1:8791"
|
|
echo " logs: journalctl --user -u vitals -f"
|
|
echo " stop: systemctl --user stop vitals"
|
|
echo " disable: systemctl --user disable --now vitals"
|
|
else
|
|
echo "Vitals failed to start. Check: journalctl --user -u vitals -n 40"
|
|
exit 1
|
|
fi
|