implemented response timing via time_view decorator

This commit is contained in:
2025-10-02 13:32:09 +03:00
parent 86961ff758
commit cc88de2c69
3 changed files with 32 additions and 0 deletions

0
utils/__init__.py Normal file
View File

26
utils/decorators.py Normal file
View File

@@ -0,0 +1,26 @@
import time
from functools import wraps
from rest_framework.response import Response
def time_view(view_func):
"""Decorator to measure the execution time and add it to the JSON response."""
@wraps(view_func)
def wrapper(request, *args, **kwargs):
start_time = time.perf_counter()
response = view_func(request, *args, **kwargs)
end_time = time.perf_counter()
elapsed_time = end_time - start_time
if isinstance(response, Response) and isinstance(response.data, dict):
response.data["time_elapsed_seconds"] = f"{elapsed_time:.4f}"
print(f"[{view_func.__name__}] Time elapsed: {elapsed_time:.4f} seconds")
return response
return wrapper

View File

@@ -31,6 +31,9 @@ from rest_framework.response import Response
from rest_framework import status from rest_framework import status
from uplim.models import Pixel, CatalogSource from uplim.models import Pixel, CatalogSource
from .utils.decorators import time_view
from django.utils.decorators import method_decorator
# SANITIZE RESPONSE DATA BEFORE JSON CONVERSION FOR DEBUGGING NANS # SANITIZE RESPONSE DATA BEFORE JSON CONVERSION FOR DEBUGGING NANS
# now NaNs are converted to 'null' beforehand # now NaNs are converted to 'null' beforehand
# **************************************************************** # ****************************************************************
@@ -70,6 +73,7 @@ def parse_survey_param(raw):
# ************************************************************** # **************************************************************
@method_decorator(time_view, name="dispatch")
class PixelAggregateView(APIView): class PixelAggregateView(APIView):
def get(self, request): def get(self, request):
@@ -132,6 +136,7 @@ class PixelAggregateView(APIView):
# ************************************************************** # **************************************************************
@method_decorator(time_view, name="dispatch")
class UpperLimitView(APIView): class UpperLimitView(APIView):
""" """
Calculate confidence bounds based on aperture photometry using classic and bayesian methods Calculate confidence bounds based on aperture photometry using classic and bayesian methods
@@ -538,6 +543,7 @@ class UpperLimitView(APIView):
return Response(clean, status=status.HTTP_200_OK) return Response(clean, status=status.HTTP_200_OK)
@method_decorator(time_view, name="dispatch")
class StackedUpperLimitView(APIView): class StackedUpperLimitView(APIView):
""" """
Calculate confidence bounds based on aperture photometry using classic and bayesian methods for a set of sources Calculate confidence bounds based on aperture photometry using classic and bayesian methods for a set of sources