53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
"""Activity log endpoints."""
|
|
from fastapi import APIRouter, Request
|
|
from pydantic import BaseModel
|
|
from utils.auth import get_current_user
|
|
from services.activity_log import activity_logger
|
|
|
|
router = APIRouter(prefix="/api", tags=["activity"])
|
|
|
|
|
|
class LogActionRequest(BaseModel):
|
|
action: str
|
|
details: str = ""
|
|
|
|
|
|
@router.get("/active_users")
|
|
async def get_active_users(request: Request):
|
|
"""Get list of currently active users"""
|
|
# Update current user's activity
|
|
try:
|
|
user_info = get_current_user(request)
|
|
username = user_info.get("username", "Unknown")
|
|
await activity_logger.update_user_activity(username)
|
|
except:
|
|
pass
|
|
|
|
users = await activity_logger.get_active_users(timeout_minutes=30)
|
|
return {"users": users}
|
|
|
|
|
|
@router.get("/activity_logs")
|
|
async def get_activity_logs(request: Request, limit: int = 100):
|
|
"""Get recent activity logs"""
|
|
# Update current user's activity
|
|
try:
|
|
user_info = get_current_user(request)
|
|
username = user_info.get("username", "Unknown")
|
|
await activity_logger.update_user_activity(username)
|
|
except:
|
|
pass
|
|
|
|
logs = await activity_logger.get_logs(limit=limit)
|
|
return {"logs": logs}
|
|
|
|
|
|
@router.post("/log_action")
|
|
async def log_action(request: Request, req: LogActionRequest):
|
|
"""Log a user action"""
|
|
user_info = get_current_user(request)
|
|
username = user_info.get("username", "Unknown")
|
|
|
|
await activity_logger.log_action(username, req.action, req.details)
|
|
return {"status": "ok"}
|