Files
2026-07-13 12:31:34 +08:00

179 lines
4.6 KiB
Python

# -*- 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',
},
]