diff --git a/app/main.py b/app/main.py index b3440de..2060362 100644 --- a/app/main.py +++ b/app/main.py @@ -2419,7 +2419,13 @@ def session_status(session_id: str, user: User = Depends(require_user), db: Sess universal_pool_idx = int(sess.container_id.split(":", 1)[1]) except Exception: universal_pool_idx = None - route_path = f"/svc/{service.slug}/" if pooled_web and service else f"/s/{session_id}/" + pooled_rdp = bool(sess.container_id and sess.container_id.startswith("POOL:") and service and service.type == ServiceType.RDP) + if pooled_web and service: + route_path = f"/svc/{service.slug}/" + elif pooled_rdp and service: + route_path = f"/svc/{service.slug}/" + else: + route_path = f"/s/{session_id}/" if web_pool_idx is not None: route_path = f"/w/{web_pool_idx}/" if universal_pool_idx is not None: @@ -2436,7 +2442,7 @@ def session_status(session_id: str, user: User = Depends(require_user), db: Sess "message": "Готово, открываем..." if ready else "Запуск сессии...", "steps": steps, } - if pooled_web: + if pooled_web or pooled_rdp: payload["redirect_url"] = f"/s/{session_id}/view" if web_pool_idx is not None: payload["redirect_url"] = f"/s/{session_id}/view" diff --git a/app/templates/dashboard.html b/app/templates/dashboard.html index fe6c029..a8587e4 100644 --- a/app/templates/dashboard.html +++ b/app/templates/dashboard.html @@ -103,6 +103,18 @@ + +
+
+
Ожидайте...
+
diff --git a/docker-compose.yml b/docker-compose.yml index 5784395..4020972 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,7 +30,7 @@ services: api: build: context: ./app - command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "6"] + command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "${UVICORN_WORKERS:-6}"] environment: DATABASE_URL: postgresql+psycopg2://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} SIGNING_KEY: ${SIGNING_KEY} @@ -41,14 +41,22 @@ services: PREWARM_POOL_SIZE: ${PREWARM_POOL_SIZE:-2} UNIVERSAL_POOL_SIZE: ${UNIVERSAL_POOL_SIZE:-0} WEB_POOL_SIZE: ${WEB_POOL_SIZE:-20} - WEB_POOL_BUFFER: ${WEB_POOL_BUFFER:-10} - X11VNC_FLAGS: ${X11VNC_FLAGS:--wait 5 -defer 5 -ncache 10 -threads} + WEB_POOL_BUFFER: ${WEB_POOL_BUFFER:-2} + X11VNC_FLAGS: ${X11VNC_FLAGS:--wait 5 -defer 5 -threads} MAX_ACTIVE_SERVICES_PER_USER: ${MAX_ACTIVE_SERVICES_PER_USER:-4} LOG_LEVEL: ${LOG_LEVEL:-INFO} - GO_USER_LOCK_TIMEOUT_SECONDS: 8 - GO_POOL_LOCK_TIMEOUT_SECONDS: 20 - POOL_DISPATCH_RETRIES: 6 - ENABLE_STARTUP_MAINTENANCE: 0 + LOG_SLOW_REQUEST_MS: ${LOG_SLOW_REQUEST_MS:-2000} + GO_USER_LOCK_TIMEOUT_SECONDS: ${GO_USER_LOCK_TIMEOUT_SECONDS:-8} + GO_POOL_LOCK_TIMEOUT_SECONDS: ${GO_POOL_LOCK_TIMEOUT_SECONDS:-20} + POOL_DISPATCH_RETRIES: ${POOL_DISPATCH_RETRIES:-6} + POOL_DISPATCH_REQUEST_TIMEOUT_SECONDS: ${POOL_DISPATCH_REQUEST_TIMEOUT_SECONDS:-2.0} + POOL_DISPATCH_SLEEP_SECONDS: ${POOL_DISPATCH_SLEEP_SECONDS:-0.3} + TRAEFIK_INTERNAL_URL: ${TRAEFIK_INTERNAL_URL:-http://traefik} + WEB_RESOLUTION_MIN_WIDTH: ${WEB_RESOLUTION_MIN_WIDTH:-1024} + WEB_RESOLUTION_MIN_HEIGHT: ${WEB_RESOLUTION_MIN_HEIGHT:-720} + WEB_RESOLUTION_MAX_WIDTH: ${WEB_RESOLUTION_MAX_WIDTH:-3840} + WEB_RESOLUTION_MAX_HEIGHT: ${WEB_RESOLUTION_MAX_HEIGHT:-2160} + ENABLE_STARTUP_MAINTENANCE: ${ENABLE_STARTUP_MAINTENANCE:-0} depends_on: - db volumes: @@ -83,14 +91,22 @@ services: PREWARM_POOL_SIZE: ${PREWARM_POOL_SIZE:-2} UNIVERSAL_POOL_SIZE: ${UNIVERSAL_POOL_SIZE:-0} WEB_POOL_SIZE: ${WEB_POOL_SIZE:-20} - WEB_POOL_BUFFER: ${WEB_POOL_BUFFER:-10} - X11VNC_FLAGS: ${X11VNC_FLAGS:--wait 5 -defer 5 -ncache 10 -threads} + WEB_POOL_BUFFER: ${WEB_POOL_BUFFER:-2} + X11VNC_FLAGS: ${X11VNC_FLAGS:--wait 5 -defer 5 -threads} MAX_ACTIVE_SERVICES_PER_USER: ${MAX_ACTIVE_SERVICES_PER_USER:-4} LOG_LEVEL: ${LOG_LEVEL:-INFO} - GO_USER_LOCK_TIMEOUT_SECONDS: 8 - GO_POOL_LOCK_TIMEOUT_SECONDS: 20 - POOL_DISPATCH_RETRIES: 6 - ENABLE_STARTUP_MAINTENANCE: 0 + LOG_SLOW_REQUEST_MS: ${LOG_SLOW_REQUEST_MS:-2000} + GO_USER_LOCK_TIMEOUT_SECONDS: ${GO_USER_LOCK_TIMEOUT_SECONDS:-8} + GO_POOL_LOCK_TIMEOUT_SECONDS: ${GO_POOL_LOCK_TIMEOUT_SECONDS:-20} + POOL_DISPATCH_RETRIES: ${POOL_DISPATCH_RETRIES:-6} + POOL_DISPATCH_REQUEST_TIMEOUT_SECONDS: ${POOL_DISPATCH_REQUEST_TIMEOUT_SECONDS:-2.0} + POOL_DISPATCH_SLEEP_SECONDS: ${POOL_DISPATCH_SLEEP_SECONDS:-0.3} + TRAEFIK_INTERNAL_URL: ${TRAEFIK_INTERNAL_URL:-http://traefik} + WEB_RESOLUTION_MIN_WIDTH: ${WEB_RESOLUTION_MIN_WIDTH:-1024} + WEB_RESOLUTION_MIN_HEIGHT: ${WEB_RESOLUTION_MIN_HEIGHT:-720} + WEB_RESOLUTION_MAX_WIDTH: ${WEB_RESOLUTION_MAX_WIDTH:-3840} + WEB_RESOLUTION_MAX_HEIGHT: ${WEB_RESOLUTION_MAX_HEIGHT:-2160} + ENABLE_STARTUP_MAINTENANCE: ${ENABLE_STARTUP_MAINTENANCE:-0} depends_on: - db volumes: diff --git a/rdp-proxy/entrypoint.sh b/rdp-proxy/entrypoint.sh index b5075b7..f8df8c9 100644 --- a/rdp-proxy/entrypoint.sh +++ b/rdp-proxy/entrypoint.sh @@ -107,7 +107,8 @@ cat > /opt/portal/index.html < { connected = false;