Spaces:
Runtime error
Runtime error
| from io import BytesIO | |
| import logging | |
| from datetime import datetime | |
| import sys | |
| from typing import Annotated, List, Optional | |
| from fastapi import APIRouter, Depends, HTTPException, Query | |
| from fastapi.responses import StreamingResponse | |
| from pydantic import BaseModel | |
| from common import auth | |
| from common.common import configure_logging | |
| from components.services.log import LogService | |
| from schemas.log import LogCreateSchema, LogFilterSchema, LogSchema, PaginatedLogResponse | |
| import common.dependencies as DI | |
| import pandas as pd | |
| router = APIRouter(tags=['Logs']) | |
| logger = logging.getLogger(__name__) | |
| configure_logging() | |
| async def get_all_logs( | |
| filters: Annotated[LogFilterSchema, Depends()], | |
| log_service: Annotated[LogService, Depends(DI.get_log_service)], | |
| current_user: Annotated[any, Depends(auth.get_current_user)] | |
| ): | |
| logger.info(f"Fetching logsываыва with filters: {filters.model_dump(exclude_none=True)}") | |
| logger.info(f'GET /logs') | |
| try: | |
| return log_service.get_list(filters) | |
| except HTTPException as e: | |
| raise e | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| async def get_all_logs_excel( | |
| filters: LogFilterSchema = Depends(), | |
| log_service: LogService = Depends(DI.get_log_service), | |
| current_user: any = Depends(auth.get_current_user) | |
| ): | |
| logger.info(f'GET /logs/excel with filters: {filters.model_dump(exclude_none=True)}') | |
| try: | |
| # Получаем логи без пагинации (все записи по фильтру) | |
| filters.page = 1 | |
| filters.page_size = sys.maxsize | |
| logs_response = log_service.get_list(filters) | |
| logs_data = [ | |
| { | |
| 'ID': log.id, | |
| 'Date Created': log.date_created, | |
| 'User Name': log.user_name or '', | |
| 'Chat ID': log.chat_id or '', | |
| 'User Request': log.user_request or '', | |
| 'QE Result': log.qe_result or '', | |
| 'Search Result': log.search_result or '', | |
| 'LLM Result': log.llm_result or '' | |
| } | |
| for log in logs_response.data | |
| ] | |
| df = pd.DataFrame(logs_data) | |
| output = BytesIO() | |
| with pd.ExcelWriter(output, engine='openpyxl') as writer: | |
| df.to_excel(writer, index=False, sheet_name='Logs') | |
| headers = { | |
| 'Content-Disposition': 'attachment; filename="logs.xlsx"', | |
| 'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' | |
| } | |
| output.seek(0) | |
| return StreamingResponse(output, headers=headers, media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') | |
| except HTTPException as e: | |
| raise e | |
| except Exception as e: | |
| logger.error(f'Error generating Excel: {str(e)}') | |
| raise HTTPException(status_code=500, detail=str(e)) |