feat: on-demand RDP - connect xfreerdp only when session opens
Replaces always-on xfreerdp with on-demand model (load 12 to under 1 at idle). - rdp-proxy/manager.py: HTTP server port 7001 managing xfreerdp lifecycle - rdp-proxy/entrypoint.sh: starts Xvfb+x11vnc+websockify+manager, no auto-connect - rdp-proxy/Dockerfile: adds python3, copies manager.py, exposes 7001 - runtime.py: connect_rdp_slot and disconnect_rdp_slot via manager HTTP API - terminate_session_record: disconnect instead of container restart - main.py: calls connect_rdp_slot in background thread on session create - maintenance.py: cleanup_loop disconnects on expire, run_maintenance_service includes RDP slot init, maintenance_runner fixed to import maintenance
This commit is contained in:
+3
-1
@@ -1,6 +1,7 @@
|
||||
import datetime as dt
|
||||
import logging
|
||||
import re
|
||||
import threading
|
||||
import uuid
|
||||
import time
|
||||
import contextvars
|
||||
@@ -46,7 +47,7 @@ from runtime import (
|
||||
get_universal_pool_status, get_web_pool_status, LockTimeoutError, open_warm_web_url,
|
||||
_rdp_slot_container_name, route_ready, sanitize_client_resolution,
|
||||
service_uses_universal_pool, session_redirect_url,
|
||||
start_rdp_slot_container, stop_rdp_slot_container,
|
||||
connect_rdp_slot, start_rdp_slot_container, stop_rdp_slot_container,
|
||||
stop_runtime_container, terminate_active_slot_sessions,
|
||||
terminate_session_record, wait_for_session_route,
|
||||
)
|
||||
@@ -579,6 +580,7 @@ def go_service(
|
||||
log_event("session_created", user_id=user.id, service_slug=service.slug, session_id=session_id, mode="rdp_slot", slot_id=free_slot.id)
|
||||
audit(db, "SESSION_CREATE_RDP_SLOT", f"service={service.slug} session={session_id} slot={free_slot.id}", user_id=user.id)
|
||||
_emit("session_created_rdp_slot", session_id=session_id, slot_id=free_slot.id)
|
||||
threading.Thread(target=connect_rdp_slot, args=(free_slot.id,), daemon=True).start()
|
||||
return RedirectResponse(url=f"/s/{session_id}/", status_code=303)
|
||||
else:
|
||||
# Legacy: no slots configured — exclusive single-session behaviour
|
||||
|
||||
Reference in New Issue
Block a user