#!/usr/bin/env python # -*- coding: utf-8 -*- """ 一次性脚本:为缺少 boss_id 的账号触发检测登录,自动填充 boss_id。 需确保服务已启动、对应 Worker 在线。 用法: python scripts/fill_boss_ids.py [--base-url URL] [--user USER] [--password PASS] """ import argparse import os import sys # 项目根目录加入路径 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) import requests DEFAULT_BASE = os.getenv("BOSS_DP_API", "http://127.0.0.1:9000") DEFAULT_USER = os.getenv("ADMIN_USERNAME", "admin") DEFAULT_PASS = os.getenv("ADMIN_PASSWORD", "boss_dp_admin") def main(): parser = argparse.ArgumentParser(description="批量触发检测登录,填充 boss_id") parser.add_argument("--base-url", default=DEFAULT_BASE, help="API 地址") parser.add_argument("--user", default=DEFAULT_USER, help="管理员用户名") parser.add_argument("--password", default=DEFAULT_PASS, help="管理员密码") args = parser.parse_args() base = args.base_url.rstrip("/") session = requests.Session() # 登录 try: r = session.post( f"{base}/api/auth/login", json={"username": args.user, "password": args.password}, timeout=10, ) except requests.exceptions.ConnectionError as e: print(f"连接失败,请检查服务是否启动、地址是否正确: {base}") print(f" 错误: {e}") return 1 except requests.exceptions.Timeout: print(f"请求超时: {base}") return 1 if r.status_code != 200: print(f"登录失败: HTTP {r.status_code}") print(f" 响应: {r.text[:500] if r.text else '(无内容)'}") if r.status_code == 502: print(" 502 通常表示代理/网关无法连接后端,请确认服务已启动,或使用 --base-url 指定正确地址") return 1 print("登录成功") # 触发填充 r = session.post(f"{base}/api/accounts/fill-boss-ids") if r.status_code != 200: print(f"请求失败: {r.status_code} {r.text}") return 1 data = r.json() if data.get("code") != 200: print(f"接口错误: {data}") return 1 d = data.get("data", {}) print(d.get("message", "完成")) print(f" 已触发: {d.get('submitted', 0)}, 跳过: {d.get('skipped', 0)}") for e in d.get("errors", []): print(f" - {e}") return 0 if __name__ == "__main__": sys.exit(main())