#!/usr/bin/env sh
# Inventario de solo lectura para dimensionar un mini PC como servidor.
set -u

section() {
  printf '\n## %s\n' "$1"
}

run_if_available() {
  command_name=$1
  shift
  if command -v "$command_name" >/dev/null 2>&1; then
    "$command_name" "$@" 2>&1 || printf '(el comando terminó con error)\n'
  else
    printf '(comando no disponible: %s)\n' "$command_name"
  fi
}

printf '# Inventario para elegir servidor\n'
printf 'Generado: '
run_if_available date -u '+%Y-%m-%dT%H:%M:%SZ'

section 'Sistema'
run_if_available uname -srm
printf 'CPU lógicas: '
run_if_available getconf _NPROCESSORS_ONLN

section 'Memoria (instantánea, no pico)'
run_if_available free -h

section 'Almacenamiento montado'
run_if_available df -h -x tmpfs -x devtmpfs

section 'Interfaces de red'
if command -v ip >/dev/null 2>&1; then
  ip -br link 2>&1 || printf '(no se pudieron leer las interfaces)\n'
else
  printf '(comando no disponible: ip)\n'
fi

section 'Contenedores Docker (instantánea)'
if command -v docker >/dev/null 2>&1; then
  docker stats --no-stream \
    --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}' \
    2>&1 || printf '(Docker no respondió o el usuario no tiene acceso)\n'
else
  printf '(Docker no está disponible)\n'
fi

printf '\nNota: una instantánea no sustituye medir picos ni crecimiento.\n'
