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

150 lines
5.5 KiB
Python

"""
Admin configuration for automation_orchestration app
"""
from django.contrib import admin
from django.utils.html import format_html
from django.urls import reverse
from django.utils.safestring import mark_safe
from .models import (
Runbook,
RunbookExecution,
Integration,
ChatOpsIntegration,
ChatOpsCommand,
AutoRemediation,
AutoRemediationExecution,
MaintenanceWindow,
WorkflowTemplate,
WorkflowExecution,
)
@admin.register(Runbook)
class RunbookAdmin(admin.ModelAdmin):
list_display = [
'name', 'version', 'trigger_type', 'status', 'category',
'execution_count', 'success_rate', 'is_public', 'created_by', 'created_at'
]
list_filter = ['status', 'trigger_type', 'category', 'is_public', 'created_at']
search_fields = ['name', 'description', 'category']
readonly_fields = ['id', 'execution_count', 'success_rate', 'created_at', 'updated_at', 'last_executed_at']
fieldsets = (
('Basic Information', {
'fields': ('id', 'name', 'description', 'version', 'category', 'tags')
}),
('Trigger Configuration', {
'fields': ('trigger_type', 'trigger_conditions')
}),
('Content', {
'fields': ('steps', 'estimated_duration')
}),
('Status & Permissions', {
'fields': ('status', 'is_public')
}),
('Metadata', {
'fields': ('created_by', 'last_modified_by', 'created_at', 'updated_at', 'last_executed_at'),
'classes': ('collapse',)
}),
('Statistics', {
'fields': ('execution_count', 'success_rate'),
'classes': ('collapse',)
}),
)
@admin.register(RunbookExecution)
class RunbookExecutionAdmin(admin.ModelAdmin):
list_display = [
'runbook', 'triggered_by', 'trigger_type', 'status',
'current_step', 'total_steps', 'started_at', 'duration'
]
list_filter = ['status', 'trigger_type', 'started_at']
search_fields = ['runbook__name', 'triggered_by__username', 'incident__title']
readonly_fields = ['id', 'started_at', 'completed_at', 'duration']
@admin.register(Integration)
class IntegrationAdmin(admin.ModelAdmin):
list_display = [
'name', 'integration_type', 'status', 'health_status',
'request_count', 'last_used_at', 'created_by'
]
list_filter = ['integration_type', 'status', 'health_status', 'created_at']
search_fields = ['name', 'description']
readonly_fields = ['id', 'request_count', 'last_used_at', 'created_at', 'updated_at', 'last_health_check']
@admin.register(ChatOpsIntegration)
class ChatOpsIntegrationAdmin(admin.ModelAdmin):
list_display = [
'name', 'platform', 'is_active', 'last_activity', 'created_by'
]
list_filter = ['platform', 'is_active', 'created_at']
search_fields = ['name']
readonly_fields = ['id', 'last_activity', 'created_at', 'updated_at']
@admin.register(ChatOpsCommand)
class ChatOpsCommandAdmin(admin.ModelAdmin):
list_display = [
'command', 'chatops_integration', 'user_id', 'status',
'executed_at', 'completed_at'
]
list_filter = ['status', 'chatops_integration__platform', 'executed_at']
search_fields = ['command', 'user_id', 'channel_id']
readonly_fields = ['id', 'executed_at', 'completed_at']
@admin.register(AutoRemediation)
class AutoRemediationAdmin(admin.ModelAdmin):
list_display = [
'name', 'remediation_type', 'trigger_condition_type',
'is_active', 'requires_approval', 'execution_count', 'success_count'
]
list_filter = ['remediation_type', 'trigger_condition_type', 'is_active', 'requires_approval']
search_fields = ['name', 'description']
readonly_fields = ['id', 'execution_count', 'success_count', 'last_executed_at', 'created_at', 'updated_at']
@admin.register(AutoRemediationExecution)
class AutoRemediationExecutionAdmin(admin.ModelAdmin):
list_display = [
'auto_remediation', 'incident', 'status', 'triggered_at',
'approved_by', 'completed_at'
]
list_filter = ['status', 'triggered_at', 'auto_remediation__remediation_type']
search_fields = ['auto_remediation__name', 'incident__title', 'approved_by__username']
readonly_fields = ['id', 'triggered_at', 'started_at', 'completed_at', 'duration']
@admin.register(MaintenanceWindow)
class MaintenanceWindowAdmin(admin.ModelAdmin):
list_display = [
'name', 'start_time', 'end_time', 'status',
'incidents_suppressed', 'notifications_suppressed', 'created_by'
]
list_filter = ['status', 'start_time', 'end_time']
search_fields = ['name', 'description']
readonly_fields = ['id', 'incidents_suppressed', 'notifications_suppressed', 'created_at', 'updated_at']
@admin.register(WorkflowTemplate)
class WorkflowTemplateAdmin(admin.ModelAdmin):
list_display = [
'name', 'template_type', 'usage_count', 'is_public', 'created_by'
]
list_filter = ['template_type', 'is_public', 'created_at']
search_fields = ['name', 'description']
readonly_fields = ['id', 'usage_count', 'created_at', 'updated_at']
@admin.register(WorkflowExecution)
class WorkflowExecutionAdmin(admin.ModelAdmin):
list_display = [
'name', 'workflow_template', 'triggered_by', 'status',
'current_step', 'total_steps', 'started_at', 'duration'
]
list_filter = ['status', 'trigger_type', 'started_at']
search_fields = ['name', 'workflow_template__name', 'triggered_by__username']
readonly_fields = ['id', 'started_at', 'completed_at', 'duration']