最後活躍 1 month ago

修訂 928917476fa89693a715532e3ede3a4389146b3c

compare-umami-npm.sh 原始檔案
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
8NPM_PATH="/home/docker/nginx_proxy/data/nginx/proxy_host/"
9OUT_DIR="$(pwd)"
10INVALID_FILE="$OUT_DIR/npm_invalid.txt"
11
12# --- Vérification des fichiers NPM ---
13echo "[+] Vérification des fichiers NPM..."
14> "$INVALID_FILE"
15for 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
22done
23
24# --- Extraction NPM (valide uniquement) ---
25echo "[+] Extraction des sites NPM..."
26> "$OUT_DIR/npm_sites.txt"
27
28for 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
35done
36
37sort -u "$OUT_DIR/npm_sites.txt" -o "$OUT_DIR/npm_sites.txt"
38
39# --- Nettoyage avant fusion ---
40grep -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 ---
43echo "[+] Extraction des sites Umami (PostgreSQL)..."
44docker 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
47grep -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
51grep -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 ---
54echo "[+] Fusion des deux listes..."
55echo "UUID | NPM_SITE | CONF_FILE | UMAMI_SITE" > "$OUT_DIR/merged_sites.txt"
56echo "----------------------------------------------------------------" >> "$OUT_DIR/merged_sites.txt"
57
58join -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é ---
64echo
65echo "=== Résumé ==="
66echo "→ NPM valides : $OUT_DIR/npm_sites.txt"
67echo "→ NPM invalides : $OUT_DIR/npm_invalid.txt"
68echo "→ Umami : $OUT_DIR/umami_sites.txt"
69echo "→ Fusion : $OUT_DIR/merged_sites.txt"
70echo
71echo "✅ IDs présents dans les deux = deux noms affichés"
72echo "❌ Champ vide = site manquant d’un côté"
73echo
74echo "=== Résultat du fichier fusionné ==="
75echo
76column -t -s'|' "$OUT_DIR/merged_sites.txt"
77
78# --- Tableau séparé : fichiers NPM invalides ---
79if [[ -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"
86else
87 echo
88 echo "✅ Aucun fichier NPM vide détecté."
89fi
90