Updates
This commit is contained in:
338
ETB-API/analytics_predictive_insights/admin.py
Normal file
338
ETB-API/analytics_predictive_insights/admin.py
Normal file
@@ -0,0 +1,338 @@
|
||||
"""
|
||||
Admin configuration for analytics_predictive_insights 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 (
|
||||
KPIMetric, KPIMeasurement, IncidentRecurrenceAnalysis, PredictiveModel,
|
||||
AnomalyDetection, CostImpactAnalysis, DashboardConfiguration,
|
||||
HeatmapData, PredictiveInsight
|
||||
)
|
||||
|
||||
|
||||
@admin.register(KPIMetric)
|
||||
class KPIMetricAdmin(admin.ModelAdmin):
|
||||
"""Admin interface for KPI metrics"""
|
||||
|
||||
list_display = [
|
||||
'name', 'metric_type', 'aggregation_type', 'is_active',
|
||||
'is_system_metric', 'created_by', 'created_at'
|
||||
]
|
||||
list_filter = [
|
||||
'metric_type', 'aggregation_type', 'is_active',
|
||||
'is_system_metric', 'created_at'
|
||||
]
|
||||
search_fields = ['name', 'description']
|
||||
readonly_fields = ['id', 'created_at', 'updated_at']
|
||||
|
||||
fieldsets = (
|
||||
('Basic Information', {
|
||||
'fields': ('id', 'name', 'description', 'metric_type', 'aggregation_type')
|
||||
}),
|
||||
('Targeting Criteria', {
|
||||
'fields': ('incident_categories', 'incident_severities', 'incident_priorities')
|
||||
}),
|
||||
('Configuration', {
|
||||
'fields': ('calculation_formula', 'time_window_hours', 'is_active', 'is_system_metric')
|
||||
}),
|
||||
('Metadata', {
|
||||
'fields': ('created_by', 'created_at', 'updated_at'),
|
||||
'classes': ('collapse',)
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
@admin.register(KPIMeasurement)
|
||||
class KPIMeasurementAdmin(admin.ModelAdmin):
|
||||
"""Admin interface for KPI measurements"""
|
||||
|
||||
list_display = [
|
||||
'metric', 'value', 'unit', 'incident_count',
|
||||
'measurement_period_start', 'calculated_at'
|
||||
]
|
||||
list_filter = [
|
||||
'metric__metric_type', 'unit', 'calculated_at'
|
||||
]
|
||||
search_fields = ['metric__name']
|
||||
readonly_fields = ['id', 'calculated_at']
|
||||
|
||||
fieldsets = (
|
||||
('Measurement Details', {
|
||||
'fields': ('id', 'metric', 'value', 'unit')
|
||||
}),
|
||||
('Time Period', {
|
||||
'fields': ('measurement_period_start', 'measurement_period_end')
|
||||
}),
|
||||
('Context', {
|
||||
'fields': ('incident_count', 'sample_size', 'metadata')
|
||||
}),
|
||||
('Metadata', {
|
||||
'fields': ('calculated_at',),
|
||||
'classes': ('collapse',)
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
@admin.register(IncidentRecurrenceAnalysis)
|
||||
class IncidentRecurrenceAnalysisAdmin(admin.ModelAdmin):
|
||||
"""Admin interface for incident recurrence analysis"""
|
||||
|
||||
list_display = [
|
||||
'primary_incident', 'recurrence_type', 'confidence_score',
|
||||
'recurrence_rate', 'is_resolved', 'created_at'
|
||||
]
|
||||
list_filter = [
|
||||
'recurrence_type', 'is_resolved', 'created_at'
|
||||
]
|
||||
search_fields = ['primary_incident__title']
|
||||
readonly_fields = ['id', 'created_at', 'updated_at']
|
||||
|
||||
fieldsets = (
|
||||
('Analysis Details', {
|
||||
'fields': ('id', 'primary_incident', 'recurring_incidents', 'recurrence_type', 'confidence_score', 'recurrence_rate')
|
||||
}),
|
||||
('Pattern Characteristics', {
|
||||
'fields': ('common_keywords', 'common_categories', 'time_pattern')
|
||||
}),
|
||||
('Impact Analysis', {
|
||||
'fields': ('total_affected_users', 'total_downtime_hours', 'estimated_cost_impact')
|
||||
}),
|
||||
('Recommendations', {
|
||||
'fields': ('prevention_recommendations', 'automation_opportunities')
|
||||
}),
|
||||
('Status', {
|
||||
'fields': ('is_resolved', 'resolution_actions')
|
||||
}),
|
||||
('Metadata', {
|
||||
'fields': ('created_at', 'updated_at', 'model_version'),
|
||||
'classes': ('collapse',)
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
@admin.register(PredictiveModel)
|
||||
class PredictiveModelAdmin(admin.ModelAdmin):
|
||||
"""Admin interface for predictive models"""
|
||||
|
||||
list_display = [
|
||||
'name', 'model_type', 'algorithm_type', 'status',
|
||||
'accuracy_score', 'last_trained_at', 'created_at'
|
||||
]
|
||||
list_filter = [
|
||||
'model_type', 'algorithm_type', 'status', 'created_at'
|
||||
]
|
||||
search_fields = ['name', 'description']
|
||||
readonly_fields = ['id', 'created_at', 'updated_at']
|
||||
|
||||
fieldsets = (
|
||||
('Basic Information', {
|
||||
'fields': ('id', 'name', 'description', 'model_type', 'algorithm_type')
|
||||
}),
|
||||
('Model Configuration', {
|
||||
'fields': ('model_config', 'feature_columns', 'target_column')
|
||||
}),
|
||||
('Training Configuration', {
|
||||
'fields': ('training_data_period_days', 'min_training_samples')
|
||||
}),
|
||||
('Performance Metrics', {
|
||||
'fields': ('accuracy_score', 'precision_score', 'recall_score', 'f1_score')
|
||||
}),
|
||||
('Status and Metadata', {
|
||||
'fields': ('status', 'version', 'model_file_path', 'last_trained_at', 'training_duration_seconds', 'training_samples_count')
|
||||
}),
|
||||
('Retraining Configuration', {
|
||||
'fields': ('auto_retrain_enabled', 'retrain_frequency_days', 'performance_threshold')
|
||||
}),
|
||||
('Metadata', {
|
||||
'fields': ('created_by', 'created_at', 'updated_at'),
|
||||
'classes': ('collapse',)
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
@admin.register(AnomalyDetection)
|
||||
class AnomalyDetectionAdmin(admin.ModelAdmin):
|
||||
"""Admin interface for anomaly detection results"""
|
||||
|
||||
list_display = [
|
||||
'anomaly_type', 'severity', 'status', 'confidence_score',
|
||||
'detected_at', 'resolved_at'
|
||||
]
|
||||
list_filter = [
|
||||
'anomaly_type', 'severity', 'status', 'detected_at'
|
||||
]
|
||||
search_fields = ['description', 'model__name']
|
||||
readonly_fields = ['id', 'detected_at']
|
||||
|
||||
fieldsets = (
|
||||
('Detection Details', {
|
||||
'fields': ('id', 'model', 'anomaly_type', 'severity', 'status')
|
||||
}),
|
||||
('Detection Metrics', {
|
||||
'fields': ('confidence_score', 'anomaly_score', 'threshold_used')
|
||||
}),
|
||||
('Time Context', {
|
||||
'fields': ('detected_at', 'time_window_start', 'time_window_end')
|
||||
}),
|
||||
('Related Data', {
|
||||
'fields': ('related_incidents', 'affected_services', 'affected_metrics')
|
||||
}),
|
||||
('Analysis', {
|
||||
'fields': ('description', 'root_cause_analysis', 'impact_assessment')
|
||||
}),
|
||||
('Actions', {
|
||||
'fields': ('actions_taken', 'resolved_at', 'resolved_by')
|
||||
}),
|
||||
('Metadata', {
|
||||
'fields': ('metadata',),
|
||||
'classes': ('collapse',)
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
@admin.register(CostImpactAnalysis)
|
||||
class CostImpactAnalysisAdmin(admin.ModelAdmin):
|
||||
"""Admin interface for cost impact analysis"""
|
||||
|
||||
list_display = [
|
||||
'incident', 'cost_type', 'cost_amount', 'currency',
|
||||
'is_validated', 'created_at'
|
||||
]
|
||||
list_filter = [
|
||||
'cost_type', 'currency', 'is_validated', 'created_at'
|
||||
]
|
||||
search_fields = ['incident__title', 'business_unit']
|
||||
readonly_fields = ['id', 'created_at', 'updated_at']
|
||||
|
||||
fieldsets = (
|
||||
('Cost Details', {
|
||||
'fields': ('id', 'incident', 'cost_type', 'cost_amount', 'currency')
|
||||
}),
|
||||
('Calculation Details', {
|
||||
'fields': ('calculation_method', 'calculation_details')
|
||||
}),
|
||||
('Impact Metrics', {
|
||||
'fields': ('downtime_hours', 'affected_users', 'revenue_impact')
|
||||
}),
|
||||
('Business Context', {
|
||||
'fields': ('business_unit', 'service_tier')
|
||||
}),
|
||||
('Validation', {
|
||||
'fields': ('is_validated', 'validated_by', 'validated_at', 'validation_notes')
|
||||
}),
|
||||
('Metadata', {
|
||||
'fields': ('created_at', 'updated_at'),
|
||||
'classes': ('collapse',)
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
@admin.register(DashboardConfiguration)
|
||||
class DashboardConfigurationAdmin(admin.ModelAdmin):
|
||||
"""Admin interface for dashboard configurations"""
|
||||
|
||||
list_display = [
|
||||
'name', 'dashboard_type', 'is_active', 'is_public',
|
||||
'auto_refresh_enabled', 'created_by', 'created_at'
|
||||
]
|
||||
list_filter = [
|
||||
'dashboard_type', 'is_active', 'is_public', 'auto_refresh_enabled', 'created_at'
|
||||
]
|
||||
search_fields = ['name', 'description']
|
||||
readonly_fields = ['id', 'created_at', 'updated_at']
|
||||
|
||||
fieldsets = (
|
||||
('Basic Information', {
|
||||
'fields': ('id', 'name', 'description', 'dashboard_type')
|
||||
}),
|
||||
('Configuration', {
|
||||
'fields': ('layout_config', 'widget_configs')
|
||||
}),
|
||||
('Access Control', {
|
||||
'fields': ('is_public', 'allowed_users', 'allowed_roles')
|
||||
}),
|
||||
('Refresh Configuration', {
|
||||
'fields': ('auto_refresh_enabled', 'refresh_interval_seconds')
|
||||
}),
|
||||
('Status', {
|
||||
'fields': ('is_active',)
|
||||
}),
|
||||
('Metadata', {
|
||||
'fields': ('created_by', 'created_at', 'updated_at'),
|
||||
'classes': ('collapse',)
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
@admin.register(HeatmapData)
|
||||
class HeatmapDataAdmin(admin.ModelAdmin):
|
||||
"""Admin interface for heatmap data"""
|
||||
|
||||
list_display = [
|
||||
'name', 'heatmap_type', 'time_granularity',
|
||||
'aggregation_method', 'created_at'
|
||||
]
|
||||
list_filter = [
|
||||
'heatmap_type', 'time_granularity', 'aggregation_method', 'created_at'
|
||||
]
|
||||
search_fields = ['name']
|
||||
readonly_fields = ['id', 'created_at', 'updated_at']
|
||||
|
||||
fieldsets = (
|
||||
('Basic Information', {
|
||||
'fields': ('id', 'name', 'heatmap_type')
|
||||
}),
|
||||
('Time Configuration', {
|
||||
'fields': ('time_period_start', 'time_period_end', 'time_granularity')
|
||||
}),
|
||||
('Data Configuration', {
|
||||
'fields': ('data_points', 'color_scheme', 'aggregation_method')
|
||||
}),
|
||||
('Metadata', {
|
||||
'fields': ('created_at', 'updated_at'),
|
||||
'classes': ('collapse',)
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
@admin.register(PredictiveInsight)
|
||||
class PredictiveInsightAdmin(admin.ModelAdmin):
|
||||
"""Admin interface for predictive insights"""
|
||||
|
||||
list_display = [
|
||||
'title', 'insight_type', 'confidence_level', 'confidence_score',
|
||||
'is_acknowledged', 'is_validated', 'generated_at'
|
||||
]
|
||||
list_filter = [
|
||||
'insight_type', 'confidence_level', 'is_acknowledged',
|
||||
'is_validated', 'generated_at'
|
||||
]
|
||||
search_fields = ['title', 'description', 'model__name']
|
||||
readonly_fields = ['id', 'generated_at']
|
||||
|
||||
fieldsets = (
|
||||
('Insight Details', {
|
||||
'fields': ('id', 'model', 'insight_type', 'title', 'description', 'confidence_level', 'confidence_score')
|
||||
}),
|
||||
('Prediction Details', {
|
||||
'fields': ('predicted_value', 'prediction_horizon', 'prediction_date')
|
||||
}),
|
||||
('Context', {
|
||||
'fields': ('input_features', 'supporting_evidence', 'related_incidents', 'affected_services')
|
||||
}),
|
||||
('Recommendations', {
|
||||
'fields': ('recommendations', 'risk_assessment')
|
||||
}),
|
||||
('Status', {
|
||||
'fields': ('is_acknowledged', 'acknowledged_by', 'acknowledged_at')
|
||||
}),
|
||||
('Validation', {
|
||||
'fields': ('is_validated', 'actual_value', 'validation_accuracy')
|
||||
}),
|
||||
('Metadata', {
|
||||
'fields': ('generated_at', 'expires_at'),
|
||||
'classes': ('collapse',)
|
||||
})
|
||||
)
|
||||
Reference in New Issue
Block a user