"""Probes that work for both Spring Boot 1.5/2.x with common actuator settings.""" import requests _CANDIDATES = ( "/actuator/health", "/actuator/health/", # noqa: PIE "/health", "/application/health", # very old ) def probe_healthy(base_url: str, session: requests.Session, timeout: float = 2.0) -> tuple[str, bool, int]: base = base_url.rstrip("/") last_status = 0 for path in _CANDIDATES: try: r = session.get(base + path, timeout=timeout, allow_redirects=True) last_status = r.status_code if r.status_code == 200 and _body_up(r.text): return path, True, r.status_code except requests.RequestException: last_status = -1 return _CANDIDATES[0], False, last_status def _body_up(text: str) -> bool: t = (text or "").lower() return "up" in t or '"status":"ok"' in t or '"status": "ok"' in t