Volver a la wiki

DeviceTrashEntry · Modelo network

Propósito

Un “dispositivo” en CreaRack Pro no es una fila: son hasta tres modelos enlazados por la IP de gestión (DeviceProfile la ficha descubierta, MonitoringTarget el objetivo de sondeo, racks.Device la colocación en rack). Añadir soft-delete (deleted_at) a los tres obligaría a filtrarlo en cada consulta de esos modelos, incluidas las que usa el Local Agent. DeviceTrashEntry evita eso: al borrar, guarda una instantánea JSON con todo lo necesario para recrear las tres caras, y borra de verdad los originales. Restaurar = recrear desde la instantánea.

Límite honesto (documentado en el propio docstring del modelo): el histórico de métricas del MonitoringTarget no vuelve — se pierde en cascada al borrar, igual que ya pasaba con el borrado de Devices desde la v1.35.0.

Contrato

network/models/trash.py:

CampoTipoNotas
organizationFK → core.Organizationon_delete=CASCADE, related_name="device_trash_entries"
nameCharField(200)nombre del dispositivo en el momento del borrado
ip_addressCharField(45)IP de gestión; vacía si la entrada es solo una colocación en rack sin IP
kindCharField(20)assigned_page del perfil (wireless/ups/signage) o "rack"
snapshotJSONField{"profile": {...}|null, "targets": [...], "rack_devices": [...]}
deleted_atDateTimeField(auto_now_add=True)ordena la papelera (-deleted_at)
deleted_byFK → core.User, SET_NULLquién borró
deleted_fromCharField(40)superficie de origen (Observatory, Wireless, Rack Editor…)

Índice compuesto (organization, deleted_at). Propiedad summary arma un texto corto (“profile · monitoring · rack X”) a partir de lo que contenga la instantánea.

Dependencias

Qué usa — network/services/device_trash.py:

Quién la usa:

Ejemplo de uso

from network.services.device_trash import trash_device, restore_entry

entry = trash_device(org, ip="10.0.0.5", user=request.user, source="observatory")
# ...
result = restore_entry(entry)  # recrea lo que no exista ya; result["restored"] indica si de verdad recreó algo

Véase también

Subir