Files
chunyu_project/logs/serializers.py
T
2026-08-05 23:59:15 +08:00

122 lines
4.3 KiB
Python

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