Skip to content

Commit 7e36daa

Browse files
committed
add mode serve-import
1 parent f023c87 commit 7e36daa

File tree

1 file changed

+47
-14
lines changed

1 file changed

+47
-14
lines changed

docker-entrypoint.sh

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@ echo "=== [Entrypoint] Initialisation du container ==="
66
# Usage: docker run ... <image> [mode]
77
# Modes:
88
# import - run import_data_dashboard.R then exit (useful for data-only runs)
9-
# serve - attempt non-blocking import then start `quarto serve` (default)
9+
# serve - start quarto serve WITHOUT importing (assumes data exists)
10+
# serve-import - attempt import then start quarto serve (safe: keeps old data on failure)
1011
# help - show this message
1112

12-
MODE="${1:-serve}"
13+
MODE="${1:-serve-import}"
1314
shift || true
1415

1516
# Fichier témoin pour indiquer que des données valides existent
1617
DATA_MARKER="/data/.data_imported"
18+
# Fichier pour tracer la dernière tentative d'import
19+
LAST_IMPORT="/data/.last_import_attempt"
1720

1821
run_import() {
1922
if [ -f "import_data_dashboard.R" ]; then
@@ -24,15 +27,16 @@ run_import() {
2427
echo "=== Sauvegarde des données existantes ==="
2528
BACKUP_DIR="/data/.backup_$(date +%Y%m%d_%H%M%S)"
2629
mkdir -p "$BACKUP_DIR"
27-
# Copier tous les fichiers sauf les backups
28-
find /data -maxdepth 1 -type f ! -path "*/.*" -exec cp {} "$BACKUP_DIR/" \; 2>/dev/null || true
30+
# Copier tous les fichiers sauf les backups et fichiers cachés système
31+
find /data -maxdepth 1 -type f ! -name ".*" -exec cp {} "$BACKUP_DIR/" \; 2>/dev/null || true
2932
echo "Sauvegarde créée dans : $BACKUP_DIR"
3033
fi
3134

3235
if R -e "source('import_data_dashboard.R')" ; then
3336
echo "=== Importation des données : OK ==="
3437
# Marquer l'import comme réussi
3538
touch "$DATA_MARKER"
39+
date +%s > "$LAST_IMPORT"
3640
# Nettoyer les anciennes sauvegardes (garder les 3 plus récentes)
3741
if [ -d "/data" ]; then
3842
ls -dt /data/.backup_* 2>/dev/null | tail -n +4 | xargs rm -rf 2>/dev/null || true
@@ -71,8 +75,19 @@ serve_qmd() {
7175
exit 1
7276
fi
7377

78+
# Vérifier que des données existent avant de lancer le serveur
79+
if [ ! -f "$DATA_MARKER" ]; then
80+
echo "ERREUR : Aucune donnée importée détectée."
81+
echo "Veuillez d'abord exécuter le mode 'import' ou 'serve-import'."
82+
exit 1
83+
fi
84+
7485
echo "=== Lancement du serveur Quarto/Shiny ==="
7586
echo "Fichier : $QMD_FILE"
87+
if [ -f "$LAST_IMPORT" ]; then
88+
LAST_DATE=$(date -d "@$(cat $LAST_IMPORT)" "+%Y-%m-%d %H:%M:%S" 2>/dev/null || echo "inconnue")
89+
echo "Dernière importation réussie : $LAST_DATE"
90+
fi
7691
exec quarto serve "$QMD_FILE" --port 3838 --host 0.0.0.0
7792
}
7893

@@ -90,8 +105,14 @@ case "$MODE" in
90105
;;
91106

92107
serve)
93-
# En mode serve, on tente l'import mais on continue même en cas d'échec
94-
# si des données valides existent déjà
108+
# Mode serve pur : ne fait PAS d'import, démarre directement
109+
echo "=== Mode SERVE : démarrage sans import ==="
110+
serve_qmd
111+
;;
112+
113+
serve-import)
114+
# Mode serve avec import : tente l'import puis démarre le serveur
115+
echo "=== Mode SERVE-IMPORT : import puis démarrage ==="
95116
run_import || {
96117
EXIT_CODE=$?
97118
if [ "$EXIT_CODE" -eq 1 ]; then
@@ -105,20 +126,32 @@ case "$MODE" in
105126
;;
106127

107128
help|-h|--help)
108-
sed -n '1,200p' "$0" | sed -n '1,80p'
109-
echo
110-
echo "Usage: docker run ... <image> [import|serve]"
129+
echo "Usage: docker run ... <image> [mode]"
130+
echo ""
131+
echo "Modes disponibles:"
132+
echo " import - Exécute uniquement l'import puis quitte"
133+
echo " (avec sauvegarde/restauration automatique)"
134+
echo ""
135+
echo " serve - Lance UNIQUEMENT le serveur Quarto/Shiny"
136+
echo " (sans import, suppose que les données existent)"
137+
echo ""
138+
echo " serve-import - Import PUIS lance le serveur (défaut)"
139+
echo " (sécurisé : garde les anciennes données si échec)"
140+
echo ""
141+
echo " help - Affiche ce message"
142+
echo ""
143+
echo "Workflow recommandé:"
144+
echo " 1. docker run --rm <image> import # Import initial"
145+
echo " 2. docker run <image> serve # Démarre l'app (pas de ré-import)"
111146
echo ""
112-
echo "Modes:"
113-
echo " import - Exécute uniquement l'import (avec sauvegarde automatique)"
114-
echo " serve - Lance l'application (tente l'import, utilise les données existantes si échec)"
115-
echo " help - Affiche ce message"
147+
echo " OU en une seule commande:"
148+
echo " docker run <image> serve-import # Import + serve en une fois"
116149
exit 0
117150
;;
118151

119152
*)
120153
echo "Mode inconnu: $MODE"
121-
echo "Usage: docker run ... <image> [import|serve]"
154+
echo "Utilisez 'help' pour voir les modes disponibles."
122155
exit 2
123156
;;
124157
esac

0 commit comments

Comments
 (0)