diff --git a/aiogram/__init__.py b/aiogram/__init__.py index 537a9994..a98b84fd 100644 --- a/aiogram/__init__.py +++ b/aiogram/__init__.py @@ -1,8 +1,21 @@ from .api import methods, types from .api.client import session from .api.client.bot import Bot +from .dispatcher import filters +from .dispatcher.dispatcher import Dispatcher +from .dispatcher.router import Router -__all__ = ("__api_version__", "__version__", "types", "methods", "Bot", "session") +__all__ = ( + "__api_version__", + "__version__", + "types", + "methods", + "Bot", + "session", + "Dispatcher", + "Router", + "filters", +) __version__ = "3.0.0a0" __api_version__ = "4.4" diff --git a/aiogram/dispatcher/dispatcher.py b/aiogram/dispatcher/dispatcher.py index 06c95155..4bcbbfa7 100644 --- a/aiogram/dispatcher/dispatcher.py +++ b/aiogram/dispatcher/dispatcher.py @@ -1,5 +1,7 @@ +import asyncio from typing import AsyncGenerator, Optional +from .. import loggers from ..api.client.bot import Bot from ..api.methods import TelegramMethod from ..api.types import Update @@ -24,9 +26,23 @@ class Dispatcher(Router): :param update: :return: """ + loop = asyncio.get_running_loop() + handled = False + start_time = loop.time() + Bot.set_current(bot) async for result in self.update_handler.trigger(update, bot=bot, **kwargs): yield result + handled = True + + finish_time = loop.time() + duration = (finish_time - start_time) * 1000 + loggers.dispatcher.info( + "Update id=%s is %s. Duration %d ms.", + update.update_id, + "handled" if handled else "not handled", + duration, + ) @classmethod async def listen_updates(cls, bot: Bot) -> AsyncGenerator[Update, None]: diff --git a/aiogram/loggers.py b/aiogram/loggers.py new file mode 100644 index 00000000..0352c0df --- /dev/null +++ b/aiogram/loggers.py @@ -0,0 +1,3 @@ +import logging + +dispatcher = logging.getLogger("aiogram.dispatcher")