all repos — zion-terminal @ main

dotfiles

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