Add SNMP profile mapping and fix asset cleanup
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
from datetime import UTC, datetime
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.auth.dependencies import get_current_user, require_role
|
||||
from app.db.session import get_db
|
||||
from app.models import Asset, User
|
||||
from app.models import Asset, Incident, Monitor, User
|
||||
from app.schemas.core import AssetCreate, AssetRead, AssetUpdate
|
||||
|
||||
router = APIRouter(prefix="/assets", tags=["assets"])
|
||||
@@ -86,5 +88,26 @@ def delete_asset(
|
||||
asset = db.get(Asset, asset_id)
|
||||
if asset is None:
|
||||
raise HTTPException(status_code=404, detail="Asset not found")
|
||||
|
||||
attached_monitors = db.scalars(select(Monitor).where(Monitor.asset_id == asset.id)).all()
|
||||
attached_monitor_ids = [monitor.id for monitor in attached_monitors]
|
||||
now = datetime.now(UTC)
|
||||
|
||||
if attached_monitor_ids:
|
||||
monitor_incidents = db.scalars(select(Incident).where(Incident.monitor_id.in_(attached_monitor_ids))).all()
|
||||
for incident in monitor_incidents:
|
||||
if incident.status == "open":
|
||||
incident.status = "resolved"
|
||||
incident.resolved_at = now
|
||||
incident.details = {**(incident.details or {}), "recovery_message": "Asset was deleted"}
|
||||
incident.monitor_id = None
|
||||
|
||||
asset_incidents = db.scalars(select(Incident).where(Incident.asset_id == asset.id)).all()
|
||||
for incident in asset_incidents:
|
||||
incident.asset_id = None
|
||||
|
||||
for monitor in attached_monitors:
|
||||
db.delete(monitor)
|
||||
|
||||
db.delete(asset)
|
||||
db.commit()
|
||||
|
||||
Reference in New Issue
Block a user