4NK_env/scripts/lecoffre_node/blindbit-maintenance.sh

232 lines
7.5 KiB
Bash
Executable File

#!/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