From a55b7dfb4a44dcf1bbf141efa0f5b77ce02590fe Mon Sep 17 00:00:00 2001 From: ITQ Date: Sun, 19 Jan 2025 20:15:43 +0300 Subject: [PATCH] feat: added antifraud healthcheck --- solution/config/integrations/__init__.py | 0 .../config/integrations/antifraud/__init__.py | 0 .../integrations/antifraud/healthcheck.py | 23 +++++++++++++++++++ solution/config/settings.py | 11 ++++++++- 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 solution/config/integrations/__init__.py create mode 100644 solution/config/integrations/antifraud/__init__.py create mode 100644 solution/config/integrations/antifraud/healthcheck.py diff --git a/solution/config/integrations/__init__.py b/solution/config/integrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solution/config/integrations/antifraud/__init__.py b/solution/config/integrations/antifraud/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solution/config/integrations/antifraud/healthcheck.py b/solution/config/integrations/antifraud/healthcheck.py new file mode 100644 index 0000000..95d5905 --- /dev/null +++ b/solution/config/integrations/antifraud/healthcheck.py @@ -0,0 +1,23 @@ +from http import HTTPStatus as status + +import httpx +from django.conf import settings +from health_check.backends import BaseHealthCheckBackend + + +class AntifraudHealthcheck(BaseHealthCheckBackend): + critical_service = False + + def check_status(self) -> None: + try: + response = httpx.get(f"{settings.ANTIFRAUD_ENDPOINT}/api/ping") + if response.status_code >= status.INTERNAL_SERVER_ERROR: + self.add_error("Antifraud service is unaccessible") + except httpx.HTTPError: + self.add_error("Antifraud service is unaccessible") + + def identifier(self) -> str: + return self.__class__.__name__ + + +__all__ = ["AntifraudHealthcheck"] diff --git a/solution/config/settings.py b/solution/config/settings.py index 1d74dfb..db1ac5c 100644 --- a/solution/config/settings.py +++ b/solution/config/settings.py @@ -5,6 +5,9 @@ from pathlib import Path import environ from django.utils.translation import gettext_lazy as _ +from health_check.plugins import plugin_dir + +from config.integrations.antifraud.healthcheck import AntifraudHealthcheck BASE_DIR = Path(__file__).resolve().parent.parent @@ -25,7 +28,13 @@ ALLOWED_HOSTS = env( # Integrations -ANTIFRAUD_ADDRESS = env("ANTIFRAUD_ADDRESS", default="localhost:9090") +ANTIFRAUD_ENDPOINT = ( + f"http://{env('ANTIFRAUD_ADDRESS', default='http://localhost:9090')}" +) + +# Register healthcheck + +plugin_dir.register(AntifraudHealthcheck) # Caching