Descripción
Servicio en monitoring/services/escalation_service.py que evalúa insights pendientes/ejecutándose y aplica políticas de escalado de notificaciones cuando se cumplen ventanas de tiempo.
Firma Principal
def check_escalations() -> int
Devuelve número de insights escalados en esta ejecución.
Flujo
- Carga insights en estado
pendingoexecuting(con.select_related("organization", "target")) - Precarga políticas de escalado por
(org_id, risk_level)en un diccionario único - Itera insights: para cada uno, busca sus políticas en el diccionario (N+1 fix sa4 B13)
- Calcula próximo nivel: invoca
_get_next_escalation_level(insight, policy, now)por cada política - Escala si procede: llama
escalate_insight(insight, next_level)para cada nivel próximo
Cambios Recientes (sa4 B13)
Antes: Cada insight disparaba una query EscalationPolicy.objects.filter(organization=insight.organization, risk_level=..., enabled=True).prefetch_related(...)
Ahora:
- Extrae
org_idsde todos los insights en una pasada - Precarga TODAS las políticas habilidad de esas orgs en una query única, groupware por
(org_id, risk_level) - Dikcionario
policies_by_keyacceso O(1) por insight
Impacto: -200+ queries/noche en tenant típico.
Dependencias
- Modelos:
AIInsight,EscalationPolicy,EscalationLevel,NotificationChannel - Servicios:
escalate_insight()(mismo módulo)
Integración
Típicamente llamado por:
- Tarea periódica (cron) cada 5-10 minutos
- CLI o endpoint de admin para trigger manual
Véase también
- [[feature—monitoring—sa4-baja-cleanup]]
- [[concept—monitoring—escalation-workflow]]
- [[entity—monitoring—model—escalation-policy]]
- [[entity—monitoring—service—notification-dispatcher]]