Revert "SnowflakeTraffic.sh aktualisiert"

This reverts commit 17a011485f0a084a0661e9acfaf4bf2424efb4aa.
This commit is contained in:
Tim Peters 2025-05-22 12:58:07 +02:00
parent 17a011485f
commit 8728f1f593

View File

@ -8,6 +8,7 @@ END_DATE="${2:-}"
# Validierung der Datumseingaben # Validierung der Datumseingaben
validate_date() { validate_date() {
local date="$1" local date="$1"
[[ -z "$date" ]] && return 0
if [[ ! "$date" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then 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 echo "Fehler: Ungültiges Datumsformat für '$date' (erwartet: YYYY-MM-DD)" >&2
exit 1 exit 1
@ -17,60 +18,81 @@ validate_date() {
validate_date "$START_DATE" validate_date "$START_DATE"
validate_date "$END_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" ' docker logs snowflake-proxy 2>&1 | awk -v start_date="$START_DATE" -v end_date="$END_DATE" '
function human_readable(kb) { function human_readable(kb, units, size, i) {
units = split("KB MB GB TB PB", unit_array) split("KB MB GB TB PB", units)
size = kb size = kb
for (i = 1; size >= 1024 && i < units; i++) { for (i = 1; size >= 1024 && i <= length(units); i++) {
size /= 1024 size = size / 1024
} }
return sprintf("%.2f %s", size, unit_array[i]) return sprintf("%.2f %s", size, units[i])
} }
function date_to_epoch(date_str) { function date_to_epoch(date_str, parts) {
if (split(date_str, parts, /[-\/]/) != 3 || parts[1] < 1970 || if (split(date_str, parts, /[-\/]/) != 3) return -1
parts[2] < 1 || parts[2] > 12 || parts[3] < 1 || parts[3] > 31) if (parts[1] < 1970 || parts[2] < 1 || parts[2] > 12 || parts[3] < 1 || parts[3] > 31) return -1
return -1
return mktime(parts[1] " " parts[2] " " parts[3] " 00 00 00") return mktime(parts[1] " " parts[2] " " parts[3] " 00 00 00")
} }
BEGIN { BEGIN {
if (start_date != "" && date_to_epoch(start_date) == -1 || if (start_date != "" && date_to_epoch(start_date) == -1) {
end_date != "" && date_to_epoch(end_date) == -1) print "Ungültiges Startdatum Format" > "/dev/stderr"
exit 1 exit 1
} }
if (end_date != "" && date_to_epoch(end_date) == -1) {
print "Ungültiges Enddatum Format" > "/dev/stderr"
exit 1
}
}
{ {
include_line = 0 include_line = 0 # Zurücksetzen bei jeder neuen Zeile
# Datumserkennung und Formatierung # Datumserkennung und Formatierung
if (match($0, /([0-9]{4}[-\/][0-9]{2}[-\/][0-9]{2})/, date_match)) { if (match($0, /([0-9]{4}[-\/][0-9]{2}[-\/][0-9]{2})/, date_match)) {
current_date = date_match[1] current_date = date_match[1]
gsub(/[\/]/, "-", current_date) # Standardisiert auf YYYY-MM-DD gsub(/[\/]/, "-", current_date) # Standardisiert auf YYYY-MM-DD
first_date = first_date == "" ? current_date : first_date if (!first_date) first_date = current_date
last_date = current_date last_date = current_date
current_epoch = date_to_epoch(current_date) current_epoch = date_to_epoch(current_date)
if (current_epoch != -1 && ( if (current_epoch == -1) next # Ungültiges Datum überspringen
start_date == "" || date_to_epoch(start_date) <= current_epoch) &&
(end_date == "" || end_date >= current_epoch))
include_line = 1 include_line = 1
if (start_date != "") {
start_epoch = date_to_epoch(start_date)
if (current_epoch < start_epoch) include_line = 0
}
if (end_date != "" && include_line) {
end_epoch = date_to_epoch(end_date)
if (current_epoch > end_epoch) include_line = 0
} }
} }
}
include_line && /Traffic Relayed ↓ [0-9]+ KB .*↑ [0-9]+ KB/ { include_line && /Traffic Relayed ↓ [0-9]+ KB .*↑ [0-9]+ KB/ {
# Sicherere Extraktion der Werte mit regulären Ausdrücken
if (match($0, /↓ ([0-9]+) KB.*↑ ([0-9]+) KB/, traffic)) { if (match($0, /↓ ([0-9]+) KB.*↑ ([0-9]+) KB/, traffic)) {
down += traffic[1] down += traffic[1]
up += traffic[2] up += traffic[2]
} }
} }
END { END {
printf "Statistik-Zeitraum:\nErster Eintrag: %s\nLetzter Eintrag: %s\n", first_date, last_date printf "Statistik-Zeitraum:\n"
printf "Erster Eintrag: %s\n", first_date
printf "Letzter Eintrag: %s\n", last_date
if (start_date != "" || end_date != "") { if (start_date != "" || end_date != "") {
printf "\nGefilterter Bereich: %s bis %s\n", printf "Gefilterter Bereich: %s bis %s\n\n",
start_date == "" ? "Anfang" : start_date, (start_date != "" ? start_date : "Anfang"),
end_date == "" ? "Ende" : end_date (end_date != "" ? end_date : "Ende")
} }
printf "\nGesamte Datenmengen:\nDownload: %d KB (%s)\nUpload: %d KB (%s)\n", down, human_readable(down), up, human_readable(up)
} printf "\nGesamte Datenmengen:\n"
' printf "Download: %d KB (%s)\n", down, human_readable(down)
printf "Upload: %d KB (%s)\n", up, human_readable(up)
}'