Analytics: Laenderzuordnung
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3a48e6e677
commit
8b107019c3
4 files changed
+297
-2
No files matched your search
Executable
+48
@@ -0,0 +1,48 @@
|
||||
#!/bin/sh
|
||||
# Lädt die aktuelle DB-IP-Lite-Länderdatei (monatlich) nach $ANALYTICS_DATA_DIR/geo.csv und startet
|
||||
# den Dienst nur neu, wenn sich die Datei geändert hat. Läuft auf dem Host (z. B. per Cron, 1x pro Woche).
|
||||
# Die alte geo.csv wird nie gelöscht, bevor die neue geprüft und umbenannt ist.
|
||||
set -eu
|
||||
|
||||
DIR="${ANALYTICS_DATA_DIR:-/srv/webklar-analytics}"
|
||||
CONTAINER="${ANALYTICS_CONTAINER:-webklar-analytics}"
|
||||
NEU="$DIR/geo.csv.new"
|
||||
ZIEL="$DIR/geo.csv"
|
||||
|
||||
fehler() { echo "Fehler (geo-update): $*" >&2; rm -f "$NEU" "$NEU.gz"; exit 1; }
|
||||
|
||||
command -v curl >/dev/null 2>&1 || fehler "curl fehlt."
|
||||
command -v gunzip >/dev/null 2>&1 || fehler "gunzip fehlt."
|
||||
[ -d "$DIR" ] || fehler "Datenverzeichnis $DIR existiert nicht."
|
||||
|
||||
JETZT="$(date -u +%Y-%m)"
|
||||
JAHR="${JETZT%-*}"
|
||||
MONAT="${JETZT#*-}"
|
||||
m="$(printf '%s' "$MONAT" | sed 's/^0//')"
|
||||
if [ "$m" -eq 1 ]; then VORMONAT="$((JAHR - 1))-12"; else VORMONAT="$JAHR-$(printf '%02d' "$((m - 1))")"; fi
|
||||
|
||||
geladen=""
|
||||
for monat in "$JETZT" "$VORMONAT"; do
|
||||
url="https://download.db-ip.com/free/dbip-country-lite-$monat.csv.gz"
|
||||
if curl -fsSL --retry 2 --max-time 300 -o "$NEU.gz" "$url" 2>/dev/null && gunzip -c "$NEU.gz" > "$NEU" 2>/dev/null; then
|
||||
geladen="$monat"
|
||||
break
|
||||
fi
|
||||
done
|
||||
rm -f "$NEU.gz"
|
||||
[ -n "$geladen" ] || fehler "Download von DB-IP fehlgeschlagen (weder $JETZT noch $VORMONAT). Bestehende geo.csv bleibt unverändert."
|
||||
|
||||
zeilen="$(wc -l < "$NEU" | tr -d ' ')"
|
||||
[ "$zeilen" -gt 100000 ] || fehler "Neue Datei hat nur $zeilen Zeilen (erwartet > 100000). Bestehende geo.csv bleibt unverändert."
|
||||
grep -Eq ',"?DE"?\r?$' "$NEU" || fehler "Neue Datei enthält kein 'DE'. Bestehende geo.csv bleibt unverändert."
|
||||
|
||||
if [ -f "$ZIEL" ] && cmp -s "$NEU" "$ZIEL"; then
|
||||
rm -f "$NEU"
|
||||
echo "geo.csv ($geladen) unverändert, kein Neustart nötig."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
mv -f "$NEU" "$ZIEL"
|
||||
echo "geo.csv aktualisiert ($geladen, $zeilen Zeilen)."
|
||||
docker restart "$CONTAINER" >/dev/null || fehler "Neustart von $CONTAINER fehlgeschlagen (geo.csv ist aber aktualisiert)."
|
||||
echo "$CONTAINER neu gestartet."
|
||||
Reference in new issue
Block a user