#!/bin/bash
#       @Guilherme
#       Serviço (supervisord) que monitora a pasta da fila do webhook e envia
#       a quantidade de arquivos pendentes para o Zabbix via trapper.
#       Substitui o cron do fila.sh.
#
#       Variáveis de ambiente:
#         ZABBIX_SERVER    IP/host do Zabbix Server/Proxy (obrigatório)
#         ZABBIX_HOST      Nome do host cadastrado no Zabbix (obrigatório)
#         ZABBIX_PORT      Porta do trapper (padrão: 10051)
#         ZABBIX_KEY       Chave do item trapper (padrão: file.content)
#         FILA_INTERVALO   Intervalo entre envios em segundos (padrão: 300)
#         FILA_DIR         Pasta monitorada (padrão: /var/www/html/fila)

ZABBIX_PORT="${ZABBIX_PORT:-10051}"
ZABBIX_KEY="${ZABBIX_KEY:-file.content}"
FILA_INTERVALO="${FILA_INTERVALO:-300}"
FILA_DIR="${FILA_DIR:-/var/www/html/fila}"

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') $*"
}

# Sem configuração do Zabbix, fica ocioso para o supervisord não reiniciar em loop
if [ -z "$ZABBIX_SERVER" ] || [ -z "$ZABBIX_HOST" ]; then
    log "ZABBIX_SERVER/ZABBIX_HOST não definidos. Monitoramento da fila desativado."
    exec sleep infinity
fi

log "Monitorando '$FILA_DIR' a cada ${FILA_INTERVALO}s -> $ZABBIX_SERVER:$ZABBIX_PORT host='$ZABBIX_HOST' key='$ZABBIX_KEY'"

while true; do
    # Quantidade de arquivos aguardando envio (0 = sem fila)
    if [ -d "$FILA_DIR" ]; then
        VALOR=$(find "$FILA_DIR" -type f | wc -l)
    else
        VALOR=0
    fi

    # Envia para o Zabbix
    if SAIDA=$(zabbix_sender -z "$ZABBIX_SERVER" -p "$ZABBIX_PORT" -s "$ZABBIX_HOST" -k "$ZABBIX_KEY" -o "$VALOR" 2>&1); then
        log "Fila=$VALOR enviado. $(echo "$SAIDA" | tail -n 1)"
    else
        log "[ERRO] Falha ao enviar fila=$VALOR: $(echo "$SAIDA" | tr '\n' ' ')"
    fi

    sleep "$FILA_INTERVALO"
done
