File size: 1,886 Bytes
151ec26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from typing import List
from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from backend.app.core.database import get_db
from backend.app.schemas.admin import AdminStatsResponse, AuditLogResponse
from backend.app.schemas.common import BaseResponse
from backend.app.repositories.audit_repo import AuditRepository
from backend.app.ml.manager import model_manager
from backend.app.api.deps import get_current_admin
from backend.app.models.user import User

router = APIRouter()


@router.get("/stats", response_model=BaseResponse[AdminStatsResponse])
async def get_admin_stats(
    current_admin: User = Depends(get_current_admin),
    db: AsyncSession = Depends(get_db),
):
    """Retrieve platform usage statistics, throughput metrics, and model status."""
    audit_repo = AuditRepository(db)
    stats = await audit_repo.get_system_statistics()
    model_status = model_manager.get_status()

    admin_stats = AdminStatsResponse(
        total_users=stats["total_users"],
        active_users=stats["active_users"],
        total_documents_processed=stats["total_documents_processed"],
        total_ner_requests=stats["total_ner_requests"],
        total_chat_queries=stats["total_chat_queries"],
        model_status=model_status,
        system_health="Operational",
    )
    return BaseResponse(success=True, data=admin_stats)


@router.get("/audit-logs", response_model=BaseResponse[List[AuditLogResponse]])
async def get_audit_logs(
    limit: int = 100,
    current_admin: User = Depends(get_current_admin),
    db: AsyncSession = Depends(get_db),
):
    """Retrieve system security and access audit trail."""
    audit_repo = AuditRepository(db)
    logs = await audit_repo.get_admin_audit_logs(limit=limit)
    response_list = [AuditLogResponse.model_validate(log) for log in logs]
    return BaseResponse(success=True, data=response_list)