Files
2026-07-20 11:05:07 +02:00

31 lines
1.1 KiB
Python

from typing import Any
from .models import BanEvent
def event_payload(instance: BanEvent, node_alias: str | None = None) -> dict[str, Any]:
"""Représentation JSON-sérialisable d'un BanEvent, partagée par le
WebSocket temps réel et le bootstrap initial du tableau de bord.
node_alias : alias lisible du noeud (NodeRegistry.display_name),
résolu par l'appelant plutôt qu'ici pour ne pas cacher une requête DB
par événement (voir views.py, qui résout tous les alias en une seule
requête avant d'appeler cette fonction en boucle)."""
return {
'id': instance.pk,
'received_at': instance.received_at.isoformat(),
'node': instance.node,
'node_alias': node_alias or instance.node,
'jail_name': instance.jail_name,
'action': instance.action,
'ip_address': instance.ip_address,
'port': instance.port,
'protocol': instance.protocol,
'bantime': instance.bantime,
'latitude': instance.latitude,
'longitude': instance.longitude,
'country': instance.country,
'country_code': instance.country_code,
'city': instance.city,
}