Initial YakPanel commit
This commit is contained in:
185
class_v2/adminer/api.py
Normal file
185
class_v2/adminer/api.py
Normal file
@@ -0,0 +1,185 @@
|
||||
# coding: utf-8
|
||||
# -------------------------------------------------------------------
|
||||
# YakPanel
|
||||
# -------------------------------------------------------------------
|
||||
# Copyright (c) 2014-2099 YakPanel(www.yakpanel.com) All rights reserved.
|
||||
# -------------------------------------------------------------------
|
||||
# Author: yakpanel
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
# ------------------------------
|
||||
# Adminer Api
|
||||
# ------------------------------
|
||||
import os
|
||||
import time
|
||||
|
||||
import public
|
||||
from public.exceptions import HintException
|
||||
from public.validate import Param
|
||||
from .config import *
|
||||
from .manager import AdminerManager
|
||||
|
||||
|
||||
class AdminerApi(AdminerManager):
|
||||
def support_versions(self, get=None):
|
||||
"""Adminer支持的版本列表"""
|
||||
return public.success_v2(self.get_support_versions)
|
||||
|
||||
def uninstall(self, get=None):
|
||||
"""卸载"""
|
||||
if not self.is_install:
|
||||
return public.success_v2(public.lang("Adminer is not installed!"))
|
||||
|
||||
public.ExecShell(f"rm -rf {DEFAULT_DIR}/")
|
||||
|
||||
public.ExecShell(f"rm -f {NGX_CONF_PATH}")
|
||||
public.ExecShell(f"rm -f {APC_CONF_PATH}")
|
||||
public.ExecShell(f"rm -f {OLS_CONF_PATH}")
|
||||
|
||||
public.ExecShell(f"rm -f {NGX_CONF_PATH}.bak")
|
||||
public.ExecShell(f"rm -f {APC_CONF_PATH}.bak")
|
||||
public.ExecShell(f"rm -f {OLS_CONF_PATH}.bak")
|
||||
self.service_reload()
|
||||
return public.success_v2(public.lang("Uninstall Successfully!"))
|
||||
|
||||
def get_status(self, get=None):
|
||||
"""获取服务的综合状态信息"""
|
||||
if not self.is_install:
|
||||
return public.success_v2({
|
||||
"php_version": "",
|
||||
"install": 0,
|
||||
"version": "",
|
||||
"port": 0,
|
||||
})
|
||||
return public.success_v2({
|
||||
"php_version": self.adminer_php_version,
|
||||
"install": 1,
|
||||
"version": self.adminer_version,
|
||||
"port": self.adminer_port,
|
||||
})
|
||||
|
||||
@AdminerManager.require_env
|
||||
def install(self, get):
|
||||
"""安装"""
|
||||
try:
|
||||
get.validate([
|
||||
Param("version").Regexp(r"^\d+(?:\.\d+)+$").Require(),
|
||||
], [
|
||||
public.validate.trim_filter(),
|
||||
])
|
||||
version = str(get.version)
|
||||
except Exception as ex:
|
||||
public.print_log("error info: {}".format(ex))
|
||||
return public.fail_v2(str(ex))
|
||||
|
||||
done = False
|
||||
# 清空目录, 清空配置 (即便开启多服务)
|
||||
self.uninstall()
|
||||
dst = f"{DEFAULT_DIR}/adminer_{public.GetRandomString(16)}"
|
||||
try:
|
||||
msg = ""
|
||||
count = 0
|
||||
while count <= 2:
|
||||
try:
|
||||
file = self.download_official_file(ver=version, dst=dst)
|
||||
if os.path.exists(file):
|
||||
break
|
||||
except Exception as ex:
|
||||
msg = ex
|
||||
time.sleep(1)
|
||||
count += 1
|
||||
if msg != "":
|
||||
raise HintException(msg or "Download Adminer failed, please try again!")
|
||||
|
||||
public.ExecShell(f"chown -R root:root {DEFAULT_DIR}")
|
||||
public.ExecShell(f"chmod -R 755 {dst}")
|
||||
public.writeFile(VERSION_PL, version)
|
||||
public.writeFile(PORT_PL, str(DEFAULT_PORT))
|
||||
|
||||
self.all_generate_conf(force=True)
|
||||
self.service_reload()
|
||||
done = True
|
||||
return public.success_v2(public.lang("Install Successfully!"))
|
||||
except Exception as e:
|
||||
import traceback
|
||||
public.print_log(traceback.format_exc())
|
||||
public.print_log('Download Adminer Error {}'.format(e))
|
||||
raise HintException(e)
|
||||
finally:
|
||||
if done is False:
|
||||
public.ExecShell(f"rm -rf {dst}")
|
||||
|
||||
@AdminerManager.require_env
|
||||
def repair(self, get):
|
||||
"""重新安装, 或重新安装指定版本"""
|
||||
try:
|
||||
get.validate([
|
||||
Param("version").Regexp(r"^\d+(?:\.\d+)+$").Require(),
|
||||
], [
|
||||
public.validate.trim_filter(),
|
||||
])
|
||||
except Exception as ex:
|
||||
public.print_log("error info: {}".format(ex))
|
||||
return public.fail_v2(str(ex))
|
||||
try:
|
||||
self.install(get)
|
||||
return public.success_v2(public.lang("Install Successfully!"))
|
||||
except Exception as ex:
|
||||
public.print_log("error info: {}".format(ex))
|
||||
return public.fail_v2(str(ex))
|
||||
|
||||
@AdminerManager.require_env
|
||||
def switch_port(self, get):
|
||||
"""更新端口"""
|
||||
try:
|
||||
get.validate([
|
||||
Param("port").Integer().Require(),
|
||||
], [
|
||||
public.validate.trim_filter(),
|
||||
])
|
||||
except Exception as ex:
|
||||
public.print_log("error info: {}".format(ex))
|
||||
return public.fail_v2(str(ex))
|
||||
if not self.is_install:
|
||||
return public.fail_v2(public.lang("Adminer is not installed!"))
|
||||
|
||||
port = int(get.port)
|
||||
if port == self.adminer_port:
|
||||
return public.success_v2(public.lang("Set Adminer port successfully!"))
|
||||
if not public.checkPort(port):
|
||||
return public.fail_v2(public.lang(f"Port {port} is already in use or invalid!"))
|
||||
try:
|
||||
public.writeFile(PORT_PL, str(port))
|
||||
self.all_generate_conf(force=True)
|
||||
self.service_reload()
|
||||
return public.success_v2(public.lang("Set successfully!"))
|
||||
except Exception as e:
|
||||
public.print_log('Set Adminer Port Error {}'.format(e))
|
||||
raise HintException("Set failed!")
|
||||
|
||||
@AdminerManager.require_env
|
||||
def switch_php(self, get):
|
||||
try:
|
||||
get.validate([
|
||||
Param("php_version").Regexp("\d+").Require(),
|
||||
], [
|
||||
public.validate.trim_filter(),
|
||||
])
|
||||
php_version = str(get.php_version).replace(".", "")
|
||||
except Exception as ex:
|
||||
public.print_log("error info: {}".format(ex))
|
||||
return public.fail_v2(str(ex))
|
||||
if not self.is_install:
|
||||
return public.fail_v2(public.lang("Adminer is not installed!"))
|
||||
|
||||
if php_version == self.adminer_php_version:
|
||||
return public.success_v2(public.lang("Set successfully!"))
|
||||
|
||||
try:
|
||||
self.all_generate_conf(force=True, php_ver=php_version)
|
||||
self.service_reload()
|
||||
return public.success_v2(public.lang("Set Adminer php version successfully!"))
|
||||
except HintException as e:
|
||||
raise e
|
||||
except Exception as ex:
|
||||
return public.fail_v2(f"Set Adminer PHP Version Error {ex}")
|
||||
Reference in New Issue
Block a user