76 lines
2.4 KiB
Bash
76 lines
2.4 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Standardwerte für die Parameter (leer = kein Filter)
|
|
START_DATE="${1:-}"
|
|
END_DATE="${2:-}"
|
|
|
|
# Validierung der Datumseingaben
|
|
validate_date() {
|
|
local date="$1"
|
|
if [[ ! "$date" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
|
|
echo "Fehler: Ungültiges Datumsformat für '$date' (erwartet: YYYY-MM-DD)" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
validate_date "$START_DATE"
|
|
validate_date "$END_DATE"
|
|
|
|
# Extrahiere und konvertiere Docker Logs mit awk
|
|
docker logs snowflake-proxy 2>&1 | awk -v start_date="$START_DATE" -v end_date="$END_DATE" '
|
|
function human_readable(kb) {
|
|
units = split("KB MB GB TB PB", unit_array)
|
|
size = kb
|
|
for (i = 1; size >= 1024 && i < units; i++) {
|
|
size /= 1024
|
|
}
|
|
return sprintf("%.2f %s", size, unit_array[i])
|
|
}
|
|
|
|
function date_to_epoch(date_str) {
|
|
if (split(date_str, parts, /[-\/]/) != 3 || parts[1] < 1970 ||
|
|
parts[2] < 1 || parts[2] > 12 || parts[3] < 1 || parts[3] > 31)
|
|
return -1
|
|
return mktime(parts[1]" "parts[2]" "parts[3]" 00 00 00")
|
|
}
|
|
|
|
BEGIN {
|
|
if (start_date != "" && date_to_epoch(start_date) == -1 ||
|
|
end_date != "" && date_to_epoch(end_date) == -1)
|
|
exit 1
|
|
}
|
|
{
|
|
include_line = 0
|
|
|
|
# Datumserkennung und Formatierung
|
|
if (match($0, /([0-9]{4}[-\/][0-9]{2}[-\/][0-9]{2})/, date_match)) {
|
|
current_date = date_match[1]
|
|
gsub(/[\/]/, "-", current_date) # Standardisiert auf YYYY-MM-DD
|
|
|
|
first_date = first_date == "" ? current_date : first_date
|
|
last_date = current_date
|
|
|
|
current_epoch = date_to_epoch(current_date)
|
|
if (current_epoch != -1 && (
|
|
start_date == "" || date_to_epoch(start_date) <= current_epoch) &&
|
|
(end_date == "" || end_date >= current_epoch))
|
|
include_line = 1
|
|
}
|
|
}
|
|
include_line && /Traffic Relayed ↓ [0-9]+ KB .*↑ [0-9]+ KB/ {
|
|
if (match($0, /↓ ([0-9]+) KB.*↑ ([0-9]+) KB/, traffic)) {
|
|
down += traffic[1]
|
|
up += traffic[2]
|
|
}
|
|
}
|
|
END {
|
|
printf "Statistik-Zeitraum:\nErster Eintrag: %s\nLetzter Eintrag: %s\n", first_date, last_date
|
|
if (start_date != "" || end_date != "") {
|
|
printf "\nGefilterter Bereich: %s bis %s\n",
|
|
start_date == "" ? "Anfang" : start_date,
|
|
end_date == "" ? "Ende" : end_date
|
|
}
|
|
printf "\nGesamte Datenmengen:\nDownload: %d KB (%s)\nUpload: %d KB (%s)\n", down, human_readable(down), up, human_readable(up)
|
|
}
|
|
' |