search-index-metric
This commit is contained in:
1
main.py
1
main.py
@@ -74,6 +74,7 @@ graphql_app = GraphQL(
|
|||||||
|
|
||||||
|
|
||||||
# Оборачиваем GraphQL-обработчик для лучшей обработки ошибок
|
# Оборачиваем GraphQL-обработчик для лучшей обработки ошибок
|
||||||
|
|
||||||
async def graphql_handler(request: Request) -> Response:
|
async def graphql_handler(request: Request) -> Response:
|
||||||
"""
|
"""
|
||||||
Обработчик GraphQL запросов с поддержкой middleware и обработкой ошибок.
|
Обработчик GraphQL запросов с поддержкой middleware и обработкой ошибок.
|
||||||
|
|||||||
@@ -9,6 +9,26 @@ import numpy as np
|
|||||||
from settings import MUVERA_INDEX_NAME, SEARCH_MAX_BATCH_SIZE, SEARCH_PREFETCH_SIZE
|
from settings import MUVERA_INDEX_NAME, SEARCH_MAX_BATCH_SIZE, SEARCH_PREFETCH_SIZE
|
||||||
from utils.logger import root_logger as logger
|
from utils.logger import root_logger as logger
|
||||||
|
|
||||||
|
# Простые метрики производительности поиска
|
||||||
|
class SearchMetrics:
|
||||||
|
def __init__(self):
|
||||||
|
self.indexing_start_time: float | None = None
|
||||||
|
self.documents_indexed: int = 0
|
||||||
|
|
||||||
|
def start_indexing(self, doc_count: int):
|
||||||
|
self.indexing_start_time = time.time()
|
||||||
|
self.documents_indexed = doc_count
|
||||||
|
print(f"🔍 Индексация {doc_count} документов...")
|
||||||
|
|
||||||
|
def end_indexing(self):
|
||||||
|
if self.indexing_start_time:
|
||||||
|
duration = time.time() - self.indexing_start_time
|
||||||
|
rate = self.documents_indexed / duration if duration > 0 else 0
|
||||||
|
print(f"✅ Индексация завершена за {duration:.2f}s ({rate:.1f} doc/s)")
|
||||||
|
|
||||||
|
# Глобальный экземпляр метрик
|
||||||
|
search_metrics = SearchMetrics()
|
||||||
|
|
||||||
# Global collection for background tasks
|
# Global collection for background tasks
|
||||||
background_tasks: List[asyncio.Task] = []
|
background_tasks: List[asyncio.Task] = []
|
||||||
|
|
||||||
@@ -127,7 +147,12 @@ class SearchService:
|
|||||||
# Get Muvera service info
|
# Get Muvera service info
|
||||||
if self.muvera_client:
|
if self.muvera_client:
|
||||||
muvera_info = await self.muvera_client.info()
|
muvera_info = await self.muvera_client.info()
|
||||||
return {"status": "enabled", "provider": "muvera", "mode": "local", "muvera_info": muvera_info}
|
return {
|
||||||
|
"status": "enabled",
|
||||||
|
"provider": "muvera",
|
||||||
|
"mode": "local",
|
||||||
|
"muvera_info": muvera_info
|
||||||
|
}
|
||||||
return {"status": "error", "message": "Muvera client not available"}
|
return {"status": "error", "message": "Muvera client not available"}
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("Failed to get search info")
|
logger.exception("Failed to get search info")
|
||||||
@@ -280,6 +305,8 @@ class SearchService:
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Запускаем метрики индексации
|
||||||
|
search_metrics.start_indexing(len(shouts))
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
logger.info(f"Starting Muvera bulk indexing of {len(shouts)} documents")
|
logger.info(f"Starting Muvera bulk indexing of {len(shouts)} documents")
|
||||||
|
|
||||||
@@ -291,7 +318,7 @@ class SearchService:
|
|||||||
try:
|
try:
|
||||||
# Prepare document data for Muvera
|
# Prepare document data for Muvera
|
||||||
doc_data: Dict[str, Any] = {
|
doc_data: Dict[str, Any] = {
|
||||||
"id": str(shout.id),
|
"id": str(getattr(shout, "id", "")),
|
||||||
"title": getattr(shout, "title", "") or "",
|
"title": getattr(shout, "title", "") or "",
|
||||||
"body": "",
|
"body": "",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
@@ -351,6 +378,8 @@ class SearchService:
|
|||||||
f"Muvera bulk indexing completed in {elapsed:.2f}s: "
|
f"Muvera bulk indexing completed in {elapsed:.2f}s: "
|
||||||
f"{len(documents)} documents indexed, {total_skipped} shouts skipped"
|
f"{len(documents)} documents indexed, {total_skipped} shouts skipped"
|
||||||
)
|
)
|
||||||
|
# Завершаем метрики индексации
|
||||||
|
search_metrics.end_indexing()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"Muvera bulk indexing failed: {e}")
|
logger.exception(f"Muvera bulk indexing failed: {e}")
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user