e4fdd0199d
- Gráficos de línea pixel-perfect: ANTIALIAS_NONE + ancho 1px + coords ancladas al centro del pixel, para trazos nítidos sobre la rejilla. - Reloj + fecha (formato europeo) en una franja superior común a todas las pestañas; la barra de pestañas y el contenido bajan para hacerle sitio. - Nueva pestaña Procesos: nº de procesos (total + en ejecución), hilos, carga 1/5/15 min y tablas TOP CPU / RAM / I/O. Cada fila muestra el PID (clicable, abre htop -p) separado del nombre. - Nueva pestaña Devices: almacenamiento (lsblk sin loops), interfaces de red físicas e IP, y dispositivos USB (lsusb). - Docker con detalle: contador running/total y, por contenedor, nombre + imagen + estado abreviado (Up 33h / Up 2d) coloreado según salud. - Fix: el header de Docker se dibujaba con baseline directa y solapaba la barra de pestañas; ahora usa el mismo offset que el resto de paneles. - metric.sh: helpers nproc_count/running, nthreads, load_avg, top_cpu/ram/io, disk_list, usb_list, net_ifaces, docker_list, docker_count. - Ventana 545 -> 575 px de alto. app.md a v0.2.0.
54 lines
3.3 KiB
Bash
Executable File
54 lines
3.3 KiB
Bash
Executable File
#!/bin/sh
|
|
# Helper de metricas para conky_widget — imprime UN valor "pelado" (sin etiquetas).
|
|
# Portado del widget previo. Toda la logica con comillas/awk vive aqui para no
|
|
# romper el parser de conky ni el de widget.lua.
|
|
case "$1" in
|
|
gpu_util) nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits ;;
|
|
gpu_temp) nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits ;;
|
|
gpu_memp) nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits \
|
|
| awk -F', ' '{printf "%d", $1/$2*100}' ;;
|
|
gpu_memi) nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits \
|
|
| awk -F', ' '{printf "%d/%d MB", $1, $2}' ;;
|
|
cpu_temp) for h in /sys/class/hwmon/hwmon*; do
|
|
[ "$(cat "$h/name" 2>/dev/null)" = coretemp ] && { cat "$h/temp1_input"; break; }
|
|
done | awk '{printf "%d", $1/1000}' ;;
|
|
|
|
# --- Pestaña Procesos ---
|
|
nproc_count) ps -e --no-headers 2>/dev/null | wc -l ;;
|
|
nproc_running) awk '/^procs_running/{print $2}' /proc/stat 2>/dev/null ;;
|
|
nthreads) ps -eLf --no-headers 2>/dev/null | wc -l ;;
|
|
load_avg) awk '{printf "%s %s %s", $1, $2, $3}' /proc/loadavg 2>/dev/null ;;
|
|
# "pid %valor nombre" por linea, mayor primero
|
|
top_cpu) ps -eo pid=,pcpu=,comm= --sort=-pcpu 2>/dev/null | head -n 6 ;;
|
|
top_ram) ps -eo pid=,pmem=,comm= --sort=-pmem 2>/dev/null | head -n 6 ;;
|
|
# I/O por proceso: requiere pidstat (paquete sysstat); si falta, vacio.
|
|
# Las columnas kB_rd/s y kB_wr/s se cuentan desde el final (Command = ultimo
|
|
# campo, iodelay = NF-1, kB_ccwr/s = NF-2, kB_wr/s = NF-3, kB_rd/s = NF-4),
|
|
# robusto frente a que la primera columna sea epoch o UID.
|
|
top_io) command -v pidstat >/dev/null 2>&1 \
|
|
&& pidstat -d 1 1 2>/dev/null \
|
|
| awk 'NF>=6 && $NF!="Command" && $0 !~ /Average|Linux|^[[:space:]]*$/ \
|
|
{ io=$(NF-4)+$(NF-3); if (io>0) printf "%s %.0f %s\n", $(NF-5), io, $NF }' \
|
|
| sort -k2 -rn | head -n 5 \
|
|
|| echo "" ;;
|
|
|
|
# --- Pestaña Devices ---
|
|
# -e 7,11 excluye loops (snaps) y cdrom; solo discos reales
|
|
disk_list) lsblk -dno NAME,SIZE,MODEL -e 7,11 2>/dev/null | head -n 8 ;;
|
|
usb_list) lsusb 2>/dev/null \
|
|
| sed -E 's/^Bus [0-9]+ Device [0-9]+: ID [0-9a-fA-F]+:[0-9a-fA-F]+ //' \
|
|
| grep -viE 'root hub' | head -n 10 ;;
|
|
# Interfaces fisicas/reales (excluye docker, bridges, veth, virbr)
|
|
net_ifaces) ip -br -4 addr 2>/dev/null \
|
|
| awk '$1 !~ /^(docker|br-|veth|virbr)/ && ($2=="UP" || $1=="lo") {printf "%s %s\n", $1, $3}' \
|
|
| head -n 6 ;;
|
|
|
|
# --- Pestaña Docker ---
|
|
# "nombre|estado|imagen" por contenedor. Estado y imagen abreviados.
|
|
docker_list) docker ps --format '{{.Names}}|{{.Status}}|{{.Image}}' 2>/dev/null \
|
|
| sed -E 's/Up ([0-9]+) seconds?/Up \1s/; s/Up ([0-9]+) minutes?/Up \1m/; s/Up ([0-9]+) hours?/Up \1h/; s/Up ([0-9]+) days?/Up \1d/; s/Up ([0-9]+) weeks?/Up \1w/; s/Up ([0-9]+) months?/Up \1mo/; s/Up Less than a second/Up 0s/; s/ \(healthy\)//; s/ \(unhealthy\)/ BAD/' \
|
|
| head -n 14 ;;
|
|
docker_count) printf "%s/%s" "$(docker ps -q 2>/dev/null | wc -l)" "$(docker ps -aq 2>/dev/null | wc -l)" ;;
|
|
*) echo 0 ;;
|
|
esac
|