Fix IDL runtime dir configuration handling

This commit is contained in:
2026-04-16 18:45:28 +08:00
parent f6c8472354
commit 0a8f3331e3
4 changed files with 44 additions and 11 deletions
+2 -1
View File
@@ -88,7 +88,8 @@ ORBIT_POOL_LANDSAR=
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
IDL_EXECUTABLE=C:\Program Files\Harris\ENVI56\IDL88\bin\bin.x86_64\idl.exe IDL_EXECUTABLE=C:\Program Files\Harris\ENVI56\IDL88\bin\bin.x86_64\idl.exe
IDL_WORKBENCH_PATH=C:\Program Files\Harris\ENVI56\IDL88\bin\bin.x86_64\idlde.exe IDL_WORKBENCH_PATH=C:\Program Files\Harris\ENVI56\IDL88\bin\bin.x86_64\idlde.exe
IDL_WORKER_RUNTIME_DIR=Z:\Code\Insar_management_system_v2\backend\runtime\idl_worker # 留空则默认使用项目 backend/runtime/idl_worker
IDL_WORKER_RUNTIME_DIR=
IDL_WORKER_DEFAULT_TIMEOUT_SECONDS=14400 IDL_WORKER_DEFAULT_TIMEOUT_SECONDS=14400
IDL_WORKER_MAX_TIMEOUT_SECONDS=43200 IDL_WORKER_MAX_TIMEOUT_SECONDS=43200
IDL_JOB_MAX_ATTEMPTS=1 IDL_JOB_MAX_ATTEMPTS=1
+1 -1
View File
@@ -178,7 +178,7 @@ IDL_WORKBENCH_PATH=C:\\Program Files\\Harris\\ENVI56\\IDL88\\bin\\bin.x86_64\\id
IDL_DINSAR_DEM_BASE_FILE=D:\\SRTM30m\\SRTMDEM_RSP_SARscape IDL_DINSAR_DEM_BASE_FILE=D:\\SRTM30m\\SRTMDEM_RSP_SARscape
# 工作目录 # 工作目录
IDL_WORKER_RUNTIME_DIR=Z:\\Code\\Insar_management_system_v2\\backend\\runtime\\idl_worker IDL_WORKER_RUNTIME_DIR=<项目根目录>\\backend\\runtime\\idl_worker
# 超时配置 # 超时配置
IDL_WORKER_DEFAULT_TIMEOUT_SECONDS=14400 IDL_WORKER_DEFAULT_TIMEOUT_SECONDS=14400
+38 -6
View File
@@ -26,6 +26,38 @@ def _windows_path_to_wsl_mount(path: str) -> str:
return f"/mnt/{drive_letter}/{normalized_tail}" return f"/mnt/{drive_letter}/{normalized_tail}"
def _clean_path_text(value: str | None) -> str:
return str(value or "").strip().strip('"').strip("'")
def _default_idl_runtime_dir() -> str:
return os.path.join(_BACKEND_DIR, "runtime", "idl_worker")
def _resolve_idl_runtime_dir(value: str | None) -> str:
fallback_dir = os.path.normpath(_default_idl_runtime_dir())
text = _clean_path_text(value)
if not text:
return fallback_dir
normalized = os.path.normpath(text)
if normalized.startswith("\\\\"):
return normalized
drive, _tail = os.path.splitdrive(normalized)
if drive:
drive_root = drive + os.sep
if not os.path.exists(drive_root):
print(
">>> [Config] IDL_WORKER_RUNTIME_DIR root unavailable; "
f"fallback to {fallback_dir} (configured: {normalized})"
)
return fallback_dir
return normalized
return os.path.normpath(os.path.abspath(normalized))
def _read_env_pairs(env_path: str) -> dict[str, str]: def _read_env_pairs(env_path: str) -> dict[str, str]:
env_map: dict[str, str] = {} env_map: dict[str, str] = {}
if not os.path.isfile(env_path): if not os.path.isfile(env_path):
@@ -256,12 +288,11 @@ class Settings(BaseSettings):
"ORBIT_QUARANTINE_DIR", "ORBIT_QUARANTINE_DIR",
os.path.join(self.MONITOR_ORBIT_DIR, "_quarantine"), os.path.join(self.MONITOR_ORBIT_DIR, "_quarantine"),
) )
if not self.IDL_WORKER_RUNTIME_DIR: object.__setattr__(
object.__setattr__( self,
self, "IDL_WORKER_RUNTIME_DIR",
"IDL_WORKER_RUNTIME_DIR", _resolve_idl_runtime_dir(self.IDL_WORKER_RUNTIME_DIR),
os.path.join(backend_dir, "runtime", "idl_worker"), )
)
if not self.RESULT_PUBLISH_ROOT: if not self.RESULT_PUBLISH_ROOT:
object.__setattr__( object.__setattr__(
self, self,
@@ -395,6 +426,7 @@ class Settings(BaseSettings):
os.makedirs(Settings.RADAR_RAW_CACHE_DIR, exist_ok=True) os.makedirs(Settings.RADAR_RAW_CACHE_DIR, exist_ok=True)
os.makedirs(Settings.RADAR_GEO_CACHE_DIR, exist_ok=True) os.makedirs(Settings.RADAR_GEO_CACHE_DIR, exist_ok=True)
os.makedirs(Settings.COLORMAPS_DIR, exist_ok=True) os.makedirs(Settings.COLORMAPS_DIR, exist_ok=True)
os.makedirs(settings.IDL_WORKER_RUNTIME_DIR, exist_ok=True)
os.makedirs(settings.RESULT_PUBLISH_ROOT, exist_ok=True) os.makedirs(settings.RESULT_PUBLISH_ROOT, exist_ok=True)
os.makedirs(settings.DINSAR_PRODUCT_DIR, exist_ok=True) os.makedirs(settings.DINSAR_PRODUCT_DIR, exist_ok=True)
os.makedirs(settings.PSINSAR_PRODUCT_DIR, exist_ok=True) os.makedirs(settings.PSINSAR_PRODUCT_DIR, exist_ok=True)
+3 -3
View File
@@ -276,9 +276,9 @@ NGINX_PATH=C:\nginx-1.29.4\nginx.exe
# IDL / ENVI 路径与 worker 管理目录 # IDL / ENVI 路径与 worker 管理目录
IDL_EXECUTABLE=C:\Program Files\Harris\ENVI56\IDL88\bin\bin.x86_64\idl.exe IDL_EXECUTABLE=C:\Program Files\Harris\ENVI56\IDL88\bin\bin.x86_64\idl.exe
IDL_WORKBENCH_PATH=C:\Program Files\Harris\ENVI56\IDL88\bin\bin.x86_64\idlde.exe IDL_WORKBENCH_PATH=C:\Program Files\Harris\ENVI56\IDL88\bin\bin.x86_64\idlde.exe
IDL_WORKER_SCRIPT_SOURCE_DIR=Z:\Code\Insar_management_system_v2\IDL\origin IDL_WORKER_SCRIPT_SOURCE_DIR=<项目根目录>\IDL\origin
IDL_WORKER_SCRIPT_DIR=Z:\Code\Insar_management_system_v2\IDL\worker_managed IDL_WORKER_SCRIPT_DIR=<项目根目录>\IDL\worker_managed
IDL_WORKER_RUNTIME_DIR=Z:\Code\Insar_management_system_v2\backend\runtime\idl_worker IDL_WORKER_RUNTIME_DIR=<项目根目录>\backend\runtime\idl_worker
IDL_WORKER_DEFAULT_TIMEOUT_SECONDS=14400 IDL_WORKER_DEFAULT_TIMEOUT_SECONDS=14400
IDL_WORKER_MAX_TIMEOUT_SECONDS=43200 IDL_WORKER_MAX_TIMEOUT_SECONDS=43200
IDL_WORKER_TEMP_DIRECTORY=D:\Sarscape_IDL_Area IDL_WORKER_TEMP_DIRECTORY=D:\Sarscape_IDL_Area