#!/usr/bin/env bash # ZION TERMINAL - Saude do sistema # Cyberdeck criado por Pablo Murad em 2026 export LC_ALL=C . /opt/zion-terminal/bin/zion-lib.sh 2>/dev/null [ "$1" = "--help" ] && { echo "Uso: zion saude — temperatura, ventoinha, frequencia, carga, RAM, swap, disco, erros, servicos, Tailscale e rede, com estados OK/ATENCAO/CRITICO."; exit 0; } # rotulo | valor | estado(ok/warn/crit/nd) | detalhe linha() { printf ' %b%-14s%b %b%-18s%b %b %b%s%b\n' "$ZDISC" "$1" "$ZR" "$ZWHT" "$2" "$ZR" "$(ui_state "$3")" "$ZGRY" "${4:-}" "$ZR"; } ui_header "SAUDE DO SISTEMA" temp=$(zion_temp_c); tst=ok; [ "$temp" -ge 65 ] && tst=warn; [ "$temp" -ge 80 ] && tst=crit linha "Temperatura" "${temp} C" "$tst" # Ventoinha (hwmon/pwm-fan) - dado real quando existe fan=""; for h in /sys/class/hwmon/hwmon*; do [ -r "$h/name" ] && [ "$(cat "$h/name")" = pwm-fan ] && { for p in "$h"/pwm1 "$h"/fan1_input; do [ -r "$p" ] && fan="$fan $(basename "$p")=$(cat "$p")"; done; }; done [ -n "$fan" ] && linha "Ventoinha" "$(echo $fan)" ok "PWM 0-255" || linha "Ventoinha" "sem controle expl." nd freq=$(( $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)/1000 )) linha "CPU freq" "${freq} MHz" ok "governor: $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)" cpu=$(zion_cpu_pct); cst=ok; [ "$cpu" -ge 75 ] && cst=warn; [ "$cpu" -ge 90 ] && cst=crit linha "CPU uso" "${cpu} %" "$cst" carga=$(zion_load); nucleos=$(nproc) cc=$(awk -v c="$carga" -v n="$nucleos" 'BEGIN{p=c/n*100; print (p>=90)?"crit":(p>=70)?"warn":"ok"}') linha "Carga (1m)" "$carga" "$cc" "de $nucleos nucleos" rp=$(zion_ram_pct); rst=ok; [ "$rp" -ge 75 ] && rst=warn; [ "$rp" -ge 90 ] && rst=crit linha "RAM" "$(zion_ram_str)" "$rst" "${rp}%" swused=$(awk '/SwapTotal/{t=$2}/SwapFree/{f=$2}END{printf "%d",(t-f)/1024}' /proc/meminfo) swtot=$(awk '/SwapTotal/{printf "%d",$2/1024}' /proc/meminfo) linha "Swap (zram)" "${swused} / ${swtot} MB" ok dp=$(zion_disco_pct); dst=ok; [ "$dp" -ge 75 ] && dst=warn; [ "$dp" -ge 90 ] && dst=crit linha "Disco /" "$(zion_disco)" "$dst" falhas=$(zion_falhas); linha "Servicos falha" "$falhas" "$([ "$falhas" -gt 0 ] && echo crit || echo ok)" [ "$falhas" -gt 0 ] && systemctl --failed --no-legend | awk '{print " - "$1}' erros=$(journalctl -p err -b --no-pager 2>/dev/null | grep -c . || echo 0) linha "Erros no boot" "$erros" "$([ "$erros" -gt 20 ] && echo warn || echo ok)" "journalctl -p err -b" ts=$(zion_ts_estado); linha "Tailscale" "$ts" "$([ "$ts" = conectado ] && echo ok || echo warn)" "$(zion_ip_ts)" net=$(zion_internet); linha "Internet" "$net" "$([ "$net" = disponivel ] && echo ok || echo warn)" ui_rule