CreaRack-SL

MonitoringTarget · Modelo monitoring

Entidadactiveverificado Fri Aug 28#monitoring#model#observatory#snmp#ping

MonitoringTarget · Modelo monitoring

Propósito

MonitoringTarget es la entidad central del subsistema CNS (CreaRack Network Sentinel). Representa un dispositivo o IP que el sistema observa periódicamente. Cada instancia define qué IP sondear, protocolos activos (ICMP, SNMP, HTTP) y cadencia. Cachea el último resultado para consultas rápidas sin releer histórico.

⚠️ El campo scope FUE ELIMINADO (Ficha Central F4, migración 0025): el target es 1:1 por host y la pertenencia a las páginas Wireless/UPS/Signage la decide DeviceProfile.assigned_page, no el target.

Contrato

Campos:

CampoTipoDefaultDescripción
nameCharField(100)—Nombre legible
ip_addressGenericIPAddressField—IP monitorizada IPv4/IPv6
deviceFK(racks.Device, SET_NULL, null)—Dispositivo de rack asociado (opcional)
ping_enabledBooleanFieldTrueActiva sondeo ICMP
snmp_enabledBooleanFieldTrueActiva polling SNMP
http_enabledBooleanFieldTrueActiva health check HTTP
interval_secondsIntegerField60Cadencia de polling por target (suelos por protocolo en el Agent)
timeout_msIntegerField5000Timeout por check
enabledBooleanFieldTrueHabilitación global
configJSONField{}community SNMP, OIDs, interfaces uplink
last_statusCharField(20)unknownunknown, up, down, degraded
last_latency_msFloatField(null)—Última latencia medida
last_packet_lossFloatField(null)—Último packet loss
last_checkDateTimeField(null)—Timestamp último check
producer_stateJSONField(null)NoneA19 (Agente 2.24.0, migración 0033, 28-08-2026): por qué el Agente NO produce dato para este target, por bucle SNMP — {"bandwidth": {"reason": "no_counters", "since": ts, "ok_ts": ts|None}}. Lo manda el heartbeat del Agente (2.24.0+) solo para los targets que fallan; None = todo produce (o Agente viejo). Último valor, no historial — ver [[crearack-tech—architecture—sentinel-mode]] §4.2
organizationFK(Organization, CASCADE)—Tenant propietario

Métodos y propiedades:

  • is_up — True si last_status == "up".
  • monitor_types — list[str] de protocolos activos (ping, snmp, http).
  • monitor_type — propiedad legacy; protocolo primario (snmp > http > ping).
  • status_color — color CSS hex del estado actual.
  • get_or_create_for_device(device, organization) (classmethod) — crea o recupera target vinculado a Device con has_network_management=True; sincroniza IP y nombre, reactiva el target si estaba desactivado (enabled=True); maneja races con IntegrityError. Si la IP ya pertenece a OTRO Device (mismo org, distinto device_id), NO reenlaza — el primer dueño se queda (auditoría #261 A52: evita que el target “salte” de dueño en cada render; el mismo guard se aplica en monitoring/views.py::observatory_view).

Meta:

  • unique_together: [organization, ip_address] — un target por host y tenant (post-Ficha Central F4).
  • ordering: ["name"].
  • Índice compuesto idx_target_org_enabled sobre (organization, enabled).

Dependencias entrantes

MóduloArchivoUso
MonitoringAlertmonitoring/models.pyFK target — alertas configuradas
AlertEventmonitoring/models.pyFK target — eventos disparados
DeviceProfilenetwork/models.pyFK linked_monitoring_target
alert_servicemonitoring/services/alert_service.pyEvalúa condiciones y crea AlertEvent
AutoConfigServicenetwork/services/auto_config.pyCrea/actualiza post-discovery
views Observatory/Wireless/UPS/Signagemonitoring/views.pyAuto-provisiona en bulk
RackServiceracks/services/racks.pyInvoca AutoConfigService tras rack
backup_service / restorecore/services/backup_service.pySerializa targets
workspace_apicore/workspace_api.pyCuenta targets activos
MonitoringConfig.ready() (señal pre_delete de Device)monitoring/apps.pyDesactiva el target al borrar su Device — ver entity--monitoring--service--target-lifecycle
target_lifecycle.delete_targetsmonitoring/services/target_lifecycle.pyCamino único de borrado (DELETE /targets + delete_profile_full)
AgentConsumerterminal/consumers.py_apply_producers() persiste producer_state desde el heartbeat del Agente

Dependencias salientes

  • racks.Device — FK opcional; enlace físico.
  • core.Organization — FK obligatoria.
  • monitoring.MonitoringAlert — relación inversa alerts.

Ejemplos

  • Creación desde discovery: AutoConfigService().configure_observatory(profile) crea/actualiza el target del host, activa snmp_enabled si soporta SNMP e inyecta OIDs/community en config (cifrado at-rest; servir siempre vía public_config).
  • Desde rack: MonitoringTarget.get_or_create_for_device(device, org) vincula dispositivo con gestión de red; si la IP cambia, actualiza. Si la IP ya está enlazada a OTRO Device, se queda como está (A52).
  • Bulk Wireless: MonitoringTarget.objects.bulk_create(new_targets, ignore_conflicts=True) + refetch por ip_address__in.
  • Evaluación: evaluate_and_trigger_alerts(target, latency_ms=12.5, packet_loss=0.0, status="up") itera alertas y crea AlertEvent si supera umbral.
  • Borrado de Device: al borrar un racks.Device, pre_delete desactiva (no borra) su target — conserva el histórico y lo reactiva si el Device vuelve con la misma IP.
  • Por qué no hay bandwidth (A19): si producer_state.bandwidth.reason == "no_counters", el Observatory muestra “No bandwidth data: the device has no octet counters on interface N” en vez de dejar la gráfica vacía sin explicación.
  • entity--racks--model--device — dispositivo físico al que puede estar vinculado.
  • entity--monitoring--model--monitoringalert — reglas evaluadas sobre este target.
  • entity--monitoring--service--target-lifecycle — ciclo de vida de baja (borrado y desactivación).
  • crearack-tech--architecture--sentinel-mode — mecanismo A19 y scheduler del Agente que alimenta producer_state.
  • feature--monitoring--agente-2-24-0-task-270 — release que introduce el campo.

Véase también

  • [[entity—racks—model—device]]
  • [[entity—monitoring—model—monitoringalert]]
  • [[entity—monitoring—model—aiinsight]]
  • [[entity—monitoring—service—target-lifecycle]]
  • [[crearack-tech—architecture—sentinel-mode]]
  • [[feature—monitoring—agente-2-24-0-task-270]]