초기 커밋
This commit is contained in:
61
app/api/v1/endpoints/monitoring.py
Normal file
61
app/api/v1/endpoints/monitoring.py
Normal file
@@ -0,0 +1,61 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.api.deps import get_session
|
||||
from app.core.constants import Role
|
||||
from app.core.dependencies import get_current_user_id, require_role
|
||||
from app.schemas.monitoring import AlertRead, AlertRuleCreate, AlertRuleRead, SystemHealthResponse
|
||||
from app.services.monitoring_service import MonitoringService
|
||||
|
||||
router = APIRouter(prefix="/monitoring", tags=["monitoring"])
|
||||
|
||||
|
||||
@router.get("/health", response_model=SystemHealthResponse)
|
||||
async def system_health(
|
||||
_: dict = Depends(require_role(*Role.MANAGEMENT_ROLES)),
|
||||
session: AsyncSession = Depends(get_session),
|
||||
) -> SystemHealthResponse:
|
||||
service = MonitoringService(session)
|
||||
return await service.get_system_health()
|
||||
|
||||
|
||||
@router.get("/alerts", response_model=list[AlertRead])
|
||||
async def list_alerts(
|
||||
skip: int = Query(0, ge=0),
|
||||
limit: int = Query(50, ge=1, le=200),
|
||||
_: dict = Depends(require_role(*Role.MANAGEMENT_ROLES)),
|
||||
session: AsyncSession = Depends(get_session),
|
||||
) -> list[AlertRead]:
|
||||
service = MonitoringService(session)
|
||||
return await service.list_active_alerts(skip=skip, limit=limit)
|
||||
|
||||
|
||||
@router.post("/alerts/{alert_id}/acknowledge", response_model=AlertRead)
|
||||
async def acknowledge_alert(
|
||||
alert_id: int,
|
||||
user_id: int = Depends(get_current_user_id),
|
||||
session: AsyncSession = Depends(get_session),
|
||||
) -> AlertRead:
|
||||
service = MonitoringService(session)
|
||||
return await service.acknowledge_alert(alert_id, user_id)
|
||||
|
||||
|
||||
@router.get("/alert-rules", response_model=list[AlertRuleRead])
|
||||
async def list_alert_rules(
|
||||
_: dict = Depends(require_role(*Role.MANAGEMENT_ROLES)),
|
||||
session: AsyncSession = Depends(get_session),
|
||||
) -> list[AlertRuleRead]:
|
||||
service = MonitoringService(session)
|
||||
return await service.list_alert_rules()
|
||||
|
||||
|
||||
@router.post("/alert-rules", response_model=AlertRuleRead, status_code=201)
|
||||
async def create_alert_rule(
|
||||
body: AlertRuleCreate,
|
||||
user_id: int = Depends(get_current_user_id),
|
||||
session: AsyncSession = Depends(get_session),
|
||||
) -> AlertRuleRead:
|
||||
service = MonitoringService(session)
|
||||
return await service.create_alert_rule(body, user_id)
|
||||
Reference in New Issue
Block a user