#!/bin/bash
# ============================================================
#  Diagnostico 3 de Astra: detalles de la traza del crash
#  Uso:   curl -fsSL https://astra.nexus.flashhub.net/d3 | sudo bash
# ============================================================
if [ "$(id -u)" != "0" ]; then
    echo "Ejecutalo con sudo (o con el comando de arriba, que ya lo usa)."
    exit 1
fi

T=/tmp/astra-trace.txt
if [ ! -f "$T" ]; then
    echo "No existe la traza; la genero ahora..."
    strace -f -tt -o "$T" timeout 6 /usr/bin/astra -c /etc/astra/astra.conf -p 8010 >/dev/null 2>&1
fi

N=$(grep -n "SIGSEGV" "$T" | head -1 | cut -d: -f1)
[ -z "$N" ] && N=$(wc -l < "$T")
TOT=$(wc -l < "$T")

echo "================= DIAGNOSTICO ASTRA 3 ================="
echo "traza: $T  ($TOT lineas)   crash en la linea: $N"
echo
echo "== 1) INICIO DE LA TRAZA (primeras 55 lineas) =="
head -55 "$T"
echo
echo "== 2) OPERACIONES DE ARCHIVO ANTES DEL CRASH (ultimas 30) =="
head -n "$N" "$T" | grep -E "openat|access\(|newfstatat|stat\(|readlink|read\(" | tail -30
echo
echo "== 3) LINEAS JUSTO ANTES DEL CRASH (35 antes / 2 despues) =="
INI=$(( N - 35 )); [ "$INI" -lt 1 ] && INI=1
sed -n "${INI},$(( N + 2 ))p" "$T"
echo
echo "== 4) FALLOS DE ARCHIVO (ENOENT/EACCES/EPERM) - ultimos 20 =="
grep -E "ENOENT|EACCES|EPERM" "$T" | tail -20
echo "===================== FIN ====================="
