179 lines
4.6 KiB
Python
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',
|
|
},
|
|
]
|