""" Serializers for monitoring models """ from rest_framework import serializers from monitoring.models import ( MonitoringTarget, HealthCheck, SystemMetric, MetricMeasurement, AlertRule, Alert, MonitoringDashboard, SystemStatus ) class MonitoringTargetSerializer(serializers.ModelSerializer): """Serializer for MonitoringTarget model""" last_status_display = serializers.CharField(source='get_last_status_display', read_only=True) target_type_display = serializers.CharField(source='get_target_type_display', read_only=True) class Meta: model = MonitoringTarget fields = [ 'id', 'name', 'description', 'target_type', 'target_type_display', 'endpoint_url', 'connection_config', 'check_interval_seconds', 'timeout_seconds', 'retry_count', 'health_check_enabled', 'health_check_endpoint', 'expected_status_codes', 'status', 'last_checked', 'last_status', 'last_status_display', 'related_module', 'created_by', 'created_at', 'updated_at' ] read_only_fields = ['id', 'created_at', 'updated_at', 'last_checked'] class HealthCheckSerializer(serializers.ModelSerializer): """Serializer for HealthCheck model""" target_name = serializers.CharField(source='target.name', read_only=True) status_display = serializers.CharField(source='get_status_display', read_only=True) check_type_display = serializers.CharField(source='get_check_type_display', read_only=True) class Meta: model = HealthCheck fields = [ 'id', 'target', 'target_name', 'check_type', 'check_type_display', 'status', 'status_display', 'response_time_ms', 'status_code', 'response_body', 'error_message', 'cpu_usage_percent', 'memory_usage_percent', 'disk_usage_percent', 'checked_at' ] read_only_fields = ['id', 'checked_at'] class SystemMetricSerializer(serializers.ModelSerializer): """Serializer for SystemMetric model""" metric_type_display = serializers.CharField(source='get_metric_type_display', read_only=True) category_display = serializers.CharField(source='get_category_display', read_only=True) aggregation_method_display = serializers.CharField(source='get_aggregation_method_display', read_only=True) class Meta: model = SystemMetric fields = [ 'id', 'name', 'description', 'metric_type', 'metric_type_display', 'category', 'category_display', 'unit', 'aggregation_method', 'aggregation_method_display', 'collection_interval_seconds', 'retention_days', 'warning_threshold', 'critical_threshold', 'is_active', 'is_system_metric', 'related_module', 'created_by', 'created_at', 'updated_at' ] read_only_fields = ['id', 'created_at', 'updated_at'] class MetricMeasurementSerializer(serializers.ModelSerializer): """Serializer for MetricMeasurement model""" metric_name = serializers.CharField(source='metric.name', read_only=True) metric_unit = serializers.CharField(source='metric.unit', read_only=True) class Meta: model = MetricMeasurement fields = [ 'id', 'metric', 'metric_name', 'metric_unit', 'value', 'timestamp', 'tags', 'metadata' ] read_only_fields = ['id', 'timestamp'] class AlertRuleSerializer(serializers.ModelSerializer): """Serializer for AlertRule model""" alert_type_display = serializers.CharField(source='get_alert_type_display', read_only=True) severity_display = serializers.CharField(source='get_severity_display', read_only=True) status_display = serializers.CharField(source='get_status_display', read_only=True) metric_name = serializers.CharField(source='metric.name', read_only=True) target_name = serializers.CharField(source='target.name', read_only=True) class Meta: model = AlertRule fields = [ 'id', 'name', 'description', 'alert_type', 'alert_type_display', 'severity', 'severity_display', 'condition', 'evaluation_interval_seconds', 'metric', 'metric_name', 'target', 'target_name', 'notification_channels', 'notification_template', 'status', 'status_display', 'is_enabled', 'created_by', 'created_at', 'updated_at' ] read_only_fields = ['id', 'created_at', 'updated_at'] class AlertSerializer(serializers.ModelSerializer): """Serializer for Alert model""" rule_name = serializers.CharField(source='rule.name', read_only=True) severity_display = serializers.CharField(source='get_severity_display', read_only=True) status_display = serializers.CharField(source='get_status_display', read_only=True) acknowledged_by_username = serializers.CharField(source='acknowledged_by.username', read_only=True) resolved_by_username = serializers.CharField(source='resolved_by.username', read_only=True) class Meta: model = Alert fields = [ 'id', 'rule', 'rule_name', 'title', 'description', 'severity', 'severity_display', 'status', 'status_display', 'triggered_value', 'threshold_value', 'context_data', 'triggered_at', 'acknowledged_at', 'resolved_at', 'acknowledged_by', 'acknowledged_by_username', 'resolved_by', 'resolved_by_username' ] read_only_fields = ['id', 'triggered_at'] class MonitoringDashboardSerializer(serializers.ModelSerializer): """Serializer for MonitoringDashboard model""" dashboard_type_display = serializers.CharField(source='get_dashboard_type_display', read_only=True) created_by_username = serializers.CharField(source='created_by.username', read_only=True) class Meta: model = MonitoringDashboard fields = [ 'id', 'name', 'description', 'dashboard_type', 'dashboard_type_display', 'layout_config', 'widget_configs', 'is_public', 'allowed_users', 'allowed_roles', 'auto_refresh_enabled', 'refresh_interval_seconds', 'is_active', 'created_by', 'created_by_username', 'created_at', 'updated_at' ] read_only_fields = ['id', 'created_at', 'updated_at'] class SystemStatusSerializer(serializers.ModelSerializer): """Serializer for SystemStatus model""" status_display = serializers.CharField(source='get_status_display', read_only=True) created_by_username = serializers.CharField(source='created_by.username', read_only=True) is_resolved = serializers.BooleanField(read_only=True) class Meta: model = SystemStatus fields = [ 'id', 'status', 'status_display', 'message', 'affected_services', 'estimated_resolution', 'started_at', 'updated_at', 'resolved_at', 'created_by', 'created_by_username', 'is_resolved' ] read_only_fields = ['id', 'started_at', 'updated_at'] class HealthCheckSummarySerializer(serializers.Serializer): """Serializer for health check summary""" overall_status = serializers.CharField() total_targets = serializers.IntegerField() healthy_targets = serializers.IntegerField() warning_targets = serializers.IntegerField() critical_targets = serializers.IntegerField() health_percentage = serializers.FloatField() last_updated = serializers.DateTimeField() class MetricTrendSerializer(serializers.Serializer): """Serializer for metric trends""" metric_name = serializers.CharField() period_days = serializers.IntegerField() daily_data = serializers.ListField() trend = serializers.CharField() class AlertSummarySerializer(serializers.Serializer): """Serializer for alert summary""" total_alerts = serializers.IntegerField() critical_alerts = serializers.IntegerField() high_alerts = serializers.IntegerField() medium_alerts = serializers.IntegerField() low_alerts = serializers.IntegerField() acknowledged_alerts = serializers.IntegerField() resolved_alerts = serializers.IntegerField() class SystemOverviewSerializer(serializers.Serializer): """Serializer for system overview""" system_status = SystemStatusSerializer() health_summary = HealthCheckSummarySerializer() alert_summary = AlertSummarySerializer() recent_incidents = serializers.ListField() top_metrics = serializers.ListField() system_resources = serializers.DictField()