Files
crm.clientright.ru/crm_extensions/file_storage/migrate_batch.sh
Fedor 9245768987 🚀 CRM Files Migration & Real-time Features
 Features:
- Migrated ALL files to new S3 structure (Projects, Contacts, Accounts, HelpDesk, Invoice, etc.)
- Added Nextcloud folder buttons to ALL modules
- Fixed Nextcloud editor integration
- WebSocket server for real-time updates
- Redis Pub/Sub integration
- File path manager for organized storage
- Redis caching for performance (Functions.php)

📁 New Structure:
Documents/Project/ProjectName_ID/file_docID.ext
Documents/Contacts/FirstName_LastName_ID/file_docID.ext
Documents/Accounts/AccountName_ID/file_docID.ext

🔧 Technical:
- FilePathManager for standardized paths
- S3StorageService integration
- WebSocket server (Node.js + Docker)
- Redis cache for getBasicModuleInfo()
- Predis library for Redis connectivity

📝 Scripts:
- Migration scripts for all modules
- Test pages for WebSocket/SSE/Polling
- Documentation (MIGRATION_*.md, REDIS_*.md)

🎯 Result: 15,000+ files migrated successfully!
2025-10-24 19:59:28 +03:00

105 lines
3.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Пакетная миграция проектов по статусу
# Цвета для вывода
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Параметры
STATUS="${1:-completed}"
BATCH_SIZE="${2:-50}"
DRY_RUN="${3:-false}"
echo "🚀 === ПАКЕТНАЯ МИГРАЦИЯ ПРОЕКТОВ ==="
echo ""
echo "📊 Параметры:"
echo " • Статус: $STATUS"
echo " • Размер пакета: $BATCH_SIZE проектов"
echo " • Dry-run: $DRY_RUN"
echo ""
# Получаем список проектов для миграции
PROJECT_LIST=$(mysql -u ci20465_72new -pEcY979Rn ci20465_72new -N -e "
SELECT DISTINCT p.projectid
FROM vtiger_project p
INNER JOIN vtiger_senotesrel sr ON p.projectid = sr.crmid
INNER JOIN vtiger_notes n ON sr.notesid = n.notesid
WHERE n.filestatus = 1
AND p.projectstatus = '$STATUS'
ORDER BY p.projectid
LIMIT $BATCH_SIZE;
" 2>/dev/null)
if [ -z "$PROJECT_LIST" ]; then
echo -e "${RED}❌ Нет проектов для миграции!${NC}"
exit 1
fi
# Подсчитываем количество проектов
PROJECT_COUNT=$(echo "$PROJECT_LIST" | wc -l)
echo -e "${GREEN}✅ Найдено проектов для миграции: $PROJECT_COUNT${NC}"
echo ""
# Счётчики
CURRENT=0
SUCCESS=0
FAILED=0
# Создаём файл для статистики
STATS_FILE="/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/logs/batch_stats_$(date +%Y%m%d_%H%M%S).txt"
echo "Batch Migration Statistics" > "$STATS_FILE"
echo "Status: $STATUS" >> "$STATS_FILE"
echo "Started: $(date)" >> "$STATS_FILE"
echo "" >> "$STATS_FILE"
# Мигрируем каждый проект
for PROJECT_ID in $PROJECT_LIST; do
CURRENT=$((CURRENT + 1))
echo -e "${YELLOW}[$CURRENT/$PROJECT_COUNT]${NC} Мигрируем проект $PROJECT_ID..."
# Запускаем миграцию
if [ "$DRY_RUN" = "true" ]; then
RESULT=$(php /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/migrate_project_files.php --dry-run --project=$PROJECT_ID 2>&1)
else
RESULT=$(php /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/migrate_project_files.php --project=$PROJECT_ID 2>&1)
fi
# Проверяем результат
if echo "$RESULT" | grep -q "МИГРАЦИЯ ЗАВЕРШЕНА"; then
DOCS_SUCCESS=$(echo "$RESULT" | grep "Успешно:" | tail -1 | awk '{print $NF}')
DOCS_TOTAL=$(echo "$RESULT" | grep "Всего документов:" | tail -1 | awk '{print $NF}')
echo -e " ${GREEN}✅ Успешно: $DOCS_SUCCESS/$DOCS_TOTAL документов${NC}"
SUCCESS=$((SUCCESS + 1))
echo "$PROJECT_ID: SUCCESS ($DOCS_SUCCESS/$DOCS_TOTAL)" >> "$STATS_FILE"
else
echo -e " ${RED}❌ Ошибка миграции${NC}"
FAILED=$((FAILED + 1))
echo "$PROJECT_ID: FAILED" >> "$STATS_FILE"
fi
# Небольшая пауза между проектами
sleep 1
done
echo ""
echo "📊 === ИТОГОВАЯ СТАТИСТИКА ==="
echo -e "${GREEN}✅ Успешно: $SUCCESS проектов${NC}"
echo -e "${RED}❌ Ошибок: $FAILED проектов${NC}"
echo ""
echo "📝 Детальная статистика: $STATS_FILE"
# Записываем итоги
echo "" >> "$STATS_FILE"
echo "Finished: $(date)" >> "$STATS_FILE"
echo "Success: $SUCCESS" >> "$STATS_FILE"
echo "Failed: $FAILED" >> "$STATS_FILE"