Spaces:
Sleeping
Sleeping
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)) |