#!/bin/bash # Script de maintenance BlindBit Oracle # Fournit un menu interactif pour les opérations de maintenance set -e # Configuration CONTAINER_NAME="blindbit-oracle" LOG_DIR="/home/debian/4NK_env/logs/blindbit" CONFIG_DIR="/home/debian/4NK_env/confs/lecoffre_node/blindbit-oracle" # Couleurs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' # Fonction pour afficher le menu show_menu() { echo -e "${CYAN}=== Maintenance BlindBit Oracle ===${NC}" echo "" echo -e "${BLUE}1.${NC} Vérifier le statut du service" echo -e "${BLUE}2.${NC} Redémarrer le service" echo -e "${BLUE}3.${NC} Voir les logs en temps réel" echo -e "${BLUE}4.${NC} Tester l'API" echo -e "${BLUE}5.${NC} Collecter les logs" echo -e "${BLUE}6.${NC} Vérifier la configuration" echo -e "${BLUE}7.${NC} Vérifier les ports d'écoute" echo -e "${BLUE}8.${NC} Vérifier la synchronisation" echo -e "${BLUE}9.${NC} Nettoyer les logs anciens" echo -e "${BLUE}10.${NC} Sauvegarder la configuration" echo -e "${BLUE}11.${NC} Restaurer la configuration" echo -e "${BLUE}12.${NC} Mettre à jour l'image" echo -e "${BLUE}0.${NC} Quitter" echo "" } # Fonction pour vérifier le statut check_status() { echo -e "${BLUE}=== Statut BlindBit Oracle ===${NC}" if docker ps --format '{{.Names}}' | grep -q "$CONTAINER_NAME"; then echo -e "${GREEN}✓ Conteneur en cours d'exécution${NC}" echo "Image: $(docker inspect --format='{{.Config.Image}}' "$CONTAINER_NAME")" echo "Statut: $(docker inspect --format='{{.State.Status}}' "$CONTAINER_NAME")" echo "Uptime: $(docker inspect --format='{{.State.StartedAt}}' "$CONTAINER_NAME")" # Test de l'API echo -e "\n${BLUE}Test de l'API:${NC}" if curl -s -o /dev/null -w '%{http_code}' http://localhost:8000/tweaks/1 | grep -q "200"; then echo -e "${GREEN}✓ API accessible${NC}" else echo -e "${RED}✗ API non accessible${NC}" fi else echo -e "${RED}✗ Conteneur non trouvé${NC}" fi } # Fonction pour redémarrer le service restart_service() { echo -e "${BLUE}=== Redémarrage BlindBit Oracle ===${NC}" if docker ps --format '{{.Names}}' | grep -q "$CONTAINER_NAME"; then echo "Arrêt du service..." docker stop "$CONTAINER_NAME" echo "Démarrage du service..." docker start "$CONTAINER_NAME" echo -e "${GREEN}Service redémarré${NC}" else echo -e "${RED}Conteneur non trouvé${NC}" fi } # Fonction pour voir les logs show_logs() { echo -e "${BLUE}=== Logs BlindBit Oracle (Ctrl+C pour arrêter) ===${NC}" docker logs -f "$CONTAINER_NAME" } # Fonction pour tester l'API test_api() { echo -e "${BLUE}=== Test API BlindBit Oracle ===${NC}" echo "Test endpoint /tweaks/1:" curl -s -w "\nHTTP Code: %{http_code}\nTime: %{time_total}s\n" http://localhost:8000/tweaks/1 || echo "API non accessible" echo -e "\nTest endpoint /info:" curl -s -w "\nHTTP Code: %{http_code}\nTime: %{time_total}s\n" http://localhost:8000/info || echo "API info non accessible" echo -e "\nTest endpoint /block-height:" curl -s -w "\nHTTP Code: %{http_code}\nTime: %{time_total}s\n" http://localhost:8000/block-height || echo "API block-height non accessible" } # Fonction pour collecter les logs collect_logs() { echo -e "${BLUE}=== Collecte des logs ===${NC}" /home/debian/4NK_env/scripts/lecoffre_node/collect-blindbit-logs.sh } # Fonction pour vérifier la configuration check_config() { echo -e "${BLUE}=== Configuration BlindBit Oracle ===${NC}" echo "Configuration dans le conteneur:" docker exec "$CONTAINER_NAME" cat /root/.blindbit-oracle/blindbit.toml 2>/dev/null || echo "Configuration non accessible" echo -e "\nConfiguration sur l'hôte:" cat "$CONFIG_DIR/blindbit.toml" 2>/dev/null || echo "Configuration hôte non accessible" } # Fonction pour vérifier les ports check_ports() { echo -e "${BLUE}=== Ports d'écoute BlindBit Oracle ===${NC}" docker exec "$CONTAINER_NAME" netstat -tlnp 2>/dev/null || echo "netstat non disponible" } # Fonction pour vérifier la synchronisation check_sync() { echo -e "${BLUE}=== Synchronisation BlindBit Oracle ===${NC}" echo "Derniers logs de synchronisation:" docker logs "$CONTAINER_NAME" 2>&1 | grep -E "(sync|Sync|block|Block)" | tail -10 echo -e "\nDerniers blocs traités:" docker logs "$CONTAINER_NAME" 2>&1 | grep -E "successfully processed block" | tail -5 } # Fonction pour nettoyer les logs clean_logs() { echo -e "${BLUE}=== Nettoyage des logs anciens ===${NC}" if [ -d "$LOG_DIR" ]; then echo "Suppression des logs plus anciens que 7 jours..." find "$LOG_DIR" -name "*.log" -mtime +7 -delete find "$LOG_DIR" -name "*.txt" -mtime +7 -delete find "$LOG_DIR" -name "*.toml" -mtime +7 -delete echo -e "${GREEN}Nettoyage terminé${NC}" else echo -e "${YELLOW}Répertoire de logs non trouvé${NC}" fi } # Fonction pour sauvegarder la configuration backup_config() { echo -e "${BLUE}=== Sauvegarde de la configuration ===${NC}" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_FILE="$CONFIG_DIR/blindbit_${TIMESTAMP}.toml" if [ -f "$CONFIG_DIR/blindbit.toml" ]; then cp "$CONFIG_DIR/blindbit.toml" "$BACKUP_FILE" echo -e "${GREEN}Configuration sauvegardée: $BACKUP_FILE${NC}" else echo -e "${RED}Configuration non trouvée${NC}" fi } # Fonction pour restaurer la configuration restore_config() { echo -e "${BLUE}=== Restauration de la configuration ===${NC}" echo "Configurations disponibles:" ls -la "$CONFIG_DIR"/blindbit_*.toml 2>/dev/null || echo "Aucune sauvegarde trouvée" echo -e "\nEntrez le nom du fichier de sauvegarde (ou 'annuler' pour annuler):" read -r backup_file if [ "$backup_file" = "annuler" ]; then echo "Restauration annulée" return fi if [ -f "$CONFIG_DIR/$backup_file" ]; then cp "$CONFIG_DIR/$backup_file" "$CONFIG_DIR/blindbit.toml" echo -e "${GREEN}Configuration restaurée${NC}" echo "Redémarrage recommandé pour appliquer les changements" else echo -e "${RED}Fichier de sauvegarde non trouvé${NC}" fi } # Fonction pour mettre à jour l'image update_image() { echo -e "${BLUE}=== Mise à jour de l'image BlindBit Oracle ===${NC}" echo "Image actuelle: $(docker inspect --format='{{.Config.Image}}' "$CONTAINER_NAME")" echo "Mise à jour de l'image..." docker pull git.4nkweb.com/4nk/blindbit-oracle:fixed-source echo -e "${GREEN}Image mise à jour${NC}" echo "Redémarrage du service avec la nouvelle image..." docker compose --env-file /home/debian/4NK_env/.env.master up -d --force-recreate blindbit echo -e "${GREEN}Service redémarré avec la nouvelle image${NC}" } # Boucle principale while true; do show_menu echo -e "${CYAN}Choisissez une option:${NC}" read -r choice case $choice in 1) check_status ;; 2) restart_service ;; 3) show_logs ;; 4) test_api ;; 5) collect_logs ;; 6) check_config ;; 7) check_ports ;; 8) check_sync ;; 9) clean_logs ;; 10) backup_config ;; 11) restore_config ;; 12) update_image ;; 0) echo -e "${GREEN}Au revoir!${NC}"; exit 0 ;; *) echo -e "${RED}Option invalide${NC}" ;; esac echo -e "\n${YELLOW}Appuyez sur Entrée pour continuer...${NC}" read -r done