122 lines
4.3 KiB
Python
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()
|