feat: run.sh restart/stop/status + real DB connector + GitLab CI

1. run.sh: start/stop/restart/status/logs/build/test
   - PID file management in .pids/
   - Colored output, health check wait, log files
   - Auto alembic migrate on start

2. DB Connector (replaces mock aiomysql):
   - MySQL: aiomysql (connect/query/dml/test)
   - PostgreSQL: asyncpg (connect/query/dml/test)
   - SQLite: sqlite3 via executor (connect/query/dml/test)
   - Unified interface: DBConnector.test_connection/execute_query/execute_dml
   - Connection test returns version + latency

3. GitLab CI/CD pipeline:
   - test: backend pytest + frontend build
   - build: Docker images (manual trigger)
   - deploy: SSH deploy (manual trigger)
   - Cache: pip + node_modules

Tests: 128 passing, frontend build: OK
This commit is contained in:
logan committed 2026-05-22 15:16:59 +08:00
1 parent 64e0c37972
commit 2cfd45c9d1
10 files changed
+712 -126

No files matched your search

+2 -2
View File
@@ -239,9 +239,9 @@ async def execute_ticket(
if not instance:
raise HTTPException(status_code=400, detail="数据源不存在")
from app.services.query_service import QueryService
from app.services.db_connector import DBConnector
instance.password = decrypt_password(instance.password)
exec_result = await QueryService.execute_dml(instance, ticket.target_database, ticket.sql_content)
exec_result = await DBConnector.execute_dml(instance, ticket.target_database, ticket.sql_content)
ticket.status = "success"
ticket.execute_result = exec_result