feat: stabilize multi-region runtime sync and worker orchestration
This commit is contained in:
@@ -10,6 +10,7 @@ from app.services.import_worker_service import import_domains_from_path
|
||||
|
||||
|
||||
_IMPORT_TASK_LOCK = threading.Lock()
|
||||
_IMPORT_EXECUTION_LOCK = threading.Lock()
|
||||
_SOURCE_TYPE_LABELS = {
|
||||
6: "手工录入",
|
||||
7: "TXT 导入",
|
||||
@@ -77,63 +78,64 @@ def _source_label(source_type: int) -> str:
|
||||
|
||||
|
||||
def _run_import_task(task_id: str, file_path: str, source_type: int = 7) -> None:
|
||||
_update_task_with_log(
|
||||
task_id,
|
||||
f"导入任务开始执行,来源类型:{_source_label(source_type)}",
|
||||
status="running",
|
||||
started_at=_now(),
|
||||
message=f"导入任务开始执行,来源类型:{_source_label(source_type)}",
|
||||
phase="reading",
|
||||
phase_label=_phase_label("reading"),
|
||||
)
|
||||
try:
|
||||
path = Path(file_path)
|
||||
with _IMPORT_EXECUTION_LOCK:
|
||||
_update_task_with_log(
|
||||
task_id,
|
||||
f"开始读取文件:{path.name}",
|
||||
f"导入任务开始执行,来源类型:{_source_label(source_type)}",
|
||||
status="running",
|
||||
started_at=_now(),
|
||||
message=f"导入任务开始执行,来源类型:{_source_label(source_type)}",
|
||||
phase="reading",
|
||||
phase_label=_phase_label("reading"),
|
||||
)
|
||||
raw_lines = path.read_text(encoding="utf-8", errors="replace").splitlines()
|
||||
total_lines = len(raw_lines)
|
||||
non_empty = sum(1 for line in raw_lines if line.strip())
|
||||
_update_task_with_log(
|
||||
task_id,
|
||||
f"文件读取完成,共 {total_lines} 行,非空 {non_empty} 行",
|
||||
phase="normalizing",
|
||||
phase_label=_phase_label("normalizing"),
|
||||
message=f"文件读取完成,准备清洗 {non_empty} 条域名",
|
||||
)
|
||||
try:
|
||||
path = Path(file_path)
|
||||
_update_task_with_log(
|
||||
task_id,
|
||||
f"开始读取文件:{path.name}",
|
||||
phase="reading",
|
||||
phase_label=_phase_label("reading"),
|
||||
)
|
||||
raw_lines = path.read_text(encoding="utf-8", errors="replace").splitlines()
|
||||
total_lines = len(raw_lines)
|
||||
non_empty = sum(1 for line in raw_lines if line.strip())
|
||||
_update_task_with_log(
|
||||
task_id,
|
||||
f"文件读取完成,共 {total_lines} 行,非空 {non_empty} 行",
|
||||
phase="normalizing",
|
||||
phase_label=_phase_label("normalizing"),
|
||||
message=f"文件读取完成,准备清洗 {non_empty} 条域名",
|
||||
)
|
||||
|
||||
result = import_domains_from_path(path, source_type=source_type)
|
||||
stats = result.get("stats", {})
|
||||
_update_task_with_log(
|
||||
task_id,
|
||||
(
|
||||
f"导入完成:总数 {stats.get('total', 0)},有效 {stats.get('valid', 0)},"
|
||||
f"新增 {stats.get('added', 0)},已存在 {stats.get('exists', 0)},无效 {stats.get('invalid', 0)},"
|
||||
f"来源类型 {result.get('source_label') or _source_label(source_type)}"
|
||||
),
|
||||
status="completed",
|
||||
completed_at=_now(),
|
||||
result=result,
|
||||
message=(
|
||||
f"导入完成:总数 {stats.get('total', 0)},有效 {stats.get('valid', 0)},"
|
||||
f"新增 {stats.get('added', 0)},已存在 {stats.get('exists', 0)},无效 {stats.get('invalid', 0)}"
|
||||
),
|
||||
phase="completed",
|
||||
phase_label=_phase_label("completed"),
|
||||
)
|
||||
except Exception as exc:
|
||||
_update_task_with_log(
|
||||
task_id,
|
||||
f"导入失败:{exc}",
|
||||
status="failed",
|
||||
completed_at=_now(),
|
||||
message=f"导入失败:{exc}",
|
||||
phase="failed",
|
||||
phase_label=_phase_label("failed"),
|
||||
)
|
||||
result = import_domains_from_path(path, source_type=source_type)
|
||||
stats = result.get("stats", {})
|
||||
_update_task_with_log(
|
||||
task_id,
|
||||
(
|
||||
f"导入完成:总数 {stats.get('total', 0)},有效 {stats.get('valid', 0)},"
|
||||
f"新增 {stats.get('added', 0)},已存在 {stats.get('exists', 0)},无效 {stats.get('invalid', 0)},"
|
||||
f"来源类型 {result.get('source_label') or _source_label(source_type)}"
|
||||
),
|
||||
status="completed",
|
||||
completed_at=_now(),
|
||||
result=result,
|
||||
message=(
|
||||
f"导入完成:总数 {stats.get('total', 0)},有效 {stats.get('valid', 0)},"
|
||||
f"新增 {stats.get('added', 0)},已存在 {stats.get('exists', 0)},无效 {stats.get('invalid', 0)}"
|
||||
),
|
||||
phase="completed",
|
||||
phase_label=_phase_label("completed"),
|
||||
)
|
||||
except Exception as exc:
|
||||
_update_task_with_log(
|
||||
task_id,
|
||||
f"导入失败:{exc}",
|
||||
status="failed",
|
||||
completed_at=_now(),
|
||||
message=f"导入失败:{exc}",
|
||||
phase="failed",
|
||||
phase_label=_phase_label("failed"),
|
||||
)
|
||||
|
||||
|
||||
def create_import_task(content: bytes, filename: str, source_type: int = 7) -> dict:
|
||||
|
||||
Reference in New Issue
Block a user