| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- """Batch update backend auth file priority values."""
- from __future__ import annotations
- import argparse
- from .common import CpaClient, DEFAULT_MANAGEMENT_BASE_URL, now
- def read_cpa_file(name: str, client: object) -> dict | None:
- payload = getattr(client, "get_auth_file")(name)
- return payload if isinstance(payload, dict) else None
- def write_cpa_file(name: str, payload: dict, client: object) -> bool:
- return bool(getattr(client, "upload_auth_file")(name, payload))
- def update_priority_once(
- target_priority: int = 500,
- dry_run: bool = False,
- limit: int | None = None,
- *,
- client: object | None = None,
- management_base_url: str = DEFAULT_MANAGEMENT_BASE_URL,
- management_key: str | None = None,
- ) -> dict[str, int]:
- backend_client = client or CpaClient(management_base_url, management_key=management_key)
- if not getattr(backend_client, "health_check")():
- return {"total": 0, "need_modify": 0, "modified": 0, "skipped": 0}
- reg_files = sorted(
- str(entry.get("name") or "").strip()
- for entry in getattr(backend_client, "list_auth_files")()
- if "@" in str(entry.get("name") or "").strip() and str(entry.get("name") or "").strip().endswith(".json")
- )
- if limit is not None and limit >= 0:
- reg_files = reg_files[:limit]
- need_modify = 0
- modified = 0
- skipped = 0
- for name in reg_files:
- data = read_cpa_file(name, client=backend_client)
- if data is None:
- skipped += 1
- print(f"[{now()}] [priority] skip {name} read failed")
- continue
- current_priority = data.get("priority", "NOT SET")
- if current_priority == target_priority:
- skipped += 1
- continue
- need_modify += 1
- if dry_run:
- print(f"[{now()}] [priority] dry-run {name}: {current_priority} -> {target_priority}")
- continue
- data["priority"] = target_priority
- if write_cpa_file(name, data, client=backend_client):
- modified += 1
- print(f"[{now()}] [priority] updated {name}: {current_priority} -> {target_priority}")
- else:
- skipped += 1
- print(f"[{now()}] [priority] skip {name} write failed")
- return {
- "total": len(reg_files),
- "need_modify": need_modify,
- "modified": modified,
- "skipped": skipped,
- }
- def main() -> None:
- from core.settings import AppSettings
- env_settings = AppSettings.from_env()
- parser = argparse.ArgumentParser(description="Batch update backend auth file priorities for zhuce6")
- parser.add_argument("--dry-run", action="store_true", help="Report changes without writing")
- parser.add_argument("--management-base-url", default=env_settings.cpa_management_base_url or DEFAULT_MANAGEMENT_BASE_URL, help="CPA management base url")
- parser.add_argument("--management-key", default=env_settings.cpa_management_key, help="可选 CPA management key")
- parser.add_argument("--target-priority", type=int, default=500, help="Target priority value")
- parser.add_argument("--limit", type=int, default=None, help="Optional cap for scanned auth files")
- args = parser.parse_args()
- summary = update_priority_once(
- target_priority=args.target_priority,
- dry_run=args.dry_run,
- limit=args.limit,
- management_base_url=args.management_base_url,
- management_key=str(args.management_key or "").strip() or None,
- )
- print(
- f"[{now()}] [priority] total={summary['total']} need_modify={summary['need_modify']}"
- f" modified={summary['modified']} skipped={summary['skipped']} dry_run={args.dry_run}"
- )
- if __name__ == "__main__":
- main()
|