Initial Seg Data Server Net platform

This commit is contained in:
2026-06-30 11:49:36 +08:00
commit 98abafa7cc
48 changed files with 6020 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
"""System task wrappers."""

View File

@@ -0,0 +1,106 @@
from __future__ import annotations
import shutil
import subprocess
from pathlib import Path
from ...config import settings
def parse_nvidia_smi_csv(output: str) -> list[dict]:
gpus: list[dict] = []
for line in output.splitlines():
if not line.strip():
continue
parts = [part.strip() for part in line.split(",")]
if len(parts) < 7:
continue
index, name, total, used, free, util, temp = parts[:7]
try:
gpus.append(
{
"index": int(index),
"name": name,
"memory_total_mb": int(total),
"memory_used_mb": int(used),
"memory_free_mb": int(free),
"utilization_gpu_percent": int(util),
"temperature_c": int(temp),
}
)
except ValueError:
continue
return gpus
def get_gpus() -> dict:
cmd = [
"nvidia-smi",
"--query-gpu=index,name,memory.total,memory.used,memory.free,utilization.gpu,temperature.gpu",
"--format=csv,noheader,nounits",
]
try:
result = subprocess.run(cmd, capture_output=True, text=True, check=True)
return {"available": True, "gpus": parse_nvidia_smi_csv(result.stdout)}
except Exception as exc:
return {"available": False, "gpus": [], "error": str(exc)}
def get_conda_envs() -> dict:
try:
result = subprocess.run(["conda", "env", "list"], capture_output=True, text=True, check=True)
except Exception as exc:
return {"available": False, "envs": [], "error": str(exc)}
envs = []
for line in result.stdout.splitlines():
raw = line.strip()
if not raw or raw.startswith("#"):
continue
marker = "*" in raw.split()
parts = raw.replace("*", " ").split()
if len(parts) >= 2:
envs.append({"name": parts[0], "path": parts[-1], "active": marker})
return {"available": True, "envs": envs, "task_default": settings.task_conda_env}
def disk_usage() -> dict:
usage = shutil.disk_usage(settings.source_root)
return {
"path": str(settings.source_root),
"total": usage.total,
"used": usage.used,
"free": usage.free,
}
def scan_results() -> list[dict]:
roots = [
settings.source_root / "DataSet_Public_outputs",
settings.source_root / "BestMode_Predict_Results_DataSet_Public",
settings.source_root / "Hardisk",
settings.source_root / "Seg_All_In_One_Analysis",
]
exts = {".csv", ".png", ".jpg", ".jpeg", ".svg", ".log", ".pth", ".pt"}
results: list[dict] = []
for root in roots:
if not root.exists():
continue
for path in root.rglob("*"):
if path.is_file() and path.suffix.lower() in exts:
try:
stat = path.stat()
results.append(
{
"name": path.name,
"path": str(path.resolve()),
"relative_path": str(path.resolve().relative_to(settings.source_root)),
"size": stat.st_size,
"modified": stat.st_mtime,
"kind": path.suffix.lower().lstrip("."),
}
)
except OSError:
continue
results.sort(key=lambda item: item["modified"], reverse=True)
return results[:1000]

View File

@@ -0,0 +1,14 @@
from __future__ import annotations
from ...commands import CommandSpec, bash
from ...config import settings
def build_system_task(job_type: str, params: dict, conda_env: str) -> CommandSpec | None:
if job_type == "system.backup":
return CommandSpec(bash(settings.source_root / "Back_Up.sh"), settings.source_root, "run legacy backup script")
if job_type == "mock.echo":
message = params.get("message", "Seg Data Server mock job")
return CommandSpec(["python", "-c", f"print({message!r})"], settings.project_root, "test job runner")
return None