Updates
This commit is contained in:
63
ETB-API/automation_orchestration/signals.py
Normal file
63
ETB-API/automation_orchestration/signals.py
Normal file
@@ -0,0 +1,63 @@
|
||||
"""
|
||||
Signal handlers for automation_orchestration app
|
||||
"""
|
||||
from django.db.models.signals import post_save, pre_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils import timezone
|
||||
from .models import (
|
||||
RunbookExecution,
|
||||
AutoRemediationExecution,
|
||||
MaintenanceWindow,
|
||||
)
|
||||
|
||||
|
||||
@receiver(post_save, sender=RunbookExecution)
|
||||
def update_runbook_statistics(sender, instance, created, **kwargs):
|
||||
"""Update runbook statistics when execution is completed"""
|
||||
if instance.status in ['COMPLETED', 'FAILED', 'CANCELLED', 'TIMEOUT']:
|
||||
runbook = instance.runbook
|
||||
runbook.execution_count += 1
|
||||
|
||||
if instance.status == 'COMPLETED':
|
||||
# Update success rate
|
||||
total_executions = runbook.execution_count
|
||||
successful_executions = RunbookExecution.objects.filter(
|
||||
runbook=runbook,
|
||||
status='COMPLETED'
|
||||
).count()
|
||||
runbook.success_rate = successful_executions / total_executions if total_executions > 0 else 0.0
|
||||
|
||||
runbook.last_executed_at = instance.started_at
|
||||
runbook.save(update_fields=['execution_count', 'success_rate', 'last_executed_at'])
|
||||
|
||||
|
||||
@receiver(post_save, sender=AutoRemediationExecution)
|
||||
def update_auto_remediation_statistics(sender, instance, created, **kwargs):
|
||||
"""Update auto-remediation statistics when execution is completed"""
|
||||
if instance.status in ['COMPLETED', 'FAILED', 'CANCELLED', 'TIMEOUT']:
|
||||
remediation = instance.auto_remediation
|
||||
remediation.execution_count += 1
|
||||
|
||||
if instance.status == 'COMPLETED':
|
||||
remediation.success_count += 1
|
||||
|
||||
remediation.last_executed_at = instance.triggered_at
|
||||
remediation.save(update_fields=['execution_count', 'success_count', 'last_executed_at'])
|
||||
|
||||
|
||||
@receiver(pre_save, sender=MaintenanceWindow)
|
||||
def validate_maintenance_window(sender, instance, **kwargs):
|
||||
"""Validate maintenance window before saving"""
|
||||
if instance.start_time and instance.end_time:
|
||||
if instance.start_time >= instance.end_time:
|
||||
raise ValueError("Start time must be before end time")
|
||||
|
||||
# Auto-update status based on current time
|
||||
now = timezone.now()
|
||||
if instance.start_time and instance.end_time:
|
||||
if instance.start_time <= now <= instance.end_time:
|
||||
if instance.status == 'SCHEDULED':
|
||||
instance.status = 'ACTIVE'
|
||||
elif instance.end_time < now:
|
||||
if instance.status in ['SCHEDULED', 'ACTIVE']:
|
||||
instance.status = 'COMPLETED'
|
||||
Reference in New Issue
Block a user