from prometheus_client import Histogram, Counter, generate_latest, CONTENT_TYPE_LATEST
from fastapi import Response
import logging

class MetricsLogFilter(logging.Filter):
    """Фильтр для исключения логов метрик из access логов"""
    
    def filter(self, record):
        if hasattr(record, 'args') and record.args and len(record.args) >= 3:
            request_path = record.args[2]
            if '/metrics' in request_path:
                return False
        return True

def setup_logging(level: int = logging.INFO) -> logging.Logger:
    """Настраивает базовые параметры логирования для приложения."""
    logging.basicConfig(
        level=level,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S',
    )

    logger = logging.getLogger('lightrag')

    uvicorn_access_logger = logging.getLogger("uvicorn.access")
    uvicorn_access_logger.addFilter(MetricsLogFilter())

    return logger


PROCESSING_TIME = Histogram(
    "lightrag_document_processing_seconds",
    "Время выполнения обработки страницы в секундах",
    buckets=(30, 60, 90, 120, 150, 180, 240, 300, 360, 480, 600, 900, 1200)
)

PROCESSING_COUNT = Counter(
    "lightrag_document_processing_count",
    "Количество обработанных страниц",
    ["project_id", "status"]
)

async def metrics():
    """Возвращает метрики в формате Prometheus"""
    return Response(generate_latest(), media_type=CONTENT_TYPE_LATEST)
