from rest_framework import serializers from .models import ApiRequestLog, ErrorLog, SystemEventLog class ApiRequestLogSerializer(serializers.ModelSerializer): username = serializers.CharField(read_only=True) class Meta: model = ApiRequestLog fields = [ 'id', 'timestamp', 'user', 'username', 'ip_address', 'user_agent', 'method', 'path', 'query_string', 'request_body', 'status_code', 'response_size', 'duration_ms', 'app_name', 'is_error', ] read_only_fields = fields class ApiRequestLogListSerializer(serializers.ModelSerializer): class Meta: model = ApiRequestLog fields = [ 'id', 'timestamp', 'username', 'ip_address', 'method', 'path', 'status_code', 'duration_ms', 'app_name', 'is_error', ] read_only_fields = fields class ErrorLogSerializer(serializers.ModelSerializer): class Meta: model = ErrorLog fields = [ 'id', 'timestamp', 'level', 'message', 'module', 'function', 'line_number', 'exception_type', 'traceback', 'user', 'ip_address', 'path', 'request_data', 'is_resolved', 'resolved_at', 'hash_key', 'occurrence_count', ] read_only_fields = [ 'id', 'timestamp', 'level', 'message', 'module', 'function', 'line_number', 'exception_type', 'traceback', 'user', 'ip_address', 'path', 'request_data', 'hash_key', 'occurrence_count', ] class ErrorLogListSerializer(serializers.ModelSerializer): class Meta: model = ErrorLog fields = [ 'id', 'timestamp', 'level', 'message', 'module', 'exception_type', 'is_resolved', 'occurrence_count', ] read_only_fields = fields class ErrorLogResolveSerializer(serializers.ModelSerializer): class Meta: model = ErrorLog fields = ['is_resolved', 'resolved_at'] class SystemEventLogSerializer(serializers.ModelSerializer): username = serializers.CharField(source='user.username', read_only=True) target_username = serializers.CharField(source='target_user.username', read_only=True, default=None) event_type_display = serializers.CharField(source='get_event_type_display', read_only=True) result_display = serializers.CharField(source='get_result_display', read_only=True) class Meta: model = SystemEventLog fields = [ 'id', 'timestamp', 'event_type', 'event_type_display', 'user', 'username', 'target_user', 'target_username', 'description', 'metadata', 'ip_address', 'user_agent', 'result', 'result_display', ] read_only_fields = fields class SystemEventLogListSerializer(serializers.ModelSerializer): username = serializers.CharField(source='user.username', read_only=True) event_type_display = serializers.CharField(source='get_event_type_display', read_only=True) class Meta: model = SystemEventLog fields = [ 'id', 'timestamp', 'event_type', 'event_type_display', 'username', 'description', 'result', ] read_only_fields = fields class StatsSummarySerializer(serializers.Serializer): total_requests = serializers.IntegerField() total_errors = serializers.IntegerField() error_rate = serializers.FloatField() avg_duration_ms = serializers.FloatField() max_duration_ms = serializers.FloatField() unique_users = serializers.IntegerField() unique_ips = serializers.IntegerField() top_status_codes = serializers.ListField() error_count_today = serializers.IntegerField() request_count_today = serializers.IntegerField() class PathStatsSerializer(serializers.Serializer): path = serializers.CharField() request_count = serializers.IntegerField() error_count = serializers.IntegerField() error_rate = serializers.FloatField() avg_duration_ms = serializers.FloatField() class HourlyStatsSerializer(serializers.Serializer): hour = serializers.IntegerField() request_count = serializers.IntegerField() error_count = serializers.IntegerField() avg_duration_ms = serializers.FloatField() class ErrorTypeStatsSerializer(serializers.Serializer): exception_type = serializers.CharField() count = serializers.IntegerField() last_occurred = serializers.DateTimeField() module = serializers.CharField()