/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
src/liquidcode/profiler.py
53 строки
2 KB
User
ci: настроен Black и flake8 для автоматического форматирования кода
04 июл 2026, 08:14
04 июл 2026, 08:14
4778ed6
Код
Авторство
О чём код?
""" Профайлер для замера времени выполнения middleware и контроллеров. """ import logging import time from typing import Dict, List, Any, Optional logger = logging.getLogger(__name__) class ProfilerContext: """ Контекст профайлера для одного запроса. """ def __init__(self): self._start_time = time.time() self._middlewares: List[Dict[str, Any]] = [] self._controller_duration: Optional[float] = None self._total_duration: Optional[float] = None def add_middleware(self, name: str, duration: float) -> None: """Добавляет запись о выполнении middleware.""" self._middlewares.append({"name": name, "duration": duration}) def set_controller(self, duration: float) -> None: """Устанавливает время выполнения контроллера.""" self._controller_duration = duration def finish(self) -> None: """Завершает профайлинг и вычисляет общее время.""" self._total_duration = time.time() - self._start_time def report(self) -> str: """Возвращает строковый отчёт о выполнении запроса.""" lines = [] lines.append(f" Общее время: {self._total_duration:.4f} сек") if self._middlewares: lines.append(" Middleware:") for mw in self._middlewares: lines.append(f" {mw['name']}: {mw['duration']:.4f} сек") if self._controller_duration is not None: lines.append(f" Контроллер: {self._controller_duration:.4f} сек") return "\n".join(lines) def get_data(self) -> Dict[str, Any]: """Возвращает данные в виде словаря (для JSON-сериализации).""" return { "total": self._total_duration, "middlewares": self._middlewares, "controller": self._controller_duration, }