Volver a la wiki

org_connections · cerrar las conexiones en vivo de una organización suspendida o borrada

Propósito

Punto único que cierra, justo después del commit, las conexiones WebSocket que ya estaban abiertas de una organización que se acaba de suspender o borrar. Antes de este cambio (mega-auditoría B-31), suspender una organización impedía abrir conexiones NUEVAS, pero las que ya estaban vivas seguían funcionando hasta la siguiente reconexión: un Agente seguía mandando medidas y un navegador seguía recibiendo el canal en vivo de una organización ya suspendida.

Contrato

close_organization_connections(org_ids) -> None

Programa el aviso con transaction.on_commit (para no avisar antes de que el cambio esté realmente guardado) y, para cada id, manda un mensaje {"type": "organization_suspended"} por el channel layer a dos grupos:

Un fallo al avisar a un grupo concreto (excepción del channel layer) se registra como aviso en el log y no interrumpe el resto — la organización ya quedó guardada como suspendida, así que no hay nada que deshacer.

Dependencias

Lo llaman:

Usa:

Ejemplo de uso

from core.services.org_connections import close_organization_connections

close_organization_connections([org.pk])  # tras guardar o borrar la organización

Límite conocido

Si el channel layer no logra alcanzar a un consumer que vive en OTRO proceso Daphne, ese aviso se pierde en silencio (solo queda un warning en el log, sin reintento) — la conexión sigue viva hasta su próximo evento natural (ping, reconexión). No hay test de ese escenario concreto.

Véase también

Subir