228 lines
7.5 KiB
Bash
Executable File
228 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
|
|
|