Metrics
Runix collects per-process and system-wide resource metrics.
Implementation
Located at internal/metrics/:
| File | Responsibility |
|---|---|
collector.go | Collector — periodic per-process metric collection via /proc |
system.go | GetSystemMetrics() — system-wide memory, CPU load, uptime |
prometheus.go | WritePrometheus() — Prometheus text exposition format output |
Per-Process Metrics
The Collector periodically reads /proc/[pid]/stat for each tracked process:
| Metric | Source | Description |
|---|---|---|
pid | Tracking | OS process ID |
cpu_percent | /proc/[pid]/stat fields 14-15 | CPU usage percentage |
mem_bytes | /proc/[pid]/stat field 24 (RSS) | Resident memory in bytes |
mem_percent | Computed | Memory as percentage of total |
threads | /proc/[pid]/stat field 20 | Thread count |
fds | /proc/[pid]/fd/ | Open file descriptor count |
collected_at | Timestamp | When metrics were collected |
Collection Flow
Collector.Start(interval)begins a goroutine that ticks at the given interval- On each tick,
collectAll()reads metrics for all tracked PIDs - Results are stored in a mutex-protected map
- Callers use
Get(pid)orGetAll()to read the latest values
Tracking
Track(pid)— Add a PID to the tracking setUntrack(pid)— Remove a PID from the tracking set
System Metrics
GetSystemMetrics() reads system-wide metrics from /proc:
| Metric | Source |
|---|---|
total_memory | /proc/meminfo → MemTotal |
free_memory | /proc/meminfo → MemAvailable |
used_memory | Computed: total - free |
cpu_load_1 | /proc/loadavg field 1 |
cpu_load_5 | /proc/loadavg field 2 |
cpu_load_15 | /proc/loadavg field 3 |
uptime_seconds | /proc/uptime field 1 |
process_count | /proc/loadavg field 4 |
Prometheus Format
WritePrometheus() outputs metrics in Prometheus text exposition format:
# HELP runix_process_count Number of processes by state.
# TYPE runix_process_count gauge
runix_process_count{state="running"} 3
runix_process_count{state="stopped"} 1
runix_process_restarts_total{name="api",namespace="default"} 0
runix_process_restarts_total{name="worker",namespace="default"} 2
runix_process_uptime_seconds{name="api",namespace="default"} 3600
runix_process_memory_bytes{name="api",namespace="default"} 47185920
runix_process_cpu_percent{name="api",namespace="default"} 2.30
runix_process_count_total 4
Platform Support
| Platform | Support |
|---|---|
| Linux | Full — reads /proc filesystem |
| macOS | Not supported — returns empty metrics |
| Windows | Not supported — returns empty metrics |
The collector checks runtime.GOOS and returns zero-value metrics on non-Linux platforms.
What's Next
- Status Command — Displays CPU and memory per process
- Web UI — Dashboard with live metrics