from django.db import models from django.utils import timezone class BaseProcessMonitor(models.Model): """基础进程监控模型""" pid = models.IntegerField(verbose_name='进程ID') process_name = models.CharField(max_length=255, verbose_name='进程名称') is_active = models.BooleanField(default=True, verbose_name='是否活跃') status = models.IntegerField(default=1, verbose_name='进程状态') # 1: 运行中, 0: 已终止 created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间') log_file = models.CharField(max_length=255, null=True, blank=True, verbose_name='日志文件路径') class Meta: abstract = True class HighCPUProcess(BaseProcessMonitor): """CPU高占用进程监控""" cpu_usage = models.FloatField(default=0, verbose_name='CPU使用率') cpu_cores = models.IntegerField(default=0, verbose_name='CPU核心数') class Meta: verbose_name = 'CPU高占用进程' verbose_name_plural = verbose_name class HighGPUProcess(BaseProcessMonitor): """GPU高占用进程监控""" gpu_usage = models.FloatField(default=0, verbose_name='GPU使用率') gpu_memory = models.FloatField(default=0, verbose_name='GPU显存使用量(MB)') gpu_index = models.IntegerField(default=0, verbose_name='GPU设备索引') class Meta: verbose_name = 'GPU高占用进程' verbose_name_plural = verbose_name class HighMemoryProcess(BaseProcessMonitor): """内存高占用进程监控""" memory_usage = models.FloatField(default=0, verbose_name='内存使用量(GB)') memory_percent = models.FloatField(default=0, verbose_name='内存使用率') virtual_memory = models.FloatField(default=0, verbose_name='虚拟内存使用量(GB)') swap_usage = models.FloatField(default=0, verbose_name='交换内存使用量(GB)') class Meta: verbose_name = '内存高占用进程' verbose_name_plural = verbose_name class AllResourceProcess(models.Model): """所有资源统计""" pid = models.IntegerField('进程ID') process_name = models.CharField('进程名称', max_length=100) # CPU 相关 cpu_usage = models.FloatField('CPU使用率', default=0) cpu_user_time = models.FloatField('用户态CPU时间', default=0) cpu_system_time = models.FloatField('系统态CPU时间', default=0) # 内存相关 memory_usage = models.FloatField('内存使用量(MB)', default=0) memory_percent = models.FloatField('内存使用率', default=0) virtual_memory = models.FloatField('虚拟内存(MB)', default=0) # GPU 相关 gpu_usage = models.FloatField('GPU使用率', default=0) gpu_memory = models.FloatField('GPU内存使用量(MB)', default=0) # 网络相关 net_io_sent = models.FloatField('网络发送量(MB)', default=0) net_io_recv = models.FloatField('网络接收量(MB)', default=0) # 状态相关 is_active = models.BooleanField('是否活跃', default=True) status = models.IntegerField('状态', default=1) # 1:运行中, 0:已终止 log_file = models.CharField('日志文件路径', max_length=255, null=True) created_at = models.DateTimeField('创建时间', auto_now_add=True) updated_at = models.DateTimeField('更新时间', auto_now=True) class Meta: db_table = 'all_resource_process' verbose_name = '全资源监控' verbose_name_plural = verbose_name class TiktokUserVideos(models.Model): """TikTok用户视频信息""" sec_user_id = models.CharField(max_length=255, unique=True) nickname = models.CharField(max_length=255) signature = models.TextField(blank=True, null=True) follower_count = models.IntegerField(default=0) total_favorited = models.IntegerField(default=0) avatar_url = models.TextField(blank=True, null=True) videos_folder = models.CharField(max_length=255) video_paths = models.TextField(blank=True, null=True) create_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = 'TikTok用户视频' verbose_name_plural = 'TikTok用户视频' def __str__(self): return f"{self.nickname} ({self.sec_user_id})"