---
name: health-check
description: >
  Verifica la salud de uno o varios servicios y servidores. Usa esta skill
  cuando el usuario pregunte si algo esta funcionando, si un servicio esta
  arriba, o pida un chequeo de salud general. Tambien util despues de un
  deploy o un incidente.
---

# Health check de servicios

## Prerequisitos

- Tool `ssh_command` habilitada
- Tool `http_get` para endpoints HTTP
- Servidores en `ssh.allowed_targets`

## Flujo

### 1. Determinar alcance

Inferir del contexto del usuario:
- **Servicio especifico**: checkear solo ese servicio
- **Servidor especifico**: checkear todos los servicios en ese servidor
- **General**: checkear todos los servidores y servicios conocidos

### 2. Checks basicos por servidor

Para cada servidor:
```bash
# Conectividad
ssh_command: "echo OK"

# Uptime y load
ssh_command: "uptime"

# Disco
ssh_command: "df -h / /var /tmp 2>/dev/null | tail -n +2"

# Memoria
ssh_command: "free -m | grep -E 'Mem|Swap'"

# Procesos zombie o en estado D
ssh_command: "ps aux | awk '{if ($8 ~ /Z|D/) print}' | head -5"
```

### 3. Checks por servicio

Para cada servicio:
```bash
# Estado systemd
ssh_command: "systemctl is-active <servicio>"

# Tiempo activo
ssh_command: "systemctl show <servicio> --property=ActiveEnterTimestamp --value"

# Puertos abiertos
ssh_command: "ss -tlnp | grep <puerto>"

# Ultimos errores
ssh_command: "journalctl -u <servicio> --priority=err --since '1 hour ago' --no-pager | tail -5"
```

**Health check HTTP** (si tiene endpoint):
```
http_get: "http://<host>:<puerto>/health"
```

### 4. Evaluar y reportar

Clasificar cada componente:

| Estado | Criterio |
|--------|----------|
| OK | Servicio activo, sin errores recientes, recursos normales |
| WARNING | Servicio activo pero con errores recientes, o recursos > 80% |
| CRITICAL | Servicio caido, disco lleno, o memoria agotada |

Reportar al usuario con formato claro:
```
Health Check — <fecha hora>

[OK] servidor-1: load 0.3, disco 45%, mem 40%
  [OK] servicio-a: activo (uptime 5d), 0 errores
  [WARNING] servicio-b: activo, 3 errores en ultima hora
[CRITICAL] servidor-2: no responde SSH
```

### 5. Recomendaciones

Si hay problemas, sugerir acciones:
- Servicio caido → "Intentar restart: `systemctl restart <servicio>`"
- Disco lleno → "Limpiar logs antiguos o expandir disco"
- Memoria alta → "Revisar procesos con mayor consumo"
- Errores frecuentes → "Revisar logs con la skill log-analyzer"
