| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- """Deletion helpers for rotate single-pool mode."""
- from __future__ import annotations
- from pathlib import Path
- from typing import Any
- def _compact_text(value: str, limit: int = 240) -> str:
- return " ".join(str(value or "").split())[:limit]
- def _delete_from_cpa(name: str, client: object | None = None) -> bool:
- if client is None or not hasattr(client, "delete_auth_file"):
- return False
- return bool(getattr(client, "delete_auth_file")(name))
- def handle_unhealthy_entries(
- *,
- result: Any,
- reg_entries: list[dict],
- probe_results: dict[str, tuple[int, str, bool]],
- pool_dir: Path,
- backend_client: object | None,
- now_func: Any,
- classify_status_message_func: Any,
- is_deactivated_status_message_func: Any,
- ) -> set[str]:
- removed_from_main: set[str] = set()
- pool_dir.mkdir(parents=True, exist_ok=True)
- for entry in reg_entries:
- name = str(entry.get("name", "")).strip()
- if not name:
- continue
- status_message = str(entry.get("status_message", ""))
- code = classify_status_message_func(status_message)
- deactivated = is_deactivated_status_message_func(status_message)
- if name in probe_results:
- probe_code, probe_detail, probe_deactivated = probe_results[name]
- if probe_code in {401, 429}:
- code = probe_code
- status_message = probe_detail
- deactivated = probe_deactivated
- if probe_code == 401:
- probe_label = "deactivated" if deactivated else "401 invalidated"
- print(f"[{now_func()}] [rotate] 🔎 {name} quota probe → {probe_label}")
- else:
- print(f"[{now_func()}] [rotate] 🔎 {name} quota probe → 429")
- if code == 401 or deactivated:
- deleted = _delete_from_cpa(name, client=backend_client)
- if not deleted:
- print(f"[{now_func()}] [rotate] ⚠️ {name} 401 删除失败")
- continue
- (pool_dir / name).unlink(missing_ok=True)
- result.deleted_401 += 1
- removed_from_main.add(name)
- print(f"[{now_func()}] [rotate] ❌ {name} 401删除")
- continue
- if code == 429:
- print(f"[{now_func()}] [rotate] ↺ {name} 429保留")
- return removed_from_main
|