91 lines
7.3 KiB
Python
91 lines
7.3 KiB
Python
# Generated by Django 5.2.12 on 2026-06-15 20:07
|
|
|
|
import django.db.models.deletion
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
initial = True
|
|
|
|
dependencies = [
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name='ErrorLog',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('timestamp', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='发生时间')),
|
|
('level', models.CharField(choices=[('DEBUG', 'DEBUG'), ('INFO', 'INFO'), ('WARNING', 'WARNING'), ('ERROR', 'ERROR'), ('CRITICAL', 'CRITICAL')], db_index=True, default='ERROR', max_length=20, verbose_name='日志级别')),
|
|
('message', models.TextField(verbose_name='日志消息')),
|
|
('module', models.CharField(blank=True, db_index=True, default='', max_length=100, verbose_name='发生模块')),
|
|
('function', models.CharField(blank=True, default='', max_length=100, verbose_name='发生函数')),
|
|
('line_number', models.IntegerField(blank=True, null=True, verbose_name='行号')),
|
|
('exception_type', models.CharField(blank=True, default='', max_length=200, verbose_name='异常类型')),
|
|
('traceback', models.TextField(blank=True, default='', verbose_name='堆栈信息')),
|
|
('ip_address', models.GenericIPAddressField(blank=True, null=True, verbose_name='IP地址')),
|
|
('path', models.CharField(blank=True, default='', max_length=255, verbose_name='请求路径')),
|
|
('request_data', models.TextField(blank=True, default='', verbose_name='请求数据')),
|
|
('is_resolved', models.BooleanField(db_index=True, default=False, verbose_name='是否已处理')),
|
|
('resolved_at', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')),
|
|
('hash_key', models.CharField(db_index=True, max_length=64, unique=True, verbose_name='错误Hash')),
|
|
('occurrence_count', models.IntegerField(default=1, verbose_name='出现次数')),
|
|
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='error_logs', to=settings.AUTH_USER_MODEL, verbose_name='用户')),
|
|
],
|
|
options={
|
|
'verbose_name': '错误日志',
|
|
'verbose_name_plural': '错误日志',
|
|
'ordering': ['-timestamp'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='SystemEventLog',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('timestamp', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='事件时间')),
|
|
('event_type', models.CharField(choices=[('login', '用户登录'), ('logout', '用户登出'), ('register', '用户注册'), ('password_reset', '密码重置'), ('password_change', '密码修改'), ('profile_update', '资料更新'), ('phone_bind', '手机绑定'), ('email_bind', '邮箱绑定'), ('avatar_upload', '头像上传'), ('checkin', '每日签到'), ('points_change', '积分变动'), ('coins_change', 'y币变动'), ('article_create', '文章创建'), ('article_update', '文章更新'), ('article_delete', '文章删除'), ('comment_create', '评论创建'), ('favorite_add', '收藏添加'), ('favorite_remove', '收藏取消'), ('blacklist_add', '拉黑用户'), ('blacklist_remove', '取消拉黑'), ('admin_action', '管理员操作'), ('system_error', '系统错误'), ('other', '其他')], db_index=True, max_length=50, verbose_name='事件类型')),
|
|
('description', models.CharField(blank=True, default='', max_length=500, verbose_name='描述')),
|
|
('metadata', models.JSONField(blank=True, default=dict, verbose_name='额外数据')),
|
|
('ip_address', models.GenericIPAddressField(blank=True, null=True, verbose_name='IP地址')),
|
|
('user_agent', models.CharField(blank=True, default='', max_length=500, verbose_name='User-Agent')),
|
|
('result', models.CharField(choices=[('success', '成功'), ('failed', '失败'), ('partial', '部分成功')], db_index=True, default='success', max_length=20, verbose_name='结果')),
|
|
('target_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='targeted_event_logs', to=settings.AUTH_USER_MODEL, verbose_name='目标用户')),
|
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='system_event_logs', to=settings.AUTH_USER_MODEL, verbose_name='操作用户')),
|
|
],
|
|
options={
|
|
'verbose_name': '系统事件日志',
|
|
'verbose_name_plural': '系统事件日志',
|
|
'ordering': ['-timestamp'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='ApiRequestLog',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('timestamp', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='请求时间')),
|
|
('username', models.CharField(blank=True, default='', max_length=150, verbose_name='用户名')),
|
|
('ip_address', models.GenericIPAddressField(blank=True, db_index=True, null=True, verbose_name='IP地址')),
|
|
('user_agent', models.CharField(blank=True, default='', max_length=500, verbose_name='User-Agent')),
|
|
('method', models.CharField(db_index=True, max_length=10, verbose_name='HTTP方法')),
|
|
('path', models.CharField(db_index=True, max_length=255, verbose_name='请求路径')),
|
|
('query_string', models.TextField(blank=True, default='', verbose_name='查询参数')),
|
|
('request_body', models.TextField(blank=True, default='', verbose_name='请求体')),
|
|
('status_code', models.IntegerField(db_index=True, verbose_name='状态码')),
|
|
('response_size', models.IntegerField(default=0, verbose_name='响应大小(字节)')),
|
|
('duration_ms', models.FloatField(db_index=True, verbose_name='耗时(毫秒)')),
|
|
('app_name', models.CharField(blank=True, db_index=True, default='', max_length=50, verbose_name='应用模块')),
|
|
('is_error', models.BooleanField(db_index=True, default=False, verbose_name='是否错误')),
|
|
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='api_request_logs', to=settings.AUTH_USER_MODEL, verbose_name='用户')),
|
|
],
|
|
options={
|
|
'verbose_name': 'API请求日志',
|
|
'verbose_name_plural': 'API请求日志',
|
|
'ordering': ['-timestamp'],
|
|
'indexes': [models.Index(fields=['timestamp', '-duration_ms'], name='idx_request_time_duration'), models.Index(fields=['status_code', 'timestamp'], name='idx_request_status_time')],
|
|
},
|
|
),
|
|
]
|