#!/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) } '