6 Commits

9 changed files with 35 additions and 10 deletions

View File

@@ -164,10 +164,25 @@ async def get_server_info():
"""Получение подробной информации о сервере"""
import platform
import sys
import os
import psutil
# Получаем информацию о процессе
process = psutil.Process()
parent_process = process.parent()
# Получаем информацию о системе
cpu_cores = psutil.cpu_count()
memory_info = psutil.virtual_memory()
memory_mb = memory_info.total / (1024 * 1024) # Конвертируем в MB
return {
"message": "Svodka Parser API",
"version": "1.0.0",
"process_id": process.pid,
"parent_id": parent_process.pid if parent_process else None,
"cpu_cores": cpu_cores,
"memory_mb": memory_mb,
"python_version": sys.version,
"platform": platform.platform(),
"available_parsers": list(PARSERS.keys())

View File

@@ -268,6 +268,7 @@ async def get_monitoring_fuel_series_by_id_and_columns(
@router.post("/async/monitoring_fuel/upload-zip", tags=[MonitoringFuelParser.name],
summary="Асинхронная загрузка файлов сводок мониторинга топлива одним ZIP-архивом",
response_model=UploadResponse,
include_in_schema=False,
responses={
400: {"model": UploadErrorResponse, "description": "Неверный формат архива или файлов"},
500: {"model": UploadErrorResponse, "description": "Внутренняя ошибка сервера"}

View File

@@ -161,6 +161,7 @@ async def get_monitoring_tar_full_data(
@router.post("/async/monitoring_tar/upload", tags=[MonitoringTarParser.name],
summary="Асинхронная загрузка файла отчета мониторинга ТАР",
response_model=UploadResponse,
include_in_schema=False,
responses={
400: {"model": UploadErrorResponse, "description": "Неверный формат файла"},
500: {"model": UploadErrorResponse, "description": "Внутренняя ошибка сервера"}

View File

@@ -41,20 +41,20 @@ def get_async_report_service() -> AsyncReportService:
500: {"model": UploadErrorResponse, "description": "Внутренняя ошибка сервера"}
},)
async def upload_oper_spravka_tech_pos(
file: UploadFile = File(..., description="Excel файл оперативной справки техпос (.xlsx, .xlsm, .xls)")
file: UploadFile = File(..., description="ZIP архив с файлами оперативной справки техпос (.zip)")
):
"""Загрузка и обработка отчета оперативной справки техпос"""
report_service = get_report_service()
try:
if not file.filename.endswith(('.xlsx', '.xlsm', '.xls')):
if not file.filename.endswith('.zip'):
return JSONResponse(
status_code=status.HTTP_400_BAD_REQUEST,
content=UploadErrorResponse(
message="Поддерживаются только Excel файлы (.xlsx, .xlsm, .xls)",
message="Поддерживаются только ZIP архивы (.zip)",
error_code="INVALID_FILE_TYPE",
details={
"expected_formats": [".xlsx", ".xlsm", ".xls"],
"expected_formats": [".zip"],
"received_format": file.filename.split('.')[-1] if '.' in file.filename else "unknown"
}
).model_dump()
@@ -115,9 +115,11 @@ async def get_oper_spravka_tech_pos_data(
result = report_service.get_data(request)
if result.success:
# Извлекаем данные из result.data["value"]
data = result.data.get("value", []) if isinstance(result.data, dict) else result.data
return OperSpravkaTechPosResponse(
success=True,
data=result.data
data=data
)
else:
raise HTTPException(status_code=404, detail=result.message)
@@ -131,25 +133,26 @@ async def get_oper_spravka_tech_pos_data(
@router.post("/async/oper_spravka_tech_pos/upload", tags=[OperSpravkaTechPosParser.name],
summary="Асинхронная загрузка файла отчета оперативной справки техпос",
response_model=UploadResponse,
include_in_schema=False,
responses={
400: {"model": UploadErrorResponse, "description": "Неверный формат файла"},
500: {"model": UploadErrorResponse, "description": "Внутренняя ошибка сервера"}
},)
async def async_upload_oper_spravka_tech_pos(
file: UploadFile = File(..., description="Excel файл оперативной справки техпос (.xlsx, .xlsm, .xls)")
file: UploadFile = File(..., description="ZIP архив с файлами оперативной справки техпос (.zip)")
):
"""Асинхронная загрузка и обработка отчета оперативной справки техпос"""
async_service = get_async_report_service()
try:
if not file.filename.endswith(('.xlsx', '.xlsm', '.xls')):
if not file.filename.endswith('.zip'):
return JSONResponse(
status_code=status.HTTP_400_BAD_REQUEST,
content=UploadErrorResponse(
message="Поддерживаются только Excel файлы (.xlsx, .xlsm, .xls)",
message="Поддерживаются только ZIP архивы (.zip)",
error_code="INVALID_FILE_TYPE",
details={
"expected_formats": [".xlsx", ".xlsm", ".xls"],
"expected_formats": [".zip"],
"received_format": file.filename.split('.')[-1] if '.' in file.filename else "unknown"
}
).model_dump()

View File

@@ -130,6 +130,7 @@ async def get_statuses_repair_ca_data(
@router.post("/async/statuses_repair_ca/upload", tags=[StatusesRepairCAParser.name],
summary="Асинхронная загрузка файла отчета статусов ремонта СА",
response_model=UploadResponse,
include_in_schema=False,
responses={
400: {"model": UploadErrorResponse, "description": "Неверный формат файла"},
500: {"model": UploadErrorResponse, "description": "Внутренняя ошибка сервера"}

View File

@@ -163,6 +163,7 @@ async def get_svodka_ca_data(
@router.post("/async/svodka_ca/upload", tags=[SvodkaCAParser.name],
summary="Асинхронная загрузка файла отчета сводки СА",
response_model=UploadResponse,
include_in_schema=False,
responses={
400: {"model": UploadErrorResponse, "description": "Неверный формат файла"},
500: {"model": UploadErrorResponse, "description": "Внутренняя ошибка сервера"}

View File

@@ -262,6 +262,7 @@ async def get_svodka_pm_data(
@router.post("/async/svodka_pm/upload-zip", tags=[SvodkaPMParser.name],
summary="Асинхронная загрузка файлов сводок ПМ одним ZIP-архивом",
response_model=UploadResponse,
include_in_schema=False,
responses={
400: {"model": UploadErrorResponse, "description": "Неверный формат архива или файлов"},
500: {"model": UploadErrorResponse, "description": "Внутренняя ошибка сервера"}

View File

@@ -130,6 +130,7 @@ async def get_svodka_repair_ca_data(
@router.post("/async/svodka_repair_ca/upload", tags=[SvodkaRepairCAParser.name],
summary="Асинхронная загрузка файла отчета сводки ремонта СА",
response_model=UploadResponse,
include_in_schema=False,
responses={
400: {"model": UploadErrorResponse, "description": "Неверный формат файла"},
500: {"model": UploadErrorResponse, "description": "Внутренняя ошибка сервера"}

View File

@@ -11,4 +11,5 @@ requests>=2.31.0
# pytest-cov>=4.0.0
# pytest-mock>=3.10.0
httpx>=0.24.0
numpy
numpy
psutil>=5.9.0