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

267 lines
7.1 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals, absolute_import, division
from datetime import datetime, timedelta
from flask import request, g
from domain_admin import version
from domain_admin import config
from domain_admin.enums.config_key_enum import ConfigKeyEnum
from domain_admin.enums.monitor_status_enum import MonitorStatusEnum
from domain_admin.enums.role_enum import RoleEnum
from domain_admin.model.domain_info_model import DomainInfoModel
from domain_admin.model.domain_model import DomainModel
from domain_admin.model.monitor_model import MonitorModel
from domain_admin.model.system_model import SystemModel
from domain_admin.service import scheduler_service, auth_service
from domain_admin.service.scheduler_service import scheduler_main
from domain_admin.utils import datetime_util, email_util
@auth_service.permission(role=RoleEnum.ADMIN)
def update_system_config():
"""
更新单个配置
:return:
"""
allow_keys = [
ConfigKeyEnum.MAIL_HOST,
ConfigKeyEnum.MAIL_PORT,
ConfigKeyEnum.MAIL_ALIAS,
ConfigKeyEnum.MAIL_USERNAME,
ConfigKeyEnum.MAIL_PASSWORD,
]
for key in allow_keys:
value = request.json[key]
SystemModel.update(
{
'value': value,
'update_time': datetime_util.get_datetime()
}
).where(
SystemModel.key == key
).execute()
@auth_service.permission(role=RoleEnum.ADMIN)
def get_all_system_config():
"""
获取所有配置项
:return:
"""
lst = SystemModel.select().where(
SystemModel.key.in_([
ConfigKeyEnum.MAIL_HOST,
ConfigKeyEnum.MAIL_PORT,
ConfigKeyEnum.MAIL_ALIAS,
ConfigKeyEnum.MAIL_USERNAME,
ConfigKeyEnum.MAIL_PASSWORD,
])
)
return {item.key: item.value for item in lst}
@auth_service.permission(role=RoleEnum.ADMIN)
def get_system_env_config():
"""
获取配置项
:return:
"""
lst = SystemModel.select().where(
SystemModel.key.in_([
ConfigKeyEnum.PROMETHEUS_KEY
])
)
return {item.key: item.value for item in lst}
@auth_service.permission(role=RoleEnum.ADMIN)
def get_cron_config():
"""
获取配置项
:return:
"""
lst = SystemModel.select().where(
SystemModel.key.in_([
ConfigKeyEnum.SCHEDULER_CRON
])
)
return {item.key: item.value for item in lst}
@auth_service.permission(role=RoleEnum.ADMIN)
def update_cron_config():
"""
更新cron配置
:return:
"""
scheduler_cron = request.json['scheduler_cron']
SystemModel.update(
{
'value': scheduler_cron,
'update_time': datetime_util.get_datetime()
}
).where(
SystemModel.key == ConfigKeyEnum.SCHEDULER_CRON
).execute()
# 更新定时
scheduler_service.update_job(scheduler_cron)
def get_system_version():
"""
获取当前应用版本号
:return:
"""
return {
'version': version.VERSION,
'enabled_register': config.ENABLED_REGISTER
}
@auth_service.permission(role=RoleEnum.USER)
def get_system_data():
current_user_id = g.user_id
now = datetime.now()
now_add_7_day = datetime.now() + timedelta(days=7)
ssl_cert_count = DomainModel.select().where(
DomainModel.user_id == current_user_id
).count()
ssl_cert_expire_count = DomainModel.select().where(
DomainModel.user_id == current_user_id
).where(
DomainModel.expire_time.is_null(False),
DomainModel.expire_time <= now
).count()
ssl_cert_will_expire_count = DomainModel.select().where(
DomainModel.user_id == current_user_id
).where(
(DomainModel.expire_time > now) &
(DomainModel.expire_time <= now_add_7_day)
).count()
domain_count = DomainInfoModel.select().where(
DomainInfoModel.user_id == current_user_id
).count()
domain_expire_count = DomainInfoModel.select().where(
DomainInfoModel.user_id == current_user_id
).where(
(DomainInfoModel.domain_expire_time <= now) |
(DomainInfoModel.domain_expire_time.is_null(True))
).count()
domain_will_expire_count = DomainInfoModel.select().where(
DomainInfoModel.user_id == current_user_id
).where(
(DomainInfoModel.domain_expire_time > now) &
(DomainInfoModel.domain_expire_time < now_add_7_day)
).count()
monitor_count = MonitorModel.select().where(
MonitorModel.user_id == current_user_id
).count()
monitor_error_count = MonitorModel.select().where(
MonitorModel.user_id == current_user_id,
MonitorModel.status == MonitorStatusEnum.ERROR,
).count()
return [
{
'title': '证书数量',
'key': 'ssl_cert_count',
'count': ssl_cert_count,
'path': '/cert/list',
},
{
'title': '即将过期证书',
'key': 'ssl_cert_will_expire_count',
'count': ssl_cert_will_expire_count,
'path': '/cert/list',
},
{
'title': '过期证书',
'key': 'ssl_cert_expire_count',
'count': ssl_cert_expire_count,
'path': '/cert/list'
},
{
'title': '域名数量',
'key': 'domain_count',
'count': domain_count,
'path': '/domain/list'
},
{
'title': '即将过期域名',
'key': 'domain_will_expire_count',
'count': domain_will_expire_count,
'path': '/domain/list',
},
{
'title': '过期域名',
'key': 'domain_expire_count',
'count': domain_expire_count,
'path': '/domain/list'
},
{
'title': '监控数量',
'count': monitor_count,
'key': 'monitor_count',
'path': '/monitor/list'
},
{
'title': '监控异常',
'key': 'monitor_error_count',
'count': monitor_error_count,
'path': '/monitor/list'
}
]
@auth_service.permission(role=RoleEnum.ADMIN)
def get_monitor_task_next_run_time():
return {
'next_run_time': scheduler_main.get_monitor_task_next_run_time()
}
@auth_service.permission(role=RoleEnum.ADMIN)
def send_test_email():
"""
发送测试邮件
:return:
"""
mail_host = request.json['mail_host']
mail_port = request.json['mail_port']
mail_alias = request.json['mail_alias']
mail_username = request.json['mail_username']
mail_password = request.json['mail_password']
subject = request.json['subject']
content = request.json['content']
email_list = request.json['email_list']
email_util.send_email(
mail_host=mail_host,
mail_port=int(mail_port),
mail_alias=mail_alias,
subject=subject,
content=content,
to_addresses=email_list,
mail_username=mail_username,
mail_password=mail_password,
content_type='plain'
)