From ee806f6d441121adb834c23b56b5246d649d6af8 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Tue, 2 Jan 2024 13:54:22 +0200 Subject: [PATCH] filter health checks --- .../core/log/filtered_access_logger.py | 18 +++++++++++++++++- .../core/log/test_filtered_access_logger.py | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/ahriman/core/log/filtered_access_logger.py b/src/ahriman/core/log/filtered_access_logger.py index 77bf3224..b0fdd3bd 100644 --- a/src/ahriman/core/log/filtered_access_logger.py +++ b/src/ahriman/core/log/filtered_access_logger.py @@ -28,12 +28,27 @@ class FilteredAccessLogger(AccessLogger): Attributes: LOG_PATH_REGEX(re.Pattern): (class attribute) regex for logs uri + LOG_PATPROCESS_PATH_REGEXH_REGEX(re.Pattern): (class attribute) regex for process uri """ + HEALTH_PATH_REGEX = "/api/v1/info" LOG_PATH_REGEX = re.compile(r"^/api/v1/packages/[^/]+/logs$") # technically process id is uuid, but we might change it later PROCESS_PATH_REGEX = re.compile(r"^/api/v1/service/process/[^/]+$") + @staticmethod + def is_info_get(request: BaseRequest) -> bool: + """ + check if the request is for health check + + Args: + request(BaseRequest): http reqeust descriptor + + Returns: + bool: True in case if request is health check and false otherwise + """ + return request.method == "GET" and FilteredAccessLogger.HEALTH_PATH_REGEX == request.path + @staticmethod def is_logs_post(request: BaseRequest) -> bool: """ @@ -69,7 +84,8 @@ class FilteredAccessLogger(AccessLogger): response(StreamResponse): streaming response object time(float): log record timestamp """ - if self.is_logs_post(request) \ + if self.is_info_get(request) \ + or self.is_logs_post(request) \ or self.is_process_get(request): return AccessLogger.log(self, request, response, time) diff --git a/tests/ahriman/core/log/test_filtered_access_logger.py b/tests/ahriman/core/log/test_filtered_access_logger.py index d532485c..923cdc81 100644 --- a/tests/ahriman/core/log/test_filtered_access_logger.py +++ b/tests/ahriman/core/log/test_filtered_access_logger.py @@ -4,6 +4,25 @@ from unittest.mock import MagicMock from ahriman.core.log.filtered_access_logger import FilteredAccessLogger +def is_info_get() -> None: + """ + must correctly define health check request + """ + request = MagicMock() + + request.method = "GET" + request.path = "/api/v1/info" + assert FilteredAccessLogger.is_info_get(request) + + request.method = "POST" + request.path = "/api/v1/info" + assert not FilteredAccessLogger.is_info_get(request) + + request.method = "GET" + request.path = "/api/v1/infos" + assert not FilteredAccessLogger.is_info_get(request) + + def test_is_logs_post() -> None: """ must correctly define if request belongs to logs posting