opt/zion-terminal/bin/zion-dashboard (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
#!/usr/bin/env bash
# =====================================================================
# ZION TERMINAL - Painel principal (dashboard)
# Cyberdeck criado por Pablo Murad em 2026
# Menu agrupado, consciente de largura, Ctrl+C limpo.
# =====================================================================
export LC_ALL=C
ZION_DIR="/opt/zion-terminal"; BIN="$ZION_DIR/bin"
. "$BIN/zion-lib.sh" 2>/dev/null
trap 'tput cnorm 2>/dev/null; printf "%b" "$ZR"; echo; exit 0' INT TERM
pausa() { printf '\n %bEnter para voltar…%b' "$ZGRY" "$ZR"; read -r _; }
ver=$(cat "$ZION_DIR/VERSION" 2>/dev/null)
topo() {
clear 2>/dev/null
local cols; cols=$(ui_cols)
if [ "$cols" -ge 42 ] && [ -r "$ZION_DIR/assets/ascii/logo-compacta.txt" ]; then
printf '%b' "$ZP$ZB"; sed 's/^/ /' "$ZION_DIR/assets/ascii/logo-compacta.txt"; printf '%b' "$ZR"
else printf ' %b%s ZION TERMINAL%b\n' "$ZP$ZB" "$ZSYM" "$ZR"; fi
printf ' %bv%s%b · %btema %s%b · %b%s%b\n' "$ZDISC" "${ver:-?}" "$ZR" "$ZDISC" "${ZION_TEMA:-ice}" "$ZR" "$ZDISC" "$(date '+%d/%m %H:%M')" "$ZR"
"$BIN/zion-status" 2>/dev/null
ui_rule
}
# item: "N|Rotulo" -> renderiza 1 ou 2 colunas conforme largura
grupo() {
local titulo="$1"; shift
printf ' %b%s%b\n' "$ZS$ZB" "$titulo" "$ZR"
local cols; cols=$(ui_cols); local dois=0; [ "$cols" -ge 74 ] && dois=1
local i=0 n1 l1 n2 l2
while [ $# -gt 0 ]; do
n1="${1%%|*}"; l1="${1#*|}"; shift
if [ "$dois" = 1 ] && [ $# -gt 0 ]; then
n2="${1%%|*}"; l2="${1#*|}"; shift
printf ' %b%2s%b %-26s %b%2s%b %s\n' "$ZA" "$n1" "$ZR" "$l1" "$ZA" "$n2" "$ZR" "$l2"
else
printf ' %b%2s%b %s\n' "$ZA" "$n1" "$ZR" "$l1"
fi
done
}
menu() {
grupo "OPERACAO" "1|Estado do sistema" "2|Saude" "3|Doctor (autoteste)" "4|War-room (panico)"
grupo "CONECTIVIDADE" "5|Tailscale" "6|Radar de peers" "7|Mapa do tailnet" "8|SSH" "9|Rede" "10|DNS" "11|Link (resumo)"
grupo "MANUTENCAO" "12|Armazenamento" "13|Servicos" "14|Atualizacoes" "15|Backups" "16|Logs"
grupo "FERRAMENTAS" "17|Tmux" "18|Git e projetos" "19|Compartilhar arquivos" "20|QR de acesso" "21|Manual" "22|Logbook"
grupo "SISTEMA" "23|Modo de operacao" "24|Tema" "25|Travar" "26|Informacoes" "0|Sair para o shell"
}
estado_sistema() {
topo; "$BIN/zion-health" 2>/dev/null
local csv="$ZION_DIR/logs/metricas.csv"
if [ -r "$csv" ]; then
ui_section "HISTORICO (ultimas amostras)"
printf ' %bTemp%b %b%s%b\n' "$ZDISC" "$ZR" "$ZP" "$(cut -d, -f2 "$csv" | tail -40 | zion_sparkline $(cat))" "$ZR"
printf ' %bCPU %b %b%s%b\n' "$ZDISC" "$ZR" "$ZP" "$(cut -d, -f3 "$csv" | tail -40 | zion_sparkline $(cat))" "$ZR"
printf ' %bRAM %b %b%s%b\n' "$ZDISC" "$ZR" "$ZP" "$(cut -d, -f4 "$csv" | tail -40 | zion_sparkline $(cat))" "$ZR"
fi
pausa
}
ferramentas_rede_dns() {
topo; ui_header "DIAGNOSTICO DNS"
for h in deb.debian.org google.com "$(hostname)"; do
printf ' %b%-22s%b %b\n' "$ZWHT" "$h" "$ZR" "$(getent hosts "$h" >/dev/null 2>&1 && ui_state ok || ui_state crit)"
done
ui_kv "Servidores" "$(grep -h ^nameserver /etc/resolv.conf | awk '{print $2}' | tr '\n' ' ')"; pausa
}
git_projetos() {
topo; ui_header "GIT E PROJETOS"; local found=0
for d in "$HOME"/* "$HOME"/projetos/*; do [ -d "$d/.git" ] || continue; found=1
ui_kv "$(basename "$d")" "$(git -C "$d" branch --show-current 2>/dev/null)"; done
[ "$found" = 0 ] && ui_info "Nenhum repositorio Git em ~"; pausa
}
while true; do
topo; menu
ui_rule
printf ' %b%s zion»%b ' "$ZP$ZB" "$ZSYM" "$ZR"; read -r opt
case "$opt" in
1) estado_sistema ;;
2) topo; "$BIN/zion-health"; pausa ;;
3) topo; "$BIN/zion-doctor"; pausa ;;
4) "$BIN/zion-panic" ;;
5) topo; "$BIN/zion-tailscale"; pausa ;;
6) topo; "$BIN/zion-radar"; pausa ;;
7) topo; "$BIN/zion-map"; pausa ;;
8) topo; "$BIN/zion-ssh" ;;
9) topo; "$BIN/zion-net"; pausa ;;
10) ferramentas_rede_dns ;;
11) topo; "$BIN/zion-link"; pausa ;;
12) topo; ui_header "ARMAZENAMENTO"; df -h / /boot 2>/dev/null | sed 's/^/ /'; command -v ncdu >/dev/null && echo " (dica: ncdu /)"; pausa ;;
13) topo; ui_header "SERVICOS"; ui_kv "Rodando" "$(systemctl list-units --type=service --state=running --no-legend | wc -l)"; ui_kv "Falhas" "$(zion_falhas)"; systemctl --failed --no-legend | sed 's/^/ /'; pausa ;;
14) topo; "$BIN/zion-update"; pausa ;;
15) topo; "$BIN/zion-backup"; pausa ;;
16) topo; "$BIN/zion-logs" ;;
17) exec zion tmux ;;
18) git_projetos ;;
19) topo; "$BIN/zion-serve" --help; ui_info "Rode: zion servir [dir]"; pausa ;;
20) topo; "$BIN/zion-qr"; pausa ;;
21) "$BIN/zion-book" ;;
22) topo; "$BIN/zion-log" --ver ;;
23) topo; "$BIN/zion-modo"; pausa ;;
24) topo; "$BIN/zion-theme"; pausa ;;
25) "$BIN/zion-lock" ;;
26) topo; "$BIN/zion-info"; pausa ;;
0|q|sair) clear 2>/dev/null; printf ' %b%s Terminal operacional. Ate logo.%b\n' "$ZP" "$ZSYM" "$ZR"; exit 0 ;;
*) ;;
esac
done
|