201 lines
8.4 KiB
Python
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()
|