267 lines
7.1 KiB
Python
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'
|
|
)
|