---
name: health-check
description: >
  Verifica la salud de servicios y sistemas. Valida que servicios esten corriendo,
  endpoints HTTP respondan, uso de recursos este dentro de limites, y no haya
  errores criticos en logs recientes.
---

# Health Check Skill

Esta skill realiza verificaciones de salud completas de servicios y sistemas.

## Proposito

- Verificar que servicios criticos esten corriendo
- Validar que endpoints HTTP respondan correctamente
- Detectar uso excesivo de recursos (CPU, memoria, disco)
- Identificar errores criticos en logs recientes
- Generar reporte de salud con score y recomendaciones

## Verificaciones realizadas

### 1. Estado de servicios (systemd)

Para cada servicio configurado:
```bash
systemctl is-active <service-name>
```

Estado esperado: `active`

### 2. Health endpoints HTTP

Si el servicio expone endpoint de salud:
```bash
http_get http://<host>:<port>/health
```

Validaciones:
- Status code: 200
- Response time: < 1000ms
- Body contiene: `"status": "ok"` (o similar)

### 3. Recursos del sistema

```bash
# CPU usage
top -bn1 | grep "Cpu(s)" | awk '{print $2}'

# Memory usage
free -m | awk 'NR==2{printf "%.0f", $3*100/$2}'

# Disk usage
df -h / | awk 'NR==2{print $5}' | sed 's/%//'
```

Thresholds:
- CPU: warning >70%, critical >90%
- Memory: warning >80%, critical >95%
- Disk: warning >85%, critical >95%

### 4. Logs recientes (ultimos 15 minutos)

```bash
journalctl -u <service> --since "15 minutes ago" | grep -i "error\|fatal\|panic"
```

Validacion: sin errores criticos en los ultimos 15 minutos

### 5. Conectividad de red (opcional)

Si el servicio depende de servicios externos:
```bash
# Test conectividad
curl -f --max-time 5 http://<dependency-host>/health
```

## Formato del reporte

```markdown
# Health Check Report - <timestamp>

## Overall Health: <HEALTHY|DEGRADED|CRITICAL>

Score: <N>/100

## Service Status

| Service | Status | Health Endpoint | Response Time |
|---------|--------|----------------|---------------|
| myapp   | running | OK (200) | 45ms |
| worker  | running | OK (200) | 32ms |

## System Resources

| Metric | Value | Status |
|--------|-------|--------|
| CPU Usage | 45% | OK |
| Memory Usage | 62% | OK |
| Disk Usage | 71% | OK |

## Issues Found

- None

## Warnings

- Disk usage on / approaching 75% threshold

## Recommendations

- Monitor disk usage trend
- Consider log rotation policy

---
Next check: <timestamp>
```

## Score calculation

Score total (0-100):
- Services running: 40 puntos (dividido entre servicios)
- Health endpoints OK: 30 puntos (dividido entre endpoints)
- Resources within limits: 20 puntos
- No critical errors in logs: 10 puntos

Estado general:
- HEALTHY: score >= 90
- DEGRADED: score >= 70 && < 90
- CRITICAL: score < 70

## Parametros

Parametros requeridos:
- `services`: lista de servicios a verificar (default: todos configurados)

Parametros opcionales:
- `include_resources`: verificar recursos del sistema (default: true)
- `include_logs`: verificar logs recientes (default: true)
- `log_timeframe`: ventana de logs a verificar (default: "15 minutes ago")
- `output_format`: "markdown" o "json" (default: "markdown")

## Configuracion

Ejemplo de configuracion en agent YAML:

```yaml
health_check:
  services:
    - name: myapp
      host: localhost
      health_url: http://localhost:8080/health
      dependencies:
        - http://db.example.com:5432
    - name: worker
      host: localhost
      health_url: http://localhost:8081/health
  thresholds:
    cpu_warning: 70
    cpu_critical: 90
    memory_warning: 80
    memory_critical: 95
    disk_warning: 85
    disk_critical: 95
  check_interval: "5m"
```

## Ejemplo de uso

Usuario: "Verifica la salud de todos los servicios"

Agente:
1. skill_search("health check")
2. skill_load("health-check")
3. Ejecutar verificaciones en orden
4. Calcular score
5. Generar reporte
6. Enviar al usuario

## Alertas automaticas

Esta skill puede configurarse para ejecutarse periodicamente via cron y alertar solo si:
- Score < 90 (DEGRADED o CRITICAL)
- Algun servicio esta down
- Recursos exceden threshold critico

Ver `crons/health-check/` para la configuracion de automatizacion.
