# -*- coding: utf-8 -*- from __future__ import print_function, unicode_literals, absolute_import, division from datetime import datetime from peewee import CharField, IntegerField, DateTimeField, BooleanField, AutoField from domain_admin.enums.ssl_type_enum import SSLTypeEnum from domain_admin.model.base_model import BaseModel from domain_admin.utils import datetime_util, time_util class DomainModel(BaseModel): """域名""" id = AutoField(primary_key=True) # 用户id user_id = IntegerField(default=0) # 域名 domain = CharField() # 顶级域名 @since 1.4.0 root_domain = CharField(default='') # 端口 @since v1.2.24 port = IntegerField(default=443) # 别名/备注 alias = CharField(default="") # 分组 group_id = IntegerField(default=0, null=False) # SSL签发时间 # @since v1.2.24 变更为:过期时间最短那个证书 start_time = DateTimeField(default=None, null=True) # SSL过期时间 # @since v1.2.24 变更为:过期时间最短那个证书 expire_time = DateTimeField(default=None, null=True) # SSL过期剩余天数,仅用于排序 # @since v1.2.24 变更为:过期时间最短那个证书 expire_days = IntegerField(default=0, null=False) # SSL证书信息自动更新 @since v1.2.13 auto_update = BooleanField(default=True) # 是否监测 @since 1.0.3 is_monitor = BooleanField(default=True) # 动态主机 @since 1.4.0 # @since 1.5.23 移除动态主机 is_dynamic_host = BooleanField(default=False) # SSL 加密方式 @since 1.5.23 ssl_type = IntegerField(default=SSLTypeEnum.SSL_TLS, null=False) # 连接状态 # @since v1.2.24 所有ip都连接成功才是成功 connect_status = BooleanField(default=None, null=True) # SSL有效期总天数,仅用于排序 total_days = IntegerField(default=0, null=False) # 数据版本号 @since 1.6.3 version = IntegerField(default=0, null=False) # 创建时间 create_time = DateTimeField(default=datetime.now) # 更新时间 update_time = DateTimeField(default=datetime.now) class Meta: table_name = 'tb_domain' indexes = ( # 唯一索引 (('user_id', 'domain', 'port'), True), # Note the trailing comma! ) @property def domain_url(self): return 'https://' + self.domain @property def create_time_label(self): return datetime_util.format_datetime_label(self.create_time) @property def update_time_label(self): return datetime_util.time_for_human(self.update_time) @property def start_date(self): if self.start_time and isinstance(self.start_time, datetime): return self.start_time.strftime('%Y-%m-%d') @property def expire_date(self): if self.expire_time and isinstance(self.expire_time, datetime): return self.expire_time.strftime('%Y-%m-%d') @property def real_time_ssl_total_days(self): """ 实时ssl总天数 :return: @since v1.3.1 """ return time_util.get_diff_days(self.start_time, self.expire_time) @property def real_time_expire_days(self): """ 实时ssl过期剩余天数 expire_days 是更新数据时所计算的时间,有滞后性 :return: int """ return time_util.get_diff_days(datetime.now(), self.expire_time) # if self.expire_time and isinstance(self.expire_time, datetime): # return (self.expire_time - datetime.now()).days # @since v1.3.1 real_time_ssl_expire_days = real_time_expire_days @property def expire_status(self): """ 过期状态 7 天以上 健康 0 天以上 亚健康 0 天及其以下 危险 :return: Optional[bool] """ if self.real_time_expire_days > 7: return True elif self.real_time_expire_days > 0: return None else: return False # 数据导入导出字段关系 FIELD_MAPPING = [ { 'name': '域名', 'field': 'domain', }, { 'name': '端口', 'field': 'port', 'default_value': '443', }, { 'name': '证书颁发时间', 'field': 'start_date', }, { 'name': '证书过期时间', 'field': 'expire_date', }, { 'name': '证书天数', 'field': 'real_time_expire_days', }, { 'name': '分组', 'field': 'group_name', }, { 'name': '备注', 'field': 'alias', }, ]