# Configuración de HAProxy

Para que el plugin pueda obtener las estadísticas, HAProxy debe exponer el endpoint `/stats;csv`. La habilitación se realiza editando el fichero `haproxy.cfg` (por defecto en `/etc/haproxy/haproxy.cfg`).

## Configuración mínima (sin autenticación, sin SSL)

Añade un `frontend` dedicado a las estadísticas:

```
frontend stats
    bind *:8404
    stats enable
    stats uri /stats
    stats refresh 10s
```

Con esta configuración el plugin consumirá la URL:

```
http://<IP_SERVIDOR>:8404/stats
```

> El plugin normaliza automáticamente la URL añadiendo el sufijo `;csv` y el parámetro `norefresh` cuando faltan, por lo que basta con indicar la URL base de stats.

## Configuración con autenticación básica

Para proteger el endpoint con usuario y contraseña, define una `userlist` y aplica `http-request auth` en el frontend de stats:

```
frontend stats
    bind *:8404
    stats enable
    stats uri /stats
    stats refresh 10s

    acl auth_ok http_auth(stats_users)
    http-request auth realm stats if !auth_ok

userlist stats_users
    user admin password $6$rounds=5000$<HASH_SHA512>
```

Genera el hash de la contraseña con `mkpasswd` o `openssl`:

```bash
mkpasswd -m sha-256 mypassword
# o bien
openssl passwd -6 mypassword
```

En el plugin se deberá facilitar ese mismo `username` y `password` mediante `--user` / `--password` (o los campos `username` / `password` del archivo de configuración).

## Configuración con SSL/TLS

Para servir las estadísticas sobre HTTPS añade `ssl crt` al `bind`:

```
frontend stats
    bind *:8404 ssl crt /etc/haproxy/certs/stats.pem
    stats enable
    stats uri /stats
    stats refresh 10s
```

Genera un certificado autofirmado de pruebas con:

```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/haproxy/certs/stats.key \
  -out /etc/haproxy/certs/stats.crt \
  -subj "/CN=localhost"
cat /etc/haproxy/certs/stats.crt /etc/haproxy/certs/stats.key > /etc/haproxy/certs/stats.pem
```

En el plugin se indicará la URL con esquema `https://` y el parámetro `--ssl` (o `verify_ssl`) según se quiera validar el certificado:

- `verify_ssl = true` → para certificados válidos en producción.
- `verify_ssl = false` → para certificados autofirmados o entornos de prueba.

## Configuración completa (SSL + autenticación)

```
global
    maxconn 4096

defaults
    mode http
    timeout connect 5s
    timeout client 30s
    timeout server 30s

frontend stats
    bind *:8404 ssl crt /etc/haproxy/certs/stats.pem
    stats enable
    stats uri /stats
    stats refresh 10s
    stats admin if TRUE

    acl auth_ok http_auth(stats_users)
    http-request auth realm stats if !auth_ok

userlist stats_users
    user admin password $6$rounds=5000$<HASH_SHA512>

frontend myapp
    bind *:80
    default_backend servers

backend servers
    server s1 127.0.0.1:8080 check
```

Tras modificar `haproxy.cfg` recarga el servicio para aplicar los cambios:

```bash
sudo systemctl reload haproxy
```

## Verificación

Para comprobar que el endpoint responde correctamente, puedes hacer una petición manual al CSV de estadísticas:

```bash
curl -u admin:mypassword http://192.168.0.10:8404/stats;csv
```

La salida debe ser un CSV cuyo primer registro es la cabecera con los nombres de las columnas (`# pxname,svname,qcur,qmax,...`) y las siguientes filas contienen los datos de cada `frontend`, `backend` y `server`.