mdserver-web/plugins/simdht/index.py

316 lines
7.8 KiB
Python
Raw Normal View History

2020-05-17 10:36:58 -04:00
# coding: utf-8
import time
import random
import os
import json
import re
import sys
sys.path.append(os.getcwd() + "/class/core")
2020-07-10 03:57:25 -04:00
import mw
2020-05-17 10:36:58 -04:00
app_debug = False
2020-07-10 03:57:25 -04:00
if mw.isAppleSystem():
2020-05-17 10:36:58 -04:00
app_debug = True
def getPluginName():
return 'simdht'
def getPluginDir():
2020-07-10 03:57:25 -04:00
return mw.getPluginDir() + '/' + getPluginName()
2020-05-17 10:36:58 -04:00
sys.path.append(getPluginDir() + "/class")
2021-04-30 22:56:12 -04:00
import simdht_mysql
2020-05-17 10:36:58 -04:00
def getServerDir():
2020-07-10 03:57:25 -04:00
return mw.getServerDir() + '/' + getPluginName()
2020-05-17 10:36:58 -04:00
def getInitDFile():
if app_debug:
return '/tmp/' + getPluginName()
return '/etc/init.d/' + getPluginName()
def getArgs():
args = sys.argv[2:]
tmp = {}
args_len = len(args)
if args_len == 1:
t = args[0].strip('{').strip('}')
t = t.split(':')
tmp[t[0]] = t[1]
elif args_len > 1:
for i in range(len(args)):
t = args[i].split(':')
tmp[t[0]] = t[1]
return tmp
def checkArgs(data, ck=[]):
for i in range(len(ck)):
if not ck[i] in data:
2020-07-10 03:57:25 -04:00
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!'))
return (True, mw.returnJson(True, 'ok'))
2020-05-17 10:36:58 -04:00
def getInitDTpl():
path = getPluginDir() + "/init.d/" + getPluginName() + ".tpl"
return path
def getSqlFile():
file = getPluginDir() + "/conf/simdht.sql"
return file
def getDbConf():
file = getServerDir() + "/db.cfg"
return file
def getCheckdbPos():
file = getServerDir() + "/start_pos.pl"
return file
2020-07-10 03:57:25 -04:00
2020-05-17 10:36:58 -04:00
def getBlackList():
file = getServerDir() + "/workers/black_list.txt"
return file
2020-07-10 03:57:25 -04:00
2020-05-17 10:36:58 -04:00
def getRunLog():
file = getServerDir() + "/logs.pl"
return file
def initDreplace():
ddir = getServerDir() + '/workers'
if not os.path.exists(ddir):
sdir = getPluginDir() + '/workers'
2020-07-10 03:57:25 -04:00
mw.execShell('cp -rf ' + sdir + ' ' + getServerDir())
2020-05-17 10:36:58 -04:00
cfg = getServerDir() + '/db.cfg'
if not os.path.exists(cfg):
cfg_tpl = getPluginDir() + '/workers/db.cfg'
2020-07-10 03:57:25 -04:00
content = mw.readFile(cfg_tpl)
mw.writeFile(cfg, content)
2020-05-17 10:36:58 -04:00
file_tpl = getInitDTpl()
service_path = os.path.dirname(os.getcwd())
initD_path = getServerDir() + '/init.d'
if not os.path.exists(initD_path):
os.mkdir(initD_path)
file_bin = initD_path + '/' + getPluginName()
# initd replace
2020-07-10 03:57:25 -04:00
content = mw.readFile(file_tpl)
2020-05-17 10:36:58 -04:00
content = content.replace('{$SERVER_PATH}', service_path)
2020-07-10 03:57:25 -04:00
mw.writeFile(file_bin, content)
mw.execShell('chmod +x ' + file_bin)
2020-05-17 10:36:58 -04:00
return file_bin
def status():
2020-07-10 03:57:25 -04:00
data = mw.execShell(
2020-05-17 10:36:58 -04:00
"ps -ef|grep \"simdht_worker.py\" | grep -v grep | awk '{print $2}'")
if data[0] == '':
return 'stop'
return 'start'
def start():
file = initDreplace()
2020-07-10 03:57:25 -04:00
data = mw.execShell(file + ' start')
2020-05-17 10:36:58 -04:00
if data[1] == '':
return 'ok'
return data[1]
def stop():
file = initDreplace()
2020-07-10 03:57:25 -04:00
data = mw.execShell(file + ' stop')
2020-05-17 10:36:58 -04:00
if data[1] == '':
return 'ok'
return data[1]
def restart():
file = initDreplace()
2020-07-10 03:57:25 -04:00
data = mw.execShell(file + ' restart')
2020-05-17 10:36:58 -04:00
if data[1] == '':
return 'ok'
return 'fail'
def reload():
file = initDreplace()
2020-07-10 03:57:25 -04:00
data = mw.execShell(file + ' reload')
2020-05-17 10:36:58 -04:00
if data[1] == '':
return 'ok'
return 'fail'
def initdStatus():
if not app_debug:
2020-07-10 03:57:25 -04:00
if mw.isAppleSystem():
2020-05-17 10:36:58 -04:00
return "Apple Computer does not support"
initd_bin = getInitDFile()
if os.path.exists(initd_bin):
return 'ok'
return 'fail'
def initdInstall():
import shutil
if not app_debug:
2020-07-10 03:57:25 -04:00
if mw.isAppleSystem():
2020-05-17 10:36:58 -04:00
return "Apple Computer does not support"
mysql_bin = initDreplace()
initd_bin = getInitDFile()
shutil.copyfile(mysql_bin, initd_bin)
2020-07-10 03:57:25 -04:00
mw.execShell('chmod +x ' + initd_bin)
mw.execShell('chkconfig --add ' + getPluginName())
2020-05-17 10:36:58 -04:00
return 'ok'
def initdUinstall():
if not app_debug:
2020-07-10 03:57:25 -04:00
if mw.isAppleSystem():
2020-05-17 10:36:58 -04:00
return "Apple Computer does not support"
initd_bin = getInitDFile()
os.remove(initd_bin)
2020-07-10 03:57:25 -04:00
mw.execShell('chkconfig --del ' + getPluginName())
2020-05-17 10:36:58 -04:00
return 'ok'
def matchData(reg, content):
tmp = re.search(reg, content).groups()
return tmp[0]
def getDbConfInfo():
cfg = getDbConf()
2020-07-10 03:57:25 -04:00
content = mw.readFile(cfg)
2020-05-17 10:36:58 -04:00
data = {}
data['DB_HOST'] = matchData("DB_HOST\s*=\s(.*)", content)
data['DB_USER'] = matchData("DB_USER\s*=\s(.*)", content)
data['DB_PORT'] = matchData("DB_PORT\s*=\s(.*)", content)
data['DB_PASS'] = matchData("DB_PASS\s*=\s(.*)", content)
data['DB_NAME'] = matchData("DB_NAME\s*=\s(.*)", content)
return data
def pMysqlDb():
data = getDbConfInfo()
2021-04-30 22:56:12 -04:00
conn = simdht_mysql.simdht_mysql()
2020-05-17 10:36:58 -04:00
conn.setHost(data['DB_HOST'])
conn.setUser(data['DB_USER'])
conn.setPwd(data['DB_PASS'])
conn.setPort(int(data['DB_PORT']))
conn.setDb(data['DB_NAME'])
return conn
def isSqlError(mysqlMsg):
# 检测数据库执行错误
mysqlMsg = str(mysqlMsg)
if "MySQLdb" in mysqlMsg:
2020-07-10 03:57:25 -04:00
return mw.returnJson(False, 'MySQLdb组件缺失! <br>进入SSH命令行输入 pip install mysql-python')
2020-05-17 10:36:58 -04:00
if "2002," in mysqlMsg:
2020-07-10 03:57:25 -04:00
return mw.returnJson(False, '数据库连接失败,请检查数据库服务是否启动!')
2020-05-17 10:36:58 -04:00
if "using password:" in mysqlMsg:
2020-07-10 03:57:25 -04:00
return mw.returnJson(False, '数据库管理密码错误!')
2020-05-17 10:36:58 -04:00
if "Connection refused" in mysqlMsg:
2020-07-10 03:57:25 -04:00
return mw.returnJson(False, '数据库连接失败,请检查数据库服务是否启动!')
2020-05-17 10:36:58 -04:00
if "1133" in mysqlMsg:
2020-07-10 03:57:25 -04:00
return mw.returnJson(False, '数据库用户不存在!')
2020-05-17 10:36:58 -04:00
if "1007" in mysqlMsg:
2020-07-10 03:57:25 -04:00
return mw.returnJson(False, '数据库已经存在!')
2020-05-17 10:36:58 -04:00
return None
def getMinData(conn, sec):
time_diff = 0
2020-07-10 03:57:25 -04:00
if mw.isAppleSystem():
2020-05-17 10:36:58 -04:00
time_diff = 3 * 60
pre = time.strftime("%Y-%m-%d %H:%M:%S",
time.localtime(time.time() - sec - time_diff))
sql = "select count(id) from search_hash where create_time > '" + pre + "'"
data = conn.query(sql)
return data[0][0]
def getTrendData():
try:
args = getArgs()
data = checkArgs(args, ['interval'])
if not data[0]:
return data[1]
pdb = pMysqlDb()
# interval = int(args['interval'])
result = pdb.execute("show tables")
isError = isSqlError(result)
if isError:
return isError
one = getMinData(pdb, 2)
two = getMinData(pdb, 5)
three = getMinData(pdb, 10)
2020-07-10 03:57:25 -04:00
return mw.getJson([one, two, three])
2020-05-17 10:36:58 -04:00
except Exception as e:
2021-04-30 22:56:12 -04:00
# print str(e)
2020-07-10 03:57:25 -04:00
return mw.getJson([0, 0, 0])
2020-05-17 10:36:58 -04:00
def dhtCmd():
file = initDreplace()
return file + ' restart'
if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
2021-05-09 12:19:49 -04:00
print(status())
2020-05-17 10:36:58 -04:00
elif func == 'start':
2021-05-09 12:19:49 -04:00
print(start())
2020-05-17 10:36:58 -04:00
elif func == 'stop':
2021-05-09 12:19:49 -04:00
print(stop())
2020-05-17 10:36:58 -04:00
elif func == 'restart':
2021-05-09 12:19:49 -04:00
print(restart())
2020-05-17 10:36:58 -04:00
elif func == 'reload':
2021-05-09 12:19:49 -04:00
print(reload())
2020-05-17 10:36:58 -04:00
elif func == 'initd_status':
2021-05-09 12:19:49 -04:00
print(initdStatus())
2020-05-17 10:36:58 -04:00
elif func == 'initd_install':
2021-05-09 12:19:49 -04:00
print(initdInstall())
2020-05-17 10:36:58 -04:00
elif func == 'initd_uninstall':
2021-05-09 12:19:49 -04:00
print(initdUinstall())
2020-05-17 10:36:58 -04:00
elif func == 'get_sql':
2021-05-09 12:19:49 -04:00
print(getSqlFile())
2020-05-17 10:36:58 -04:00
elif func == 'get_db_conf':
2021-05-09 12:19:49 -04:00
print(getDbConf())
2020-05-17 10:36:58 -04:00
elif func == 'get_checkdb_pos':
2021-05-09 12:19:49 -04:00
print(getCheckdbPos())
2020-05-17 10:36:58 -04:00
elif func == 'get_black_list':
2021-05-09 12:19:49 -04:00
print(getBlackList())
2020-05-17 10:36:58 -04:00
elif func == 'get_run_Log':
2021-05-09 12:19:49 -04:00
print(getRunLog())
2020-05-17 10:36:58 -04:00
elif func == 'get_trend_data':
2021-05-09 12:19:49 -04:00
print(getTrendData())
2020-05-17 10:36:58 -04:00
elif func == 'dht_cmd':
2021-05-09 12:19:49 -04:00
print(dhtCmd())
2020-05-17 10:36:58 -04:00
else:
2021-05-09 12:19:49 -04:00
print('error')