Übersicht über die Domains, die am meisten Traffic innerhalb eines Monats hatten.
Die Größenangaben beziehen sich auf die komrimierten Logfiles
show_top_domains.sh
#!/bin/bash
# show_top_domains.sh
#$Revision: 1.4 $
# Dieses Skript gibt die Top 10 der größten Domains basierend auf der Logfile-Größe eines gesamten Monats aus.
# Der Monat, den wir analysieren wollen (z.B. "202407" für Juli 2024)
log_month="202407"
# Funktion für die animierte Darstellung
animate_progress() {
#local chars="/-\|" die sicherste Varianten
#local chars=":;." sind diese ersten beiden
# UTF-8 kann funktionieren, wenn die Anmation kaputt aussieht nimm eins der beiden ersten
local chars="◐◓◑◒"
local chars="◐◓◑◒ ● ○ "
local chars="▁▂▃▄▅▆▇█▇▆▅▄▃▂▁"
#local chars="▖▘▝▗"
#local chars="⚫⚪"
#local chars=("● ○")
while :; do
for (( i=0; i<${#chars}; i++ )); do
echo -en "\r${chars:$i:1} "
sleep 0.2
done
done
}
# Starte die Animation im Hintergrund
animate_progress &
# Speichere die Prozess-ID der Animation
ANIMATE_PID=$!
# Sorge dafür, dass die Animation beim Beenden des Skripts auch beendet wird
trap "kill $ANIMATE_PID >/dev/null 2>&1" EXIT
# Finde die Logfiles des gesamten Monats und summiere die Größen pro Webnummer
declare -A web_sizes
while IFS= read -r line; do
size=$(echo "$line" | awk '{print $7}')
web=$(echo "$line" | awk -F'/' '{print $6}')
web_sizes["$web"]=$((web_sizes["$web"] + size))
done < <(find /var/www/clients/ -name "$log_month*-access.log*" -ls)
# Sortiere die Webnummern nach der Gesamtsumme der Logfile-Größen und beschränke auf die Top 10
top_webs=$(for web in "${!web_sizes[@]}"; do
echo "${web_sizes[$web]} $web"
done | sort -rn | head -n 10 | awk '{print $2}')
# Initialisiere eine leere Variable für die Ergebnisse
# das "\r" überschreibt das letzte animate zeichen
result="\rTop 10 Domains nach Logfile-Größe für den Monat $log_month:\n"
result+="-------------------------------------------------------\n"
# Schleife über die Top-Webnummern, um die zugehörigen Domainnamen aus der Datenbank zu holen
for web in $top_webs; do
domain=$(echo "use dbispconfig;
SELECT DISTINCT domain
FROM web_domain
WHERE system_user = \"$web\";
" | mysql -S /var/run/mysqld/mysqld.sock --skip-column-names)
size_bytes=${web_sizes[$web]}
size_mb=$(echo "scale=2; $size_bytes / 1048576" | bc) # Umrechnung in MB
# Ausgabe formatieren
formatted_line=$(LC_NUMERIC=C printf "%-15s %-30s (Größe: %6.2f MB)" "$web:" "$domain" "$size_mb")
# Hinzufügen der formatierten Zeile zum Ergebnis
result+="$formatted_line\n"
done
# Ausgabe der Top 10 Domains
echo -e "$result"