29 lines
1.2 KiB
Python
29 lines
1.2 KiB
Python
from fastapi import APIRouter, Depends
|
|
from sqlalchemy import func, select
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.db import get_db
|
|
from app.deps import require_admin
|
|
from app.models import AuditLog, Document, Message, User
|
|
from app.schemas.audit import StatsOverviewResponse
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/overview", response_model=StatsOverviewResponse)
|
|
def overview(db: Session = Depends(get_db), _: User = Depends(require_admin)) -> StatsOverviewResponse:
|
|
question_count = db.scalar(select(func.count(Message.id))) or 0
|
|
active_user_count = db.scalar(select(func.count(User.id)).where(User.status == "active")) or 0
|
|
document_count = db.scalar(select(func.count(Document.id)).where(Document.status != "deleted")) or 0
|
|
audit_count = db.scalar(select(func.count(AuditLog.id))) or 0
|
|
token_usage = db.scalar(select(func.coalesce(func.sum(Message.token_usage), 0))) or 0
|
|
pu_usage = db.scalar(select(func.coalesce(func.sum(Message.pu_usage), 0))) or 0
|
|
return StatsOverviewResponse(
|
|
question_count=question_count,
|
|
active_user_count=active_user_count,
|
|
document_count=document_count,
|
|
audit_count=audit_count,
|
|
token_usage=token_usage,
|
|
pu_usage=pu_usage,
|
|
)
|