62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
"""Platform full-chain Agent OS audit API."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
from fastapi.responses import JSONResponse
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from ..core.database import get_db
|
|
from ..core.response import error_response, success_response
|
|
from ..dependencies.permissions import require_platform_capability
|
|
from ..models import User
|
|
from ..services.agent_run_audit_service import AgentRunAuditService
|
|
|
|
router = APIRouter(prefix="/agent-run-audits", tags=["agent_run_audits"])
|
|
|
|
|
|
require_platform_audit_view = require_platform_capability("platform.audit.view")
|
|
|
|
|
|
@router.get("")
|
|
async def list_agent_run_audits(
|
|
page: int = Query(default=1, ge=1),
|
|
page_size: int = Query(default=30, ge=1, le=100),
|
|
tenant_id: Optional[int] = Query(default=None),
|
|
user_id: Optional[int] = Query(default=None),
|
|
status: Optional[str] = Query(default=None, max_length=80),
|
|
source_channel: Optional[str] = Query(default=None, max_length=80),
|
|
keyword: Optional[str] = Query(default=None, max_length=300),
|
|
since_hours: Optional[int] = Query(default=168, ge=1, le=8760),
|
|
current_user: User = Depends(require_platform_audit_view),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
_ = current_user
|
|
data = await AgentRunAuditService(db).list_runs(
|
|
page=page,
|
|
page_size=page_size,
|
|
tenant_id=tenant_id,
|
|
user_id=user_id,
|
|
status=status,
|
|
source_channel=source_channel,
|
|
keyword=keyword,
|
|
since_hours=since_hours,
|
|
)
|
|
return success_response(data)
|
|
|
|
|
|
@router.get("/{public_run_id}")
|
|
async def get_agent_run_audit(
|
|
public_run_id: str,
|
|
current_user: User = Depends(require_platform_audit_view),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
_ = current_user
|
|
try:
|
|
data = await AgentRunAuditService(db).get_run(public_run_id)
|
|
except ValueError as exc:
|
|
return JSONResponse(status_code=404, content=error_response(404, str(exc)))
|
|
return success_response(data)
|