#!/bin/bash # Validação de consistência entre ficheiros locais e servidor # Desk-Moloni v3.0.1 echo "🔍 Validando consistência Local ↔ Servidor..." echo "=========================================" SERVER="server.descomplicar.pt" PORT="9443" USER="root" LOCAL_PATH="/media/ealmeida/Dados/Dev/desk-moloni/modules/desk_moloni" REMOTE_PATH="/home/ealmeida/desk.descomplicar.pt/modules/desk_moloni" # Cores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Função para comparar ficheiros compare_file() { local file=$1 local local_file="$LOCAL_PATH/$file" local remote_file="$REMOTE_PATH/$file" if [ ! -f "$local_file" ]; then echo -e "${RED}❌ LOCAL: $file (não existe)${NC}" return 1 fi # Calcular hash local local_hash=$(md5sum "$local_file" | cut -d' ' -f1) # Calcular hash remoto remote_hash=$(ssh -p $PORT $USER@$SERVER "md5sum $remote_file 2>/dev/null | cut -d' ' -f1") if [ -z "$remote_hash" ]; then echo -e "${RED}❌ REMOTO: $file (não existe)${NC}" return 1 fi if [ "$local_hash" == "$remote_hash" ]; then echo -e "${GREEN}✅ SINCRONIZADO: $file${NC}" return 0 else echo -e "${YELLOW}⚠️ DIFERENTE: $file${NC}" echo " Local: $local_hash" echo " Remoto: $remote_hash" return 1 fi } # Lista de ficheiros críticos para validar CRITICAL_FILES=( "controllers/Dashboard.php" "controllers/Admin.php" "controllers/Mapping.php" "models/Desk_moloni_config_model.php" "models/Desk_moloni_sync_queue_model.php" "models/Desk_moloni_sync_log_model.php" "models/Desk_moloni_mapping_model.php" "models/Config_model.php" "libraries/PerfexHooks.php" "libraries/QueueProcessor.php" "libraries/MoloniApiClient.php" "helpers/desk_moloni_helper.php" "views/admin/partials/csrf_token.php" "assets/css/admin.css" "assets/js/admin.js" ) echo "📋 Verificando ${#CRITICAL_FILES[@]} ficheiros críticos..." echo "" total_files=${#CRITICAL_FILES[@]} synced_files=0 different_files=0 missing_files=0 for file in "${CRITICAL_FILES[@]}"; do if compare_file "$file"; then ((synced_files++)) elif [ -f "$LOCAL_PATH/$file" ]; then ((different_files++)) else ((missing_files++)) fi done echo "" echo "📊 RESUMO DA VALIDAÇÃO:" echo "=======================" echo -e "✅ Sincronizados: ${GREEN}$synced_files${NC}/$total_files" echo -e "⚠️ Diferentes: ${YELLOW}$different_files${NC}/$total_files" echo -e "❌ Em falta: ${RED}$missing_files${NC}/$total_files" # Calcular percentagem de consistência consistency=$((synced_files * 100 / total_files)) echo "" echo -e "🎯 Consistência: ${GREEN}$consistency%${NC}" if [ $consistency -eq 100 ]; then echo -e "${GREEN}🎉 PERFEITO! Todos os ficheiros estão sincronizados!${NC}" exit 0 elif [ $consistency -ge 90 ]; then echo -e "${YELLOW}✨ MUITO BOM! Quase todos os ficheiros sincronizados${NC}" exit 0 else echo -e "${RED}⚠️ ATENÇÃO! Vários ficheiros não estão sincronizados${NC}" exit 1 fi