Files
ETB/ETB-API/monitoring/serializers.py
Iliyan Angelov 6b247e5b9f Updates
2025-09-19 11:58:53 +03:00

201 lines
8.4 KiB
Python

"""
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()