[NX-101 Issue] Refactor error handling to use consistent API error format
Replaced all inline error messages with the standardized `api_error` helper for consistent error response formatting. This improves clarity, maintainability, and ensures uniform error structures across the application. Updated logging for collector failures to include error class and switched to warning level for target unreachable scenarios.
This commit is contained in:
@@ -4,6 +4,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.core.db import get_db
|
||||
from app.core.deps import get_current_user, require_roles
|
||||
from app.core.errors import api_error
|
||||
from app.models.models import AlertDefinition, Target, User
|
||||
from app.schemas.alert import (
|
||||
AlertDefinitionCreate,
|
||||
@@ -33,7 +34,7 @@ async def _validate_target_exists(db: AsyncSession, target_id: int | None) -> No
|
||||
return
|
||||
target_exists = await db.scalar(select(Target.id).where(Target.id == target_id))
|
||||
if target_exists is None:
|
||||
raise HTTPException(status_code=404, detail="Target not found")
|
||||
raise HTTPException(status_code=404, detail=api_error("target_not_found", "Target not found"))
|
||||
|
||||
|
||||
@router.get("/status", response_model=AlertStatusResponse)
|
||||
@@ -101,7 +102,7 @@ async def update_alert_definition(
|
||||
) -> AlertDefinitionOut:
|
||||
definition = await db.scalar(select(AlertDefinition).where(AlertDefinition.id == definition_id))
|
||||
if definition is None:
|
||||
raise HTTPException(status_code=404, detail="Alert definition not found")
|
||||
raise HTTPException(status_code=404, detail=api_error("alert_definition_not_found", "Alert definition not found"))
|
||||
|
||||
updates = payload.model_dump(exclude_unset=True)
|
||||
if "target_id" in updates:
|
||||
@@ -131,7 +132,7 @@ async def delete_alert_definition(
|
||||
) -> dict:
|
||||
definition = await db.scalar(select(AlertDefinition).where(AlertDefinition.id == definition_id))
|
||||
if definition is None:
|
||||
raise HTTPException(status_code=404, detail="Alert definition not found")
|
||||
raise HTTPException(status_code=404, detail=api_error("alert_definition_not_found", "Alert definition not found"))
|
||||
await db.delete(definition)
|
||||
await db.commit()
|
||||
invalidate_alert_cache()
|
||||
@@ -148,7 +149,7 @@ async def test_alert_definition(
|
||||
_ = user
|
||||
target = await db.scalar(select(Target).where(Target.id == payload.target_id))
|
||||
if target is None:
|
||||
raise HTTPException(status_code=404, detail="Target not found")
|
||||
raise HTTPException(status_code=404, detail=api_error("target_not_found", "Target not found"))
|
||||
try:
|
||||
value = await run_scalar_sql_for_target(target, payload.sql_text)
|
||||
return AlertDefinitionTestResponse(ok=True, value=value)
|
||||
|
||||
Reference in New Issue
Block a user