import time import requests from .base import BaseChecker, CheckResult class HttpChecker(BaseChecker): def check(self) -> CheckResult: url = self.config["url"] method = self.config.get("method", "GET").upper() timeout = self.config.get("timeout", 10) expected_status = self.config.get("expected_status", 200) verify_ssl = self.config.get("verify_ssl", True) headers = self.config.get("headers", {}) start = time.time() try: response = requests.request( method=method, url=url, timeout=timeout, verify=verify_ssl, headers=headers ) response_time = (time.time() - start) * 1000 # ms if response.status_code == expected_status: return CheckResult( success=True, message=f"HTTP {response.status_code}", response_time=response_time, details={"status_code": response.status_code} ) else: return CheckResult( success=False, message=f"Unexpected status: {response.status_code} (expected {expected_status})", response_time=response_time, details={"status_code": response.status_code} ) except requests.Timeout: return CheckResult( success=False, message="HTTP timeout", response_time=None ) except requests.RequestException as e: return CheckResult( success=False, message=f"HTTP error: {e}", response_time=None )