From e308ba74ea5bcf3a532c4baf464cd2b5c1771569 Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Sat, 16 Aug 2025 15:51:24 +0300 Subject: [PATCH] feat: implement update logger middleware to enhance bot API call tracking and performance measurement --- apps/bot/src/bot/index.ts | 2 ++ apps/bot/src/bot/middlewares/index.ts | 1 + apps/bot/src/bot/middlewares/update-logger.ts | 34 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 apps/bot/src/bot/middlewares/index.ts create mode 100644 apps/bot/src/bot/middlewares/update-logger.ts diff --git a/apps/bot/src/bot/index.ts b/apps/bot/src/bot/index.ts index ffdb419..d5ecceb 100644 --- a/apps/bot/src/bot/index.ts +++ b/apps/bot/src/bot/index.ts @@ -4,6 +4,7 @@ import { type Context } from './context'; import * as features from './features'; import { errorHandler } from './handlers/errors'; import { i18n } from './i18n'; +import * as middlewares from './middlewares'; import { env } from '@/config/env'; import { logger } from '@/utils/logger'; import { getRedisInstance } from '@/utils/redis'; @@ -52,6 +53,7 @@ export function createBot({ apiRoot, token }: Parameters_) { const protectedBot = bot.errorBoundary(errorHandler); + protectedBot.use(middlewares.updateLogger()); protectedBot.use(setCommands); protectedBot.use(autoChatAction(bot.api)); protectedBot.use(hydrate()); diff --git a/apps/bot/src/bot/middlewares/index.ts b/apps/bot/src/bot/middlewares/index.ts new file mode 100644 index 0000000..5b7aa7a --- /dev/null +++ b/apps/bot/src/bot/middlewares/index.ts @@ -0,0 +1 @@ +export * from './update-logger'; diff --git a/apps/bot/src/bot/middlewares/update-logger.ts b/apps/bot/src/bot/middlewares/update-logger.ts new file mode 100644 index 0000000..c3c6922 --- /dev/null +++ b/apps/bot/src/bot/middlewares/update-logger.ts @@ -0,0 +1,34 @@ +import { type Context } from '@/bot/context'; +import { getUpdateInfo } from '@/bot/helpers/logging'; +import { type Middleware } from 'grammy'; +import { performance } from 'node:perf_hooks'; + +export function updateLogger(): Middleware { + return async (ctx, next) => { + ctx.api.config.use((previous, method, payload, signal) => { + ctx.logger.debug({ + method, + msg: 'Bot API call', + payload, + }); + + return previous(method, payload, signal); + }); + + ctx.logger.debug({ + msg: 'Update received', + update: getUpdateInfo(ctx), + }); + + const startTime = performance.now(); + try { + return next(); + } finally { + const endTime = performance.now(); + ctx.logger.debug({ + elapsed: endTime - startTime, + msg: 'Update processed', + }); + } + }; +}