|
| 1 | +""" |
| 2 | +서버 상태 확인 및 연결 관련 기능을 제공하는 유틸리티 클래스입니다. |
| 3 | +
|
| 4 | +이 모듈은 HTTP 기반의 서버에 대해 다음과 같은 기능을 제공합니다: |
| 5 | +- `/health` 엔드포인트를 통한 서버 헬스 체크 |
| 6 | +- 향후 서버 연결 또는 상태 점검과 관련된 기능 추가 예정 |
| 7 | +
|
| 8 | +각 기능은 요청 실패, 타임아웃, 연결 오류 등의 다양한 예외 상황을 포괄적으로 처리하며, |
| 9 | +로깅을 통해 상세한 실패 원인을 기록하고 결과를 boolean 또는 적절한 형태로 반환합니다. |
| 10 | +""" |
| 11 | + |
| 12 | +import logging |
| 13 | +from urllib.parse import urljoin |
| 14 | + |
| 15 | +import requests |
| 16 | + |
| 17 | +logging.basicConfig( |
| 18 | + level=logging.INFO, |
| 19 | + format="%(asctime)s [%(levelname)s] %(message)s", |
| 20 | + datefmt="%Y-%m-%d %H:%M:%S", |
| 21 | +) |
| 22 | +logger = logging.getLogger(__name__) |
| 23 | + |
| 24 | + |
| 25 | +class CheckServer: |
| 26 | + """ |
| 27 | + 서버의 상태를 확인하거나 연결을 테스트하는 유틸리티 메서드를 제공하는 클래스입니다. |
| 28 | +
|
| 29 | + 현재는 GMS 서버의 `/health` 엔드포인트에 대한 헬스 체크 기능을 포함하고 있으며, |
| 30 | + 향후에는 다양한 서버 연결 확인 및 상태 점검 기능이 추가될 수 있도록 확장 가능한 구조로 설계되었습니다. |
| 31 | + 모든 기능은 네트워크 오류 및 서버 응답 상태에 따라 예외를 로깅하며, 호출자가 결과를 판단할 수 있도록 boolean 값을 반환합니다. |
| 32 | + """ |
| 33 | + |
| 34 | + @staticmethod |
| 35 | + def is_gms_server_healthy(*, url: str) -> bool: |
| 36 | + """ |
| 37 | + 지정된 GMS 서버의 `/health` 엔드포인트에 요청을 보내 상태를 확인합니다. |
| 38 | +
|
| 39 | + 서버가 HTTP 200 응답을 반환하면 True를 반환하며, |
| 40 | + 요청 실패, 타임아웃, 연결 오류 등의 예외 발생 시 False를 반환하고, |
| 41 | + 로깅을 통해 상세한 에러 정보를 출력합니다. |
| 42 | +
|
| 43 | + Args: |
| 44 | + url (str): 헬스 체크를 수행할 GMS 서버의 기본 URL (예: "http://localhost:8080") |
| 45 | +
|
| 46 | + Returns: |
| 47 | + bool: 서버가 정상적으로 응답하면 True, 예외 발생 시 False |
| 48 | + """ |
| 49 | + |
| 50 | + health_url = urljoin(url, "/health") |
| 51 | + |
| 52 | + try: |
| 53 | + response = requests.get( |
| 54 | + health_url, |
| 55 | + timeout=3, |
| 56 | + ) |
| 57 | + response.raise_for_status() |
| 58 | + logger.info("GMS server is healthy: %s", url) |
| 59 | + return True |
| 60 | + except ( |
| 61 | + requests.exceptions.ConnectTimeout, |
| 62 | + requests.exceptions.ReadTimeout, |
| 63 | + ) as e: |
| 64 | + logger.error( |
| 65 | + "Timeout while connecting to GMS server: %s | %s", health_url, e |
| 66 | + ) |
| 67 | + except requests.exceptions.ConnectionError as e: |
| 68 | + logger.error("Failed to connect to GMS server: %s | %s", health_url, e) |
| 69 | + except requests.exceptions.HTTPError as e: |
| 70 | + logger.error("GMS server returned HTTP error: %s | %s", health_url, e) |
| 71 | + except requests.exceptions.RequestException as e: |
| 72 | + logger.exception("Unexpected request error to GMS server: %s", health_url) |
| 73 | + |
| 74 | + return False |
0 commit comments