From cf25f364d11db2a1af40689bc7f2d66168df50f1 Mon Sep 17 00:00:00 2001 From: poturaevpetr Date: Fri, 16 Jan 2026 11:11:17 +0500 Subject: [PATCH] add check dublicate, add balancer --- apiApp/routers/audio_management_router.py | 34 +++++++++++++++++++---- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/apiApp/routers/audio_management_router.py b/apiApp/routers/audio_management_router.py index 6e966e0..a9dfef4 100644 --- a/apiApp/routers/audio_management_router.py +++ b/apiApp/routers/audio_management_router.py @@ -214,7 +214,8 @@ async def process_all_pending_audio( 200 OK + { "started_count": 15, "pending_files": ["file1.wav", "file2.wav", ...], - "total_pending": 50 + "total_pending": 50, + "skipped_duplicates": 2 } """ try: @@ -232,6 +233,7 @@ async def process_all_pending_audio( "started_count": 0, "pending_files": [], "total_pending": 0, + "skipped_duplicates": 0, "message": "Нет файлов без AiConclusion" } @@ -240,6 +242,7 @@ async def process_all_pending_audio( # Добавляем задачи в фон started_count = 0 pending_files = [] + skipped_duplicates = 0 # Счётчик дубликатов for audio in pending_audio: # Проверяем, что файл существует @@ -248,25 +251,46 @@ async def process_all_pending_audio( logger.warning(f"⚠️ Файл не найден на диске: {audio.filename}") continue + # ПРОВЕРКА НА ДУБЛИКАТЫ: Проверяем, не обрабатывается ли файл уже + import requests + try: + # Проверяем статус через GigaAM API + check_url = f"{os.getenv('GIGAAM_API_URL', 'http://gigaam_api:5001')}/api/call/check-status" + check_response = requests.post( + check_url, + json={"filename": audio.filename}, + timeout=5 + ) + + if check_response.status_code == 200: + check_data = check_response.json() + if check_data.get('in_queue', False): + logger.info(f"⏭️ Файл уже в очереди GigaAM: {audio.filename}") + skipped_duplicates += 1 + continue + except Exception as e: + # Если проверка упала - всё равно продолжаем + logger.debug(f"Не удалось проверить статус {audio.filename}: {e}") + # Добавляем в фон (асинхронно) - # В FastAPI используем BackgroundTasks - # Но нужно создавать новую сессию для каждого таска pending_files.append(audio.filename) started_count += 1 # Запускаем обработку в фоне - # Используем lambda для захвата audio_id background_tasks.add_task( process_single_audio, str(audio.id) ) logger.info(f"✅ Запущено распознавание для {started_count} файлов") + if skipped_duplicates > 0: + logger.info(f"⏭️ Пропущено дубликатов: {skipped_duplicates}") return { "started_count": started_count, "pending_files": pending_files, - "total_pending": total_pending + "total_pending": total_pending, + "skipped_duplicates": skipped_duplicates } except Exception as e: