compare-umami-npm.sh
· 3.4 KiB · Bash
Brut
#!/bin/bash
# ==========================================================
# Compare les data-website-id entre Nginx Proxy Manager (NPM)
# et Umami (PostgreSQL)
# !!! UMAMI and NPM need to be in DOCKER !!!!!
# ==========================================================
NPM_PATH="/home/docker/nginx_proxy/data/nginx/proxy_host/"
OUT_DIR="$(pwd)"
INVALID_FILE="$OUT_DIR/npm_invalid.txt"
# --- Vérification des fichiers NPM ---
echo "[+] Vérification des fichiers NPM..."
> "$INVALID_FILE"
for f in "$NPM_PATH"/*.conf; do
id=$(grep -o 'data-website-id="[a-f0-9-]*"' "$f" | sed -E 's/.*="([a-f0-9-]+)".*/\1/')
name=$(grep -m2 '^# ' "$f" | tail -n1 | grep -v -- '------------------------------------------------------------' | sed 's/^# //')
num=$(basename "$f")
if [[ -n "$id" && -z "$name" ]]; then
echo "$id | (vide) | $num" >> "$INVALID_FILE"
fi
done
# --- Extraction NPM (valide uniquement) ---
echo "[+] Extraction des sites NPM..."
> "$OUT_DIR/npm_sites.txt"
for file in "$NPM_PATH"/*.conf; do
site=$(grep -m2 '^# ' "$file" | tail -n1 | grep -v -- '------------------------------------------------------------' | sed 's/^# //')
id=$(grep -o 'data-website-id="[a-f0-9-]*"' "$file" | sed -E 's/.*="([a-f0-9-]+)".*/\1/')
conf=$(basename "$file")
if [[ -n "$id" && -n "$site" && "$site" != "------------------------------------------------------------" ]]; then
echo "$id | $site | $conf" >> "$OUT_DIR/npm_sites.txt"
fi
done
sort -u "$OUT_DIR/npm_sites.txt" -o "$OUT_DIR/npm_sites.txt"
# --- Nettoyage avant fusion ---
grep -E '[0-9a-f-]{8}-' "$OUT_DIR/npm_sites.txt" | grep '|' > "$OUT_DIR/npm_sites.tmp" && mv "$OUT_DIR/npm_sites.tmp" "$OUT_DIR/npm_sites.txt"
# --- Extraction Umami ---
echo "[+] Extraction des sites Umami (PostgreSQL)..."
docker exec -t umami-db psql -U umami -d umami -P pager=off \
-c "SELECT website_id, name FROM website;" > "$OUT_DIR/umami_sites_raw.txt"
grep -oE '[0-9a-f-]{36} *\| *[A-Za-z0-9._-]+' "$OUT_DIR/umami_sites_raw.txt" \
| sed 's/ *| */ | /' | sort -u > "$OUT_DIR/umami_sites.txt"
# Nettoyage des lignes Umami vides ou invalides
grep -E '[0-9a-f-]{8}-' "$OUT_DIR/umami_sites.txt" | grep '|' > "$OUT_DIR/umami_sites.tmp" && mv "$OUT_DIR/umami_sites.tmp" "$OUT_DIR/umami_sites.txt"
# --- Fusion ---
echo "[+] Fusion des deux listes..."
echo "UUID | NPM_SITE | CONF_FILE | UMAMI_SITE" > "$OUT_DIR/merged_sites.txt"
echo "----------------------------------------------------------------" >> "$OUT_DIR/merged_sites.txt"
join -t'|' -a1 -a2 -e" " -o '0,1.2,1.3,2.2' \
<(sort -t'|' -k1,1 "$OUT_DIR/npm_sites.txt") \
<(sort -t'|' -k1,1 "$OUT_DIR/umami_sites.txt") \
>> "$OUT_DIR/merged_sites.txt"
# --- Résumé ---
echo
echo "=== Résumé ==="
echo "→ NPM valides : $OUT_DIR/npm_sites.txt"
echo "→ NPM invalides : $OUT_DIR/npm_invalid.txt"
echo "→ Umami : $OUT_DIR/umami_sites.txt"
echo "→ Fusion : $OUT_DIR/merged_sites.txt"
echo
echo "✅ IDs présents dans les deux = deux noms affichés"
echo "❌ Champ vide = site manquant d’un côté"
echo
echo "=== Résultat du fichier fusionné ==="
echo
column -t -s'|' "$OUT_DIR/merged_sites.txt"
# --- Tableau séparé : fichiers NPM invalides ---
if [[ -s "$INVALID_FILE" ]]; then
echo
echo "=== FICHIERS NPM SANS NOM DE DOMAINE VALIDE ==="
echo
echo "UUID | NPM_SITE | CONF_FILE"
echo "-------------------------------------------"
column -t -s'|' "$INVALID_FILE"
else
echo
echo "✅ Aucun fichier NPM vide détecté."
fi
| 1 | #!/bin/bash |
| 2 | # ========================================================== |
| 3 | # Compare les data-website-id entre Nginx Proxy Manager (NPM) |
| 4 | # et Umami (PostgreSQL) |
| 5 | # !!! UMAMI and NPM need to be in DOCKER !!!!! |
| 6 | # ========================================================== |
| 7 | |
| 8 | NPM_PATH="/home/docker/nginx_proxy/data/nginx/proxy_host/" |
| 9 | OUT_DIR="$(pwd)" |
| 10 | INVALID_FILE="$OUT_DIR/npm_invalid.txt" |
| 11 | |
| 12 | # --- Vérification des fichiers NPM --- |
| 13 | echo "[+] Vérification des fichiers NPM..." |
| 14 | > "$INVALID_FILE" |
| 15 | for f in "$NPM_PATH"/*.conf; do |
| 16 | id=$(grep -o 'data-website-id="[a-f0-9-]*"' "$f" | sed -E 's/.*="([a-f0-9-]+)".*/\1/') |
| 17 | name=$(grep -m2 '^# ' "$f" | tail -n1 | grep -v -- '------------------------------------------------------------' | sed 's/^# //') |
| 18 | num=$(basename "$f") |
| 19 | if [[ -n "$id" && -z "$name" ]]; then |
| 20 | echo "$id | (vide) | $num" >> "$INVALID_FILE" |
| 21 | fi |
| 22 | done |
| 23 | |
| 24 | # --- Extraction NPM (valide uniquement) --- |
| 25 | echo "[+] Extraction des sites NPM..." |
| 26 | > "$OUT_DIR/npm_sites.txt" |
| 27 | |
| 28 | for file in "$NPM_PATH"/*.conf; do |
| 29 | site=$(grep -m2 '^# ' "$file" | tail -n1 | grep -v -- '------------------------------------------------------------' | sed 's/^# //') |
| 30 | id=$(grep -o 'data-website-id="[a-f0-9-]*"' "$file" | sed -E 's/.*="([a-f0-9-]+)".*/\1/') |
| 31 | conf=$(basename "$file") |
| 32 | if [[ -n "$id" && -n "$site" && "$site" != "------------------------------------------------------------" ]]; then |
| 33 | echo "$id | $site | $conf" >> "$OUT_DIR/npm_sites.txt" |
| 34 | fi |
| 35 | done |
| 36 | |
| 37 | sort -u "$OUT_DIR/npm_sites.txt" -o "$OUT_DIR/npm_sites.txt" |
| 38 | |
| 39 | # --- Nettoyage avant fusion --- |
| 40 | grep -E '[0-9a-f-]{8}-' "$OUT_DIR/npm_sites.txt" | grep '|' > "$OUT_DIR/npm_sites.tmp" && mv "$OUT_DIR/npm_sites.tmp" "$OUT_DIR/npm_sites.txt" |
| 41 | |
| 42 | # --- Extraction Umami --- |
| 43 | echo "[+] Extraction des sites Umami (PostgreSQL)..." |
| 44 | docker exec -t umami-db psql -U umami -d umami -P pager=off \ |
| 45 | -c "SELECT website_id, name FROM website;" > "$OUT_DIR/umami_sites_raw.txt" |
| 46 | |
| 47 | grep -oE '[0-9a-f-]{36} *\| *[A-Za-z0-9._-]+' "$OUT_DIR/umami_sites_raw.txt" \ |
| 48 | | sed 's/ *| */ | /' | sort -u > "$OUT_DIR/umami_sites.txt" |
| 49 | |
| 50 | # Nettoyage des lignes Umami vides ou invalides |
| 51 | grep -E '[0-9a-f-]{8}-' "$OUT_DIR/umami_sites.txt" | grep '|' > "$OUT_DIR/umami_sites.tmp" && mv "$OUT_DIR/umami_sites.tmp" "$OUT_DIR/umami_sites.txt" |
| 52 | |
| 53 | # --- Fusion --- |
| 54 | echo "[+] Fusion des deux listes..." |
| 55 | echo "UUID | NPM_SITE | CONF_FILE | UMAMI_SITE" > "$OUT_DIR/merged_sites.txt" |
| 56 | echo "----------------------------------------------------------------" >> "$OUT_DIR/merged_sites.txt" |
| 57 | |
| 58 | join -t'|' -a1 -a2 -e" " -o '0,1.2,1.3,2.2' \ |
| 59 | <(sort -t'|' -k1,1 "$OUT_DIR/npm_sites.txt") \ |
| 60 | <(sort -t'|' -k1,1 "$OUT_DIR/umami_sites.txt") \ |
| 61 | >> "$OUT_DIR/merged_sites.txt" |
| 62 | |
| 63 | # --- Résumé --- |
| 64 | echo |
| 65 | echo "=== Résumé ===" |
| 66 | echo "→ NPM valides : $OUT_DIR/npm_sites.txt" |
| 67 | echo "→ NPM invalides : $OUT_DIR/npm_invalid.txt" |
| 68 | echo "→ Umami : $OUT_DIR/umami_sites.txt" |
| 69 | echo "→ Fusion : $OUT_DIR/merged_sites.txt" |
| 70 | echo |
| 71 | echo "✅ IDs présents dans les deux = deux noms affichés" |
| 72 | echo "❌ Champ vide = site manquant d’un côté" |
| 73 | echo |
| 74 | echo "=== Résultat du fichier fusionné ===" |
| 75 | echo |
| 76 | column -t -s'|' "$OUT_DIR/merged_sites.txt" |
| 77 | |
| 78 | # --- Tableau séparé : fichiers NPM invalides --- |
| 79 | if [[ -s "$INVALID_FILE" ]]; then |
| 80 | echo |
| 81 | echo "=== FICHIERS NPM SANS NOM DE DOMAINE VALIDE ===" |
| 82 | echo |
| 83 | echo "UUID | NPM_SITE | CONF_FILE" |
| 84 | echo "-------------------------------------------" |
| 85 | column -t -s'|' "$INVALID_FILE" |
| 86 | else |
| 87 | echo |
| 88 | echo "✅ Aucun fichier NPM vide détecté." |
| 89 | fi |
| 90 |