#!/usr/bin/env bash

##FAIL2BAN LOG ANALYZER

set -euo pipefail
clear

##CONFIG
log="${1:-/var/log/fail2ban.log}"

##CHECK
if [[ ! -f "$log" ]]; then
    echo "Error: File not found: $log" >&2
    exit 1
fi

##RUN
echo "==========================="
echo "FAIL2BAN DAILY TOTALS      "
echo "==========================="
echo "DATE        LINES          "
echo "---------------------------"
sudo awk '
{
    ##FIELDS: $1 = date (YYYY-MM-DD), $2 = time
    if ($1 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
        counts[$1]++
    }
}
END {
    n = asorti(counts, sorted, "@ind_str_asc")
    for (i = 1; i <= n; i++) {
        printf "%s  %6d\n", sorted[i], counts[sorted[i]]
    }
}
' "$log" | column -t -R 2
echo "---------------------------"
sudo tot=$(wc -l < "$log" | tr -d ' ')
printf "TOTAL: %s LINES\n" "$tot"
echo "==========================="
