logs: логируем время
This commit is contained in:
parent
fbf02d80d9
commit
2a45d45bc1
@ -1,3 +1,4 @@
|
|||||||
|
import logging
|
||||||
import time
|
import time
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
@ -20,6 +21,9 @@ SHEETS_WITH_SECTIONS = {"AHR", "CAP", "OPER"}
|
|||||||
FORM1_DIRECTION_REQUIRED_SHEETS = {"AHR", "CAP"}
|
FORM1_DIRECTION_REQUIRED_SHEETS = {"AHR", "CAP"}
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
||||||
def _rows_to_sheet_response(result: list[tuple]) -> list[SheetResponse]:
|
def _rows_to_sheet_response(result: list[tuple]) -> list[SheetResponse]:
|
||||||
return [
|
return [
|
||||||
SheetResponse(
|
SheetResponse(
|
||||||
@ -153,6 +157,20 @@ async def get_sheet(
|
|||||||
)
|
)
|
||||||
db_ms = (time.perf_counter() - t0) * 1000
|
db_ms = (time.perf_counter() - t0) * 1000
|
||||||
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
||||||
|
extra={
|
||||||
|
"type": "db_time",
|
||||||
|
"time_ms": f"{db_ms:.2f}",
|
||||||
|
"handler": "get_sheet",
|
||||||
|
"form_id": form_id,
|
||||||
|
"sheet": sheet,
|
||||||
|
"direction": direction,
|
||||||
|
"sections": sections,
|
||||||
|
"user": current_user.id,
|
||||||
|
}
|
||||||
|
logger.info(
|
||||||
|
f"db_time: {extra}",
|
||||||
|
extra=extra,
|
||||||
|
)
|
||||||
return BaseListResponse(
|
return BaseListResponse(
|
||||||
count=len(result),
|
count=len(result),
|
||||||
result=_rows_to_sheet_response(result),
|
result=_rows_to_sheet_response(result),
|
||||||
@ -206,6 +224,22 @@ async def update_cell(
|
|||||||
)
|
)
|
||||||
db_ms = (time.perf_counter() - t0) * 1000
|
db_ms = (time.perf_counter() - t0) * 1000
|
||||||
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
||||||
|
extra={
|
||||||
|
"type": "db_time",
|
||||||
|
"time_ms": f"{db_ms:.2f}",
|
||||||
|
"handler": "update_form_cell",
|
||||||
|
"form_id": form_id,
|
||||||
|
"sheet": sheet,
|
||||||
|
"direction": direction,
|
||||||
|
"sections": sections,
|
||||||
|
"user": current_user.id,
|
||||||
|
"line_id": cell_body.line_id,
|
||||||
|
"column": cell_body.column,
|
||||||
|
}
|
||||||
|
logger.info(
|
||||||
|
f"db_time: {extra}",
|
||||||
|
extra=extra,
|
||||||
|
)
|
||||||
return BaseListResponse(
|
return BaseListResponse(
|
||||||
count=len(result),
|
count=len(result),
|
||||||
result=_rows_to_sheet_response(result),
|
result=_rows_to_sheet_response(result),
|
||||||
@ -261,6 +295,21 @@ async def update_cells(
|
|||||||
)
|
)
|
||||||
db_ms = (time.perf_counter() - t0) * 1000
|
db_ms = (time.perf_counter() - t0) * 1000
|
||||||
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
||||||
|
extra={
|
||||||
|
"type": "db_time",
|
||||||
|
"time_ms": f"{db_ms:.2f}",
|
||||||
|
"handler": "update_form_cells",
|
||||||
|
"form_id": form_id,
|
||||||
|
"sheet": sheet,
|
||||||
|
"direction": direction,
|
||||||
|
"sections": sections,
|
||||||
|
"user": current_user.id,
|
||||||
|
"count": len(cells_body.changes)
|
||||||
|
}
|
||||||
|
logger.info(
|
||||||
|
f"db_time: {extra}",
|
||||||
|
extra=extra,
|
||||||
|
)
|
||||||
return BaseListResponse(
|
return BaseListResponse(
|
||||||
count=len(result),
|
count=len(result),
|
||||||
result=_rows_to_sheet_response(result),
|
result=_rows_to_sheet_response(result),
|
||||||
@ -310,6 +359,21 @@ async def add_line(
|
|||||||
)
|
)
|
||||||
db_ms = (time.perf_counter() - t0) * 1000
|
db_ms = (time.perf_counter() - t0) * 1000
|
||||||
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
||||||
|
|
||||||
|
extra={
|
||||||
|
"type": "db_time",
|
||||||
|
"time_ms": f"{db_ms:.2f}",
|
||||||
|
"handler": "add_form_line",
|
||||||
|
"form_id": form_id,
|
||||||
|
"sheet": sheet,
|
||||||
|
"direction": body.direction,
|
||||||
|
"user": current_user.id,
|
||||||
|
"expense_item_id": body.expense_item_id
|
||||||
|
}
|
||||||
|
logger.info(
|
||||||
|
f"db_time: {extra}",
|
||||||
|
extra=extra,
|
||||||
|
)
|
||||||
return BaseListResponse(
|
return BaseListResponse(
|
||||||
count=len(result),
|
count=len(result),
|
||||||
result=_rows_to_sheet_response(result),
|
result=_rows_to_sheet_response(result),
|
||||||
@ -351,6 +415,21 @@ async def delete_line(
|
|||||||
)
|
)
|
||||||
db_ms = (time.perf_counter() - t0) * 1000
|
db_ms = (time.perf_counter() - t0) * 1000
|
||||||
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
||||||
|
extra={
|
||||||
|
"type": "db_time",
|
||||||
|
"time_ms": f"{db_ms:.2f}",
|
||||||
|
"handler": "del_form_line",
|
||||||
|
"form_id": form_id,
|
||||||
|
"sheet": sheet,
|
||||||
|
"direction": direction,
|
||||||
|
"user": current_user.id,
|
||||||
|
"line_id": row_id,
|
||||||
|
}
|
||||||
|
logger.info(
|
||||||
|
f"db_time: {extra}",
|
||||||
|
extra=extra,
|
||||||
|
)
|
||||||
|
|
||||||
return BaseListResponse(
|
return BaseListResponse(
|
||||||
count=len(result),
|
count=len(result),
|
||||||
result=_rows_to_sheet_response(result),
|
result=_rows_to_sheet_response(result),
|
||||||
@ -384,6 +463,18 @@ async def add_form(
|
|||||||
|
|
||||||
db_ms = (time.perf_counter() - t0) * 1000
|
db_ms = (time.perf_counter() - t0) * 1000
|
||||||
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
||||||
|
extra={
|
||||||
|
"type": "db_time",
|
||||||
|
"time_ms": f"{db_ms:.2f}",
|
||||||
|
"handler": "add_form",
|
||||||
|
"form_type_code": form.form_type_code,
|
||||||
|
"user": current_user.id,
|
||||||
|
"count_orgs": len(form.org_unit_ids),
|
||||||
|
}
|
||||||
|
logger.info(
|
||||||
|
f"db_time: {extra}",
|
||||||
|
extra=extra,
|
||||||
|
)
|
||||||
|
|
||||||
return BaseListResponse(
|
return BaseListResponse(
|
||||||
result=[BudgetFormResponse.model_validate(new_form) for new_form in new_forms],
|
result=[BudgetFormResponse.model_validate(new_form) for new_form in new_forms],
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import logging
|
||||||
import time
|
import time
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
@ -20,6 +21,9 @@ from src.domain.schemas import (
|
|||||||
from src.services.project_service import ProjectService
|
from src.services.project_service import ProjectService
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
||||||
router = APIRouter(tags=["forms"])
|
router = APIRouter(tags=["forms"])
|
||||||
FORM3_ALLOWED_SECTIONS = {"q1", "q2", "q3", "q4", "year"}
|
FORM3_ALLOWED_SECTIONS = {"q1", "q2", "q3", "q4", "year"}
|
||||||
|
|
||||||
@ -96,6 +100,20 @@ async def get_project_report(
|
|||||||
)
|
)
|
||||||
db_ms = (time.perf_counter() - t0) * 1000
|
db_ms = (time.perf_counter() - t0) * 1000
|
||||||
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
||||||
|
extra={
|
||||||
|
"type": "db_time",
|
||||||
|
"time_ms": f"{db_ms:.2f}",
|
||||||
|
"handler": "get_project_report",
|
||||||
|
"project_id": project_id,
|
||||||
|
"year": year,
|
||||||
|
"report_type": report_type,
|
||||||
|
"sections": sections,
|
||||||
|
"user": current_user.id,
|
||||||
|
}
|
||||||
|
logger.info(
|
||||||
|
f"db_time: {extra}",
|
||||||
|
extra=extra,
|
||||||
|
)
|
||||||
return BaseListResponse(count=len(rows), result=_rows_to_payload(rows))
|
return BaseListResponse(count=len(rows), result=_rows_to_payload(rows))
|
||||||
|
|
||||||
|
|
||||||
@ -118,6 +136,19 @@ async def get_rf_rollup(
|
|||||||
)
|
)
|
||||||
db_ms = (time.perf_counter() - t0) * 1000
|
db_ms = (time.perf_counter() - t0) * 1000
|
||||||
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
response.headers["X-DB-Time-Ms"] = f"{db_ms:.2f}"
|
||||||
|
extra={
|
||||||
|
"type": "db_time",
|
||||||
|
"time_ms": f"{db_ms:.2f}",
|
||||||
|
"handler": "get_project_report",
|
||||||
|
"branch_id": branch_id,
|
||||||
|
"year": year,
|
||||||
|
"sections": sections,
|
||||||
|
"user": current_user.id,
|
||||||
|
}
|
||||||
|
logger.info(
|
||||||
|
f"db_time: {extra}",
|
||||||
|
extra=extra,
|
||||||
|
)
|
||||||
return BaseListResponse(count=len(rows), result=_rows_to_payload(rows))
|
return BaseListResponse(count=len(rows), result=_rows_to_payload(rows))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,8 @@ from dataclasses import asdict
|
|||||||
import dataclasses
|
import dataclasses
|
||||||
import enum
|
import enum
|
||||||
from json import dumps, loads
|
from json import dumps, loads
|
||||||
|
import logging
|
||||||
|
import time
|
||||||
from typing import Any, Optional
|
from typing import Any, Optional
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -26,6 +28,9 @@ from src.db.session import SessionLocal
|
|||||||
from src.services.user_service import UserService
|
from src.services.user_service import UserService
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def get_db_session(user_id: int | None = None):
|
async def get_db_session(user_id: int | None = None):
|
||||||
"""Контекстный менеджер для получения сессии базы данных."""
|
"""Контекстный менеджер для получения сессии базы данных."""
|
||||||
@ -770,12 +775,25 @@ async def process_websocket(
|
|||||||
|
|
||||||
async with get_db_session(user_id=user_id) as db:
|
async with get_db_session(user_id=user_id) as db:
|
||||||
processor = processor_cls(db)
|
processor = processor_cls(db)
|
||||||
|
t0 = time.perf_counter()
|
||||||
data["result"] = await processor.process(
|
data["result"] = await processor.process(
|
||||||
event_data=data,
|
event_data=data,
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
**kwargs_process
|
**kwargs_process
|
||||||
)
|
)
|
||||||
await db.commit()
|
await db.commit()
|
||||||
|
db_ms = (time.perf_counter() - t0) * 1000
|
||||||
|
|
||||||
|
extra = {
|
||||||
|
"type": "db_time",
|
||||||
|
"time_ms": f"{db_ms:.2f}",
|
||||||
|
"event": data.get("event"),
|
||||||
|
}
|
||||||
|
extra.update(data)
|
||||||
|
logger.info(
|
||||||
|
f"db_time: {extra}",
|
||||||
|
extra=extra,
|
||||||
|
)
|
||||||
|
|
||||||
if data.get("event") == "row_deleted":
|
if data.get("event") == "row_deleted":
|
||||||
manager.release_locks_for_row(
|
manager.release_locks_for_row(
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
@ -20,6 +21,10 @@ from src.core.exception_handlers import register_exception_handlers
|
|||||||
from src.db.base import engine
|
from src.db.base import engine
|
||||||
from src.db.session import create_tables
|
from src.db.session import create_tables
|
||||||
|
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
|
|
||||||
if not settings.DEBUG:
|
if not settings.DEBUG:
|
||||||
from raisa_fastapi_protected_api import (
|
from raisa_fastapi_protected_api import (
|
||||||
AuthorizationMiddleware,
|
AuthorizationMiddleware,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user