#!/usr/bin/env python3 import argparse import sys from common import ( DEFAULT_BASE_URL, DEFAULT_CHROME_PROFILE, ClinicLoginRequiredError, clinic_session, parse_clinic_link, resolve_store_id_for_instance, write_json, ) def main() -> int: parser = argparse.ArgumentParser( description="Resolve one TiKV instance address to the PD store id by querying Clinic metrics" ) parser.add_argument("link", help="Clinic portal link") parser.add_argument("--instance", required=True, help="TiKV instance address such as 10.70.76.168:20182") parser.add_argument( "--base-url", default="", help="Optional Clinic base URL override. Defaults to the host in the Clinic link, then env CLINIC_BASE_URL.", ) parser.add_argument( "--profile", default=DEFAULT_CHROME_PROFILE, help="Chrome profile name. Use 'auto' to scan profiles for clinic.session_id " "(default: env CLINIC_CHROME_PROFILE or auto).", ) args = parser.parse_args() clinic_context = parse_clinic_link(args.link) effective_base_url = str(args.base_url or clinic_context.get("base_url") or DEFAULT_BASE_URL).rstrip("/") try: session = clinic_session(base_url=effective_base_url, profile_name=args.profile) except ClinicLoginRequiredError as exc: print(exc, file=sys.stderr) return 1 store_id = resolve_store_id_for_instance(session, clinic_context, args.instance) write_json( { "clinic_context": clinic_context, "instance": args.instance, "store_id": store_id, "found": bool(store_id), } ) return 0 if store_id else 2 if __name__ == "__main__": raise SystemExit(main())