Files

68 lines
2.2 KiB
Python

from fastapi import APIRouter
from fastapi import Depends
from fastapi import HTTPException
from sqlalchemy.orm import Session
from danswer.auth.users import current_admin_user
from danswer.background.celery.celery_utils import get_deletion_status
from danswer.db.connector_credential_pair import get_connector_credential_pair_from_id
from danswer.db.document import get_document_cnts_for_cc_pairs
from danswer.db.engine import get_session
from danswer.db.index_attempt import get_index_attempts_for_cc_pair
from danswer.db.models import User
from danswer.server.cc_pair.models import CCPairFullInfo
from danswer.server.models import ConnectorCredentialPairIdentifier
router = APIRouter(prefix="/manage")
@router.get("/admin/cc-pair/{cc_pair_id}")
def get_cc_pair_full_info(
cc_pair_id: int,
_: User | None = Depends(current_admin_user),
db_session: Session = Depends(get_session),
) -> CCPairFullInfo:
cc_pair = get_connector_credential_pair_from_id(
cc_pair_id=cc_pair_id,
db_session=db_session,
)
if cc_pair is None:
raise HTTPException(
status_code=400,
detail=f"Connector Credential Pair with id {cc_pair_id} not found.",
)
cc_pair_identifier = ConnectorCredentialPairIdentifier(
connector_id=cc_pair.connector_id,
credential_id=cc_pair.credential_id,
)
index_attempts = get_index_attempts_for_cc_pair(
db_session=db_session,
cc_pair_identifier=cc_pair_identifier,
)
document_count_info_list = list(
get_document_cnts_for_cc_pairs(
db_session=db_session,
cc_pair_identifiers=[cc_pair_identifier],
)
)
documents_indexed = (
document_count_info_list[0][-1] if document_count_info_list else 0
)
latest_deletion_attempt = get_deletion_status(
connector_id=cc_pair.connector.id,
credential_id=cc_pair.credential.id,
db_session=db_session,
)
return CCPairFullInfo.from_models(
cc_pair_model=cc_pair,
index_attempt_models=list(index_attempts),
latest_deletion_attempt=latest_deletion_attempt,
num_docs_indexed=documents_indexed,
)