Descripción
Función is_in_maintenance_window(target) en monitoring/services/sla_service.py que determina si un objetivo está actualmente bajo una ventana de mantenimiento que suprime insights.
Firma
def is_in_maintenance_window(target: MonitoringTarget) -> bool
Retorna True si el target está en una ventana activa que suprime insights.
Lógica
Una ventana de mantenimiento suprime insights si:
- Pertenece a la misma organización que el target
- Está habilitada para suprimir (
suppress_insights=True) - Es temporalmente activa (
start_at ≤ now ≤ end_at) - Y es org-wide (
targets.isnull()) O incluye explícitamente este target
Implementación Anterior (N+1)
windows = MaintenanceWindow.objects.filter(
organization=target.organization,
suppress_insights=True,
start_at__lte=now,
end_at__gte=now,
)
return any(not w.targets.exists() or w.targets.filter(id=target.id).exists() for w in windows)
Problema: Cargaba TODAS las ventanas activas, luego probaba M2M por cada una.
Implementación Actual (sa4 B12)
return (
MaintenanceWindow.objects.filter(
organization=target.organization,
suppress_insights=True,
start_at__lte=now,
end_at__gte=now,
)
.filter(Q(targets__isnull=True) | Q(targets=target))
.exists()
)
Beneficio: Una sola query con filtro Q compuesto. El ORM de Django maneja la lógica OR en SQL.
Dependencias
- Modelos:
MaintenanceWindow,MonitoringTarget,Organization - Django:
timezone.now(),Q()
Integración
Llamada por:
- Evaluador de alertas (antes de crear un nuevo AlertEvent)
- Checks de SLA para excluir ventanas de mantenimiento del cálculo
Véase también
- [[feature—monitoring—sa4-baja-cleanup]]
- [[entity—monitoring—model—maintenance-window]]
- [[entity—monitoring—service—sla-metrics-calculator]]
- [[concept—monitoring—maintenance-window]]