from django.db import models from django.conf import settings from django.utils import timezone class UserTiDBUsage(models.Model): SOURCE_EXTRACT_FROM_ASKTUG_TOPIC = 'extract_from_asktug_topic' SOURCE_USER_SUBMIT = 'user_submit' SOURCE_STAFF_SUBMIT = 'staff_submit' SOURCE_SYNC_FORM_ASKTUG = 'sync_from_asktug' SOURCE_CHOICES = ( (SOURCE_EXTRACT_FROM_ASKTUG_TOPIC, '自动从 AskTUG 问题中提取'), (SOURCE_USER_SUBMIT, '用户提交'), (SOURCE_STAFF_SUBMIT, '管理员提交'), (SOURCE_SYNC_FORM_ASKTUG, '从 AskTUG 同步'), ) user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING) version = models.CharField(max_length=32) source = models.CharField( max_length=128, choices=SOURCE_CHOICES, default=SOURCE_SYNC_FORM_ASKTUG ) asktug_topic_id = models.IntegerField(blank=True, null=True) topic_created_at = models.DateTimeField(blank=True, null=True) topic_deleted_at = models.DateTimeField(blank=True, null=True) enviroment = models.CharField(max_length=32, blank=True, null=True) cloud_provider = models.CharField(max_length=32, blank=True, null=True) deployment_opreation_system = models.CharField(max_length=64, blank=True, null=True) deployment_type = models.CharField(max_length=64, blank=True, null=True) tidb_cluster_data_size = models.CharField(max_length=32, blank=True, null=True) tidb_cluster_node_number = models.CharField(max_length=32, blank=True, null=True) ai_extracted_at = models.DateTimeField(blank=True, null=True) created_at = models.DateTimeField(default=timezone.now) updated_at = models.DateTimeField(auto_now=True) deleted_at = models.DateTimeField(blank=True, null=True) class Meta: db_table = 'pingcap_user_tidb_usage' @property def description(self): from pingcap_sso.discourse.models import DiscourseTopic if self.asktug_topic_id: topic_url = f'https://asktug.com/t/topic/{self.asktug_topic_id}' try: topic = DiscourseTopic.objects.get(id=self.asktug_topic_id) topic_title = topic.title except DiscourseTopic.DoesNotExist: topic_title = '未找到' return f'[{topic_title}]({topic_url})' elif self.source == self.SOURCE_EXTRACT_FROM_ASKTUG_TOPIC: return f'从 https://asktug.com/t/topic/{ self.asktug_topic_id } 自动提取' elif self.source == self.SOURCE_STAFF_SUBMIT: return '管理人员手动添加' elif self.source == self.SOURCE_USER_SUBMIT: return '用户主动提交' else: return '无'