- CollectDB 다중 신호 수집 → S&P Global AIS API 단일 수집으로 전환 - sig_src_cd + target_id 이중 식별자 → mmsi(VARCHAR) 단일 식별자 - t_vessel_latest_position → t_ais_position 테이블 전환 - 레거시 배치/유틸 ~30개 클래스 삭제 (VesselAggregationJobConfig, ShipKindCodeConverter 등) - AisTargetCacheManager 기반 캐시 이중 구조 (최신위치 + 트랙 버퍼) - CacheBasedVesselTrackDataReader + CacheBasedTrackJobListener 신규 추가 - VesselStaticStepConfig: 정적정보 CDC 변경 검출 + hourly job 편승 - SignalKindCode enum: vesselType/extraInfo 기반 선종 자동 분류 - WebSocket/STOMP 전체 mmsi 전환 (StompTrackStreamingService ~40곳) - 모니터링/성능 최적화 코드 mmsi 기반 전환 - DataSource 설정 통합 (snpdb 단일 DB) - AreaBoundaryCache Polygon→Geometry 캐스트 수정 (MULTIPOLYGON 지원) - ConcurrentHashMap 적용 (VesselTrackStepConfig 동시성 버그 수정) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
219 lines
7.7 KiB
Batchfile
219 lines
7.7 KiB
Batchfile
@echo off
|
|
chcp 65001 >nul
|
|
REM ===============================================
|
|
REM Signal Batch Deploy Only Script
|
|
REM (Build with IntelliJ UI first)
|
|
REM ===============================================
|
|
|
|
setlocal enabledelayedexpansion
|
|
|
|
REM Configuration
|
|
set "SERVER_IP=10.26.252.51"
|
|
set "SERVER_USER=root"
|
|
set "SERVER_PATH=/devdata/apps/bridge-db-monitoring"
|
|
set "JAR_NAME=vessel-batch-aggregation.jar"
|
|
set "BACKUP_DIR=!SERVER_PATH!/backups"
|
|
|
|
echo ===============================================
|
|
echo Signal Batch Deploy System (Deploy Only)
|
|
echo ===============================================
|
|
echo [INFO] Deploy Start: !date! !time!
|
|
echo [INFO] Target Server: !SERVER_IP!
|
|
echo.
|
|
|
|
REM 1. Set correct working directory and check JAR file
|
|
echo =============== Working Directory Setup ===============
|
|
echo [INFO] Current directory: !CD!
|
|
echo [INFO] Script directory: %~dp0
|
|
|
|
REM Change to project root directory (parent of scripts)
|
|
cd /d "%~dp0.."
|
|
echo [INFO] Project root directory: !CD!
|
|
|
|
echo.
|
|
echo =============== JAR File Check ===============
|
|
set "JAR_PATH=target\!JAR_NAME!"
|
|
|
|
if not exist "!JAR_PATH!" (
|
|
echo [ERROR] JAR file not found: !JAR_PATH!
|
|
echo [INFO] Current directory: !CD!
|
|
echo.
|
|
echo Please build the project first using IntelliJ IDEA:
|
|
echo 1. Open Maven tool window: View ^> Tool Windows ^> Maven
|
|
echo 2. Double-click: Lifecycle ^> clean
|
|
echo 3. Double-click: Lifecycle ^> package
|
|
echo 4. Verify target/!JAR_NAME! exists
|
|
echo.
|
|
echo Checking for any JAR files in target directory:
|
|
if exist "target\" (
|
|
dir target\*.jar 2>nul
|
|
if !ERRORLEVEL! neq 0 (
|
|
echo [INFO] Target directory exists but no JAR files found
|
|
)
|
|
) else (
|
|
echo [INFO] Target directory does not exist - project not built yet
|
|
)
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
for %%I in ("!JAR_PATH!") do (
|
|
echo [INFO] JAR File: %%~nxI
|
|
echo [INFO] File Size: %%~zI bytes
|
|
echo [INFO] Modified: %%~tI
|
|
)
|
|
|
|
echo [SUCCESS] JAR file ready for deployment
|
|
|
|
REM 2. SSH Connection Test
|
|
echo.
|
|
echo =============== SSH Connection Test ===============
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "echo 'SSH connection OK'" 2>nul
|
|
set CONNECTION_RESULT=!ERRORLEVEL!
|
|
if !CONNECTION_RESULT! neq 0 (
|
|
echo [ERROR] SSH connection failed
|
|
echo [INFO] Please check:
|
|
echo - SSH key authentication setup
|
|
echo - Network connectivity to !SERVER_IP!
|
|
echo - Server is accessible
|
|
echo.
|
|
echo Run setup-ssh-key.bat to configure SSH keys
|
|
pause
|
|
exit /b 1
|
|
)
|
|
echo [SUCCESS] SSH connection successful
|
|
|
|
REM 3. Check current server status
|
|
echo.
|
|
echo =============== Current Server Status ===============
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "cd !SERVER_PATH! && ./vessel-batch-control.sh status" 2>nul
|
|
set SERVER_RUNNING=!ERRORLEVEL!
|
|
|
|
REM 4. Create backup
|
|
echo.
|
|
echo =============== Create Backup ===============
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "mkdir -p !BACKUP_DIR!"
|
|
|
|
REM Generate backup timestamp
|
|
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value') do if not "%%I"=="" set DATETIME=%%I
|
|
set BACKUP_TIMESTAMP=!DATETIME:~0,8!_!DATETIME:~8,6!
|
|
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "if [ -f !SERVER_PATH!/!JAR_NAME! ]; then echo '[INFO] Creating backup...'; cp !SERVER_PATH!/!JAR_NAME! !BACKUP_DIR!/!JAR_NAME!.backup.!BACKUP_TIMESTAMP!; echo '[INFO] Backup created: !BACKUP_DIR!/!JAR_NAME!.backup.!BACKUP_TIMESTAMP!'; ls -la !BACKUP_DIR!/!JAR_NAME!.backup.!BACKUP_TIMESTAMP!; else echo '[INFO] No existing JAR file to backup (first deployment)'; fi"
|
|
|
|
REM 5. Stop application
|
|
if !SERVER_RUNNING! equ 0 (
|
|
echo.
|
|
echo =============== Stop Application ===============
|
|
echo [INFO] Stopping running application...
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "cd !SERVER_PATH! && ./vessel-batch-control.sh stop"
|
|
if !ERRORLEVEL! neq 0 (
|
|
echo [ERROR] Failed to stop application
|
|
exit /b 1
|
|
)
|
|
echo [SUCCESS] Application stopped
|
|
) else (
|
|
echo.
|
|
echo [INFO] Application not running, proceeding with deployment
|
|
)
|
|
|
|
REM 6. Deploy new JAR
|
|
echo.
|
|
echo =============== Deploy New JAR ===============
|
|
echo [INFO] Transferring JAR file...
|
|
scp "!JAR_PATH!" !SERVER_USER!@!SERVER_IP!:!SERVER_PATH!/
|
|
if !ERRORLEVEL! neq 0 (
|
|
echo [ERROR] File transfer failed
|
|
goto :rollback_option
|
|
)
|
|
|
|
echo [INFO] Setting permissions...
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "chmod 644 !SERVER_PATH!/!JAR_NAME!"
|
|
|
|
echo [SUCCESS] JAR file deployed
|
|
|
|
REM 7. Transfer version info (if exists)
|
|
echo.
|
|
echo =============== Version Information ===============
|
|
if exist "target\version.txt" (
|
|
echo [INFO] Transferring version information...
|
|
scp "target\version.txt" !SERVER_USER!@!SERVER_IP!:!SERVER_PATH!/
|
|
) else (
|
|
echo [INFO] No version file found, creating basic version info...
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "echo 'DEPLOY_TIME=!date! !time!' > !SERVER_PATH!/version.txt"
|
|
)
|
|
|
|
REM 8. Start application
|
|
echo.
|
|
echo =============== Start Application ===============
|
|
echo [INFO] Starting application...
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "cd !SERVER_PATH! && ./vessel-batch-control.sh start"
|
|
if !ERRORLEVEL! neq 0 (
|
|
echo [ERROR] Failed to start application
|
|
goto :rollback_option
|
|
)
|
|
|
|
REM 9. Wait and verify
|
|
echo.
|
|
echo =============== Deployment Verification ===============
|
|
echo [INFO] Waiting for application startup (30 seconds)...
|
|
timeout /t 30 /nobreak > nul
|
|
|
|
echo [INFO] Checking application status...
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "cd !SERVER_PATH! && ./vessel-batch-control.sh status"
|
|
if !ERRORLEVEL! neq 0 (
|
|
echo [ERROR] Application not running properly
|
|
goto :rollback_option
|
|
)
|
|
|
|
echo [INFO] Performing health check...
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "curl -f http://localhost:8090/actuator/health --max-time 10" 2>nul
|
|
if !ERRORLEVEL! neq 0 (
|
|
echo [WARN] Health check failed, but application appears to be running
|
|
echo [INFO] Give it a few more minutes to fully start up
|
|
)
|
|
|
|
REM 10. Cleanup old backups
|
|
echo.
|
|
echo =============== Cleanup ===============
|
|
echo [INFO] Cleaning up old backups (keeping recent 7)...
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 !SERVER_USER!@!SERVER_IP! "cd !BACKUP_DIR!; ls -t !JAR_NAME!.backup.* 2>/dev/null | tail -n +8 | xargs rm -f 2>/dev/null || true; echo '[INFO] Backup cleanup completed'"
|
|
|
|
REM 11. Success
|
|
echo.
|
|
echo =============== Deployment Successful ===============
|
|
echo [SUCCESS] Deployment completed successfully!
|
|
echo [INFO] Deployment time: !date! !time!
|
|
echo [INFO] Backup created: !JAR_NAME!.backup.!BACKUP_TIMESTAMP!
|
|
echo [INFO] Server dashboard: http://!SERVER_IP!:8090/static/admin/batch-admin.html
|
|
echo [INFO] Server logs: ssh !SERVER_USER!@!SERVER_IP! "cd !SERVER_PATH! && ./vessel-batch-control.sh logs"
|
|
echo.
|
|
echo Quick commands:
|
|
echo server-status.bat - Check server status
|
|
echo server-logs.bat tail - Monitor logs
|
|
echo rollback.bat !BACKUP_TIMESTAMP! - Rollback if needed
|
|
|
|
goto :end
|
|
|
|
:rollback_option
|
|
echo.
|
|
echo =============== Deployment Failed ===============
|
|
echo [ERROR] Deployment failed!
|
|
echo.
|
|
set /p ROLLBACK="Attempt rollback to previous version? (y/N): "
|
|
if /i "!ROLLBACK!"=="y" (
|
|
echo [INFO] Attempting rollback...
|
|
if defined BACKUP_TIMESTAMP (
|
|
call rollback.bat !BACKUP_TIMESTAMP!
|
|
) else (
|
|
echo [ERROR] No backup timestamp available for rollback
|
|
echo [INFO] Manual recovery may be required
|
|
)
|
|
) else (
|
|
echo [INFO] Manual recovery required
|
|
echo [INFO] SSH to server: ssh !SERVER_USER!@!SERVER_IP!
|
|
echo [INFO] Check status: cd !SERVER_PATH! && ./vessel-batch-control.sh status
|
|
)
|
|
exit /b 1
|
|
|
|
:end
|
|
endlocal |