From 0aa39506b7db371f4c502f02feff1f046f2d2493 Mon Sep 17 00:00:00 2001 From: prafful Date: Fri, 16 Aug 2024 23:51:56 +0530 Subject: [PATCH 1/5] added a request time logging middleware --- care/middleware/__init__.py | 0 care/middleware/time_logging_middleware.py | 39 ++++++++++++++++++++++ config/settings/base.py | 1 + 3 files changed, 40 insertions(+) create mode 100644 care/middleware/__init__.py create mode 100644 care/middleware/time_logging_middleware.py diff --git a/care/middleware/__init__.py b/care/middleware/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/middleware/time_logging_middleware.py b/care/middleware/time_logging_middleware.py new file mode 100644 index 0000000000..d750b2985e --- /dev/null +++ b/care/middleware/time_logging_middleware.py @@ -0,0 +1,39 @@ +import logging +import time +from datetime import datetime + + +class CustomFormatter(logging.Formatter): + def format(self, record): + return ( + f"INFO {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {record.getMessage()}" + ) + + +logger = logging.getLogger("time_logging_middleware") +logger.setLevel(logging.INFO) +logger.propagate = False + +for handler in logger.handlers[:]: + logger.removeHandler(handler) + +handler = logging.StreamHandler() +handler.setFormatter(CustomFormatter()) +logger.addHandler(handler) + + +class RequestTimeLoggingMiddleware: + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + request.start_time = time.time() + + response = self.get_response(request) + + duration = time.time() - request.start_time + + logger.info(f"Request to {request.path} took {duration:.4f} seconds") + + return response diff --git a/config/settings/base.py b/config/settings/base.py index c9430e24f8..10c25a0e91 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -188,6 +188,7 @@ "simple_history.middleware.HistoryRequestMiddleware", "maintenance_mode.middleware.MaintenanceModeMiddleware", "care.audit_log.middleware.AuditLogMiddleware", + "care.middleware.time_logging_middleware.RequestTimeLoggingMiddleware", ] # STATIC From 838a8330db3c592fb9cc02c24491b3cfa49522a4 Mon Sep 17 00:00:00 2001 From: prafful Date: Sun, 25 Aug 2024 15:25:11 +0530 Subject: [PATCH 2/5] removed custom config and updated the django logging config --- care/middleware/time_logging_middleware.py | 31 +++++----------------- config/settings/base.py | 23 ++++++++++++++-- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/care/middleware/time_logging_middleware.py b/care/middleware/time_logging_middleware.py index d750b2985e..5dfdaa59a8 100644 --- a/care/middleware/time_logging_middleware.py +++ b/care/middleware/time_logging_middleware.py @@ -1,39 +1,20 @@ import logging import time -from datetime import datetime - -class CustomFormatter(logging.Formatter): - def format(self, record): - return ( - f"INFO {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {record.getMessage()}" - ) - - -logger = logging.getLogger("time_logging_middleware") -logger.setLevel(logging.INFO) -logger.propagate = False - -for handler in logger.handlers[:]: - logger.removeHandler(handler) - -handler = logging.StreamHandler() -handler.setFormatter(CustomFormatter()) -logger.addHandler(handler) +from django.conf import settings class RequestTimeLoggingMiddleware: - def __init__(self, get_response): self.get_response = get_response + self.logger = logging.getLogger("time_logging_middleware") def __call__(self, request): - request.start_time = time.time() + if not getattr(settings, "ENABLE_REQUEST_TIME_LOGGING", False): + return self.get_response(request) + request.start_time = time.time() response = self.get_response(request) - duration = time.time() - request.start_time - - logger.info(f"Request to {request.path} took {duration:.4f} seconds") - + self.logger.info(f"Request to {request.path} took {duration:.4f} seconds") return response diff --git a/config/settings/base.py b/config/settings/base.py index 3c13e2fe83..238b6418f9 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -317,14 +317,30 @@ "verbose": { "format": "%(levelname)s %(asctime)s %(module)s " "%(process)d %(thread)d %(message)s" - } + }, + "request_time": { + "format": "INFO %(asctime)s %(message)s", + "datefmt": "%Y-%m-%d %H:%M:%S", + }, }, "handlers": { "console": { "level": "DEBUG", "class": "logging.StreamHandler", "formatter": "verbose", - } + }, + "time_logging": { + "level": "INFO", + "class": "logging.StreamHandler", + "formatter": "request_time", + }, + }, + "loggers": { + "time_logging_middleware": { + "handlers": ["time_logging"], + "level": "INFO", + "propagate": False, + }, }, "root": {"level": "INFO", "handlers": ["console"]}, } @@ -656,3 +672,6 @@ TASK_SUMMARIZE_DISTRICT_PATIENT = env.bool( "TASK_SUMMARIZE_DISTRICT_PATIENT", default=True ) + +# Time logging middleware +ENABLE_REQUEST_TIME_LOGGING = env.bool("ENABLE_REQUEST_TIME_LOGGING", default=True) From b99a15e52f433669396ff098116f5e90a7a8835a Mon Sep 17 00:00:00 2001 From: prafful Date: Thu, 29 Aug 2024 17:33:54 +0530 Subject: [PATCH 3/5] updated middleware location --- care/middleware/__init__.py | 0 .../time_logging_middleware.py => config/middleware.py | 5 ----- config/settings/base.py | 8 ++++---- 3 files changed, 4 insertions(+), 9 deletions(-) delete mode 100644 care/middleware/__init__.py rename care/middleware/time_logging_middleware.py => config/middleware.py (76%) diff --git a/care/middleware/__init__.py b/care/middleware/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/care/middleware/time_logging_middleware.py b/config/middleware.py similarity index 76% rename from care/middleware/time_logging_middleware.py rename to config/middleware.py index 5dfdaa59a8..3243201a56 100644 --- a/care/middleware/time_logging_middleware.py +++ b/config/middleware.py @@ -1,8 +1,6 @@ import logging import time -from django.conf import settings - class RequestTimeLoggingMiddleware: def __init__(self, get_response): @@ -10,9 +8,6 @@ def __init__(self, get_response): self.logger = logging.getLogger("time_logging_middleware") def __call__(self, request): - if not getattr(settings, "ENABLE_REQUEST_TIME_LOGGING", False): - return self.get_response(request) - request.start_time = time.time() response = self.get_response(request) duration = time.time() - request.start_time diff --git a/config/settings/base.py b/config/settings/base.py index 238b6418f9..6e66e54a21 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -191,9 +191,12 @@ "simple_history.middleware.HistoryRequestMiddleware", "maintenance_mode.middleware.MaintenanceModeMiddleware", "care.audit_log.middleware.AuditLogMiddleware", - "care.middleware.time_logging_middleware.RequestTimeLoggingMiddleware", ] +# add RequestTimeLoggingMiddleware based on the environment variable +if env.bool("ENABLE_REQUEST_TIME_LOGGING", default=True): + MIDDLEWARE.append("config.middleware.RequestTimeLoggingMiddleware") + # STATIC # ------------------------------------------------------------------------------ # https://docs.djangoproject.com/en/dev/ref/settings/#static-files @@ -672,6 +675,3 @@ TASK_SUMMARIZE_DISTRICT_PATIENT = env.bool( "TASK_SUMMARIZE_DISTRICT_PATIENT", default=True ) - -# Time logging middleware -ENABLE_REQUEST_TIME_LOGGING = env.bool("ENABLE_REQUEST_TIME_LOGGING", default=True) From 5dcd7a58d8bdabdf332ed87dd433a68dda5c21af Mon Sep 17 00:00:00 2001 From: prafful Date: Sat, 7 Sep 2024 19:26:19 +0530 Subject: [PATCH 4/5] fixed middleware position --- config/settings/base.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/config/settings/base.py b/config/settings/base.py index db64fe5cc3..3398316455 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -6,10 +6,10 @@ import json from datetime import datetime, timedelta from pathlib import Path -from django.utils.translation import gettext_lazy as _ import environ from authlib.jose import JsonWebKey +from django.utils.translation import gettext_lazy as _ from healthy_django.healthcheck.celery_queue_length import ( DjangoCeleryQueueLengthHealthCheck, ) @@ -55,7 +55,6 @@ # https://docs.djangoproject.com/en/dev/ref/settings/#locale-paths LOCALE_PATHS = [str(BASE_DIR / "locale")] - LANGUAGES = [ ("en-us", _("English")), ("ml", _("Malayalam")), @@ -203,7 +202,7 @@ # add RequestTimeLoggingMiddleware based on the environment variable if env.bool("ENABLE_REQUEST_TIME_LOGGING", default=True): - MIDDLEWARE.append("config.middleware.RequestTimeLoggingMiddleware") + MIDDLEWARE.insert(0, "config.middleware.RequestTimeLoggingMiddleware") # STATIC # ------------------------------------------------------------------------------ From 254fd38e82008ea341291adf033335d8ceb38747 Mon Sep 17 00:00:00 2001 From: Vignesh Hari <14056798+vigneshhari@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:07:00 +0530 Subject: [PATCH 5/5] Time middleware needs to be disabled by default --- config/settings/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/settings/base.py b/config/settings/base.py index 3398316455..b7d2c07589 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -201,7 +201,7 @@ ] # add RequestTimeLoggingMiddleware based on the environment variable -if env.bool("ENABLE_REQUEST_TIME_LOGGING", default=True): +if env.bool("ENABLE_REQUEST_TIME_LOGGING", default=False): MIDDLEWARE.insert(0, "config.middleware.RequestTimeLoggingMiddleware") # STATIC