Files
Iliyan Angelov 6b247e5b9f Updates
2025-09-19 11:58:53 +03:00

62 lines
2.0 KiB
Python

"""
Django signals for incident intelligence
"""
from django.db.models.signals import post_save, pre_save
from django.dispatch import receiver
from django.utils import timezone
import logging
from .models import Incident
logger = logging.getLogger(__name__)
@receiver(post_save, sender=Incident)
def incident_post_save(sender, instance, created, **kwargs):
"""
Handle incident post-save events
"""
if created:
logger.info(f"New incident created: {instance.id}")
# Trigger AI processing for new incidents
try:
from .tasks import process_incident_ai
process_incident_ai.delay(instance.id)
except Exception as e:
logger.error(f"Failed to trigger AI processing for incident {instance.id}: {e}")
# Update resolution time if status changed to resolved
if not created and instance.status in ['RESOLVED', 'CLOSED'] and not instance.resolved_at:
instance.resolved_at = timezone.now()
instance.save(update_fields=['resolved_at'])
@receiver(pre_save, sender=Incident)
def incident_pre_save(sender, instance, **kwargs):
"""
Handle incident pre-save events
"""
# Auto-assign priority based on severity
if instance.severity and not instance.priority:
severity_priority_map = {
'EMERGENCY': 'P1',
'CRITICAL': 'P1',
'HIGH': 'P2',
'MEDIUM': 'P3',
'LOW': 'P4'
}
instance.priority = severity_priority_map.get(instance.severity, 'P3')
# Update AI processing flag if key fields changed
if instance.pk:
try:
old_instance = Incident.objects.get(pk=instance.pk)
ai_relevant_fields = ['title', 'description', 'free_text', 'category', 'subcategory', 'severity']
if any(getattr(old_instance, field) != getattr(instance, field) for field in ai_relevant_fields):
instance.ai_processed = False
instance.ai_processing_error = None
except Incident.DoesNotExist:
pass