update
This commit is contained in:
parent
2337ea901b
commit
e7bf5ef8b9
|
|
@ -35,7 +35,7 @@ import core.mw as mw
|
|||
import core.db as db
|
||||
|
||||
|
||||
print(mw.getPanelDir())
|
||||
# print(mw.getPanelDir())
|
||||
|
||||
# print sys.path
|
||||
|
||||
|
|
@ -51,12 +51,9 @@ timeoutCount = 0
|
|||
isCheck = 0
|
||||
oldEdate = None
|
||||
|
||||
g_log_file = mw.getMWLogs() + '/panel_task.log'
|
||||
g_log_file = mw.getPanelTaskLog()
|
||||
isTask = mw.getMWLogs() + '/panelTask.pl'
|
||||
|
||||
if not os.path.exists(os.getcwd() + "/tmp"):
|
||||
os.system('mkdir -p ' + os.getcwd() + "/tmp")
|
||||
|
||||
if not os.path.exists(g_log_file):
|
||||
os.system("touch " + g_log_file)
|
||||
|
||||
|
|
@ -180,60 +177,44 @@ def writeLogs(data):
|
|||
pass
|
||||
|
||||
|
||||
def runTask():
|
||||
|
||||
def runPanelTask():
|
||||
try:
|
||||
bash_list = model.getTaskList(status=-1)
|
||||
for task in bash_list:
|
||||
model.setTaskStatus(task['id'], 0)
|
||||
|
||||
# mw.writeLog("后台任务", "运行")
|
||||
|
||||
print(model.getTaskCount())
|
||||
# global isTask
|
||||
# try:
|
||||
|
||||
# if os.path.exists(isTask):
|
||||
# sql = db.Sql()
|
||||
# sql.table('tasks').where(
|
||||
# "status=?", ('-1',)).setField('status', '0')
|
||||
# taskArr = sql.table('tasks').where("status=?", ('0',)).field(
|
||||
# 'id,type,execstr').order("id asc").select()
|
||||
# for value in taskArr:
|
||||
# start = int(time.time())
|
||||
# if not sql.table('tasks').where("id=?", (value['id'],)).count():
|
||||
# continue
|
||||
# sql.table('tasks').where("id=?", (value['id'],)).save('status,start', ('-1', start))
|
||||
# if value['type'] == 'download':
|
||||
# argv = value['execstr'].split('|mw|')
|
||||
# downloadFile(argv[0], argv[1])
|
||||
# elif value['type'] == 'execshell':
|
||||
# execShell(value['execstr'])
|
||||
# end = int(time.time())
|
||||
# sql.table('tasks').where("id=?", (value['id'],)).save(
|
||||
# 'status,end', ('1', end))
|
||||
|
||||
# if(sql.table('tasks').where("status=?", ('0')).count() < 1):
|
||||
# os.system('rm -f ' + isTask)
|
||||
|
||||
# sql.close()
|
||||
# except Exception as e:
|
||||
# print(str(e))
|
||||
run_list = model.getTaskList(status=0)
|
||||
for run_task in run_list:
|
||||
start = int(time.time())
|
||||
model.setTaskData(run_task['id'], start=start)
|
||||
model.setTaskStatus(run_task['id'], -1)
|
||||
if run_task['type'] == 'download':
|
||||
argv = run_task['cmd'].split('|mw|')
|
||||
downloadFile(argv[0], argv[1])
|
||||
elif run_task['type'] == 'execshell':
|
||||
execShell(run_task['cmd'])
|
||||
end = int(time.time())
|
||||
model.setTaskData(run_task['id'], end=end)
|
||||
model.setTaskStatus(run_task['id'], 1)
|
||||
except Exception as e:
|
||||
print(str(e))
|
||||
|
||||
# 站点过期检查
|
||||
# siteEdate()
|
||||
|
||||
|
||||
# 任务队列
|
||||
def startPanelTask():
|
||||
# 任务队列
|
||||
try:
|
||||
while True:
|
||||
runTask()
|
||||
runPanelTask()
|
||||
time.sleep(1)
|
||||
except Exception as e:
|
||||
print(str(e))
|
||||
time.sleep(10)
|
||||
startPanelTask()
|
||||
|
||||
|
||||
# 网站到期处理
|
||||
def siteEdate():
|
||||
# 网站到期处理
|
||||
global oldEdate
|
||||
try:
|
||||
if not oldEdate:
|
||||
|
|
@ -430,7 +411,7 @@ def check502():
|
|||
verlist = [
|
||||
'52', '53', '54', '55', '56', '70',
|
||||
'71', '72', '73', '74', '80', '81',
|
||||
'82', '83'
|
||||
'82', '83', '84'
|
||||
]
|
||||
for ver in verlist:
|
||||
sdir = mw.getServerDir()
|
||||
|
|
|
|||
|
|
@ -8,12 +8,16 @@
|
|||
# Author: midoks <midoks@163.com>
|
||||
# ---------------------------------------------------------------------------------
|
||||
|
||||
|
||||
from .initdb import *
|
||||
|
||||
from .logs import addLog
|
||||
|
||||
from .option import getOption,getOptionByJson,setOption
|
||||
from .option import setOption
|
||||
|
||||
from .sites import getSitesCount
|
||||
from .task import getTaskCount
|
||||
|
||||
|
||||
from .task import addTask
|
||||
from .task import getTaskCount,getTaskUnexecutedCount,getTaskList,getTaskFirstByRun
|
||||
from .task import setTaskStatus,setTaskData
|
||||
|
||||
|
|
|
|||
|
|
@ -156,8 +156,8 @@ class Tasks(db.Model):
|
|||
__tablename__ = 'tasks'
|
||||
id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID")
|
||||
name = db.Column(db.TEXT, unique=False, nullable=False, comment="任务名称")
|
||||
type = db.Column(db.TEXT, unique=False, nullable=False, comment="域名")
|
||||
execstr = db.Column(db.TEXT, unique=False, nullable=False, comment="执行命令")
|
||||
type = db.Column(db.TEXT, unique=False, nullable=False, comment="类型")
|
||||
cmd = db.Column(db.TEXT, unique=False, nullable=False, comment="执行命令")
|
||||
start = db.Column(db.Integer(), unique=False, nullable=True, comment="开始执行时间")
|
||||
end = db.Column(db.Integer(), unique=False, nullable=True, comment="结束执行时间")
|
||||
status = db.Column(db.Integer(), unique=False, nullable=True, default=1, comment="状态")
|
||||
|
|
|
|||
|
|
@ -10,10 +10,105 @@
|
|||
|
||||
from admin.model import db, Tasks
|
||||
|
||||
|
||||
import core.mw as mw
|
||||
|
||||
def getTaskCount(
|
||||
status: str | None = None
|
||||
) -> int:
|
||||
status: int | None = -1
|
||||
) -> int:
|
||||
return Tasks.query.filter(Tasks.status==status).count()
|
||||
|
||||
# 未执行任务总数
|
||||
def getTaskUnexecutedCount() -> int:
|
||||
return Tasks.query.filter(Tasks.status!=1).count()
|
||||
|
||||
|
||||
def addTask(
|
||||
name: str | None = '常用任务',
|
||||
cmd: str | None = None,
|
||||
type: str | None = 'execshell',
|
||||
status: int | None = 0,
|
||||
):
|
||||
'''
|
||||
添加后台任务
|
||||
:name -> str 类型
|
||||
:cmd -> str 日志内容 (必填)
|
||||
:type -> str 用户ID
|
||||
'''
|
||||
if cmd is None:
|
||||
return False
|
||||
|
||||
add_time = mw.formatDate()
|
||||
add_data = Tasks(
|
||||
name=name,
|
||||
cmd=cmd,
|
||||
type=type,
|
||||
start=0,
|
||||
end=0,
|
||||
status=status,
|
||||
add_time=add_time)
|
||||
db.session.add(add_data)
|
||||
db.session.commit()
|
||||
return True
|
||||
|
||||
def getTaskFirstByRun() -> None:
|
||||
item = Tasks.query.filter(Tasks.status==-1).order_by(Tasks.id.asc()).first()
|
||||
|
||||
if item is None:
|
||||
return None
|
||||
row = {}
|
||||
row['id'] = item.id
|
||||
row['name'] = item.name
|
||||
row['type'] = item.type
|
||||
row['cmd'] = item.cmd
|
||||
row['start'] = item.start
|
||||
row['end'] = item.end
|
||||
row['status'] = item.status
|
||||
row['add_time'] = item.add_time
|
||||
return row
|
||||
|
||||
def getTaskList(
|
||||
status: int | None = 1,
|
||||
page: int | None = 1,
|
||||
size: int | None = 10,
|
||||
):
|
||||
pagination = Tasks.query.filter(Tasks.status==status).order_by(Tasks.id.asc()).paginate(page=int(page), per_page=int(size))
|
||||
|
||||
rows = []
|
||||
for item in pagination.items:
|
||||
t = {}
|
||||
t['id'] = item.id
|
||||
t['name'] = item.name
|
||||
t['type'] = item.type
|
||||
t['cmd'] = item.cmd
|
||||
t['start'] = item.start
|
||||
t['end'] = item.end
|
||||
t['status'] = item.status
|
||||
t['add_time'] = item.add_time
|
||||
rows.append(t)
|
||||
return rows
|
||||
|
||||
|
||||
|
||||
|
||||
def setTaskStatus(id,
|
||||
status: int | None = 0
|
||||
):
|
||||
Tasks.query.filter(Tasks.id==id).update({'status':status})
|
||||
db.session.commit()
|
||||
return True
|
||||
|
||||
def setTaskData(id,
|
||||
start: int | None = None,
|
||||
end: int | None = None,
|
||||
):
|
||||
update_data = {}
|
||||
|
||||
if start is not None:
|
||||
update_data['start'] = start
|
||||
if end is not None:
|
||||
update_data['end'] = end
|
||||
|
||||
Tasks.query.filter(Tasks.id==id).update(update_data)
|
||||
db.session.commit()
|
||||
return True
|
||||
|
||||
return Tasks.query.filter_by().count()
|
||||
|
|
@ -8,4 +8,6 @@
|
|||
# Author: midoks <midoks@163.com>
|
||||
# ---------------------------------------------------------------------------------
|
||||
|
||||
from .user import *
|
||||
from .user import init_admin_user
|
||||
from .option import init_option
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
# coding:utf-8
|
||||
|
||||
# ---------------------------------------------------------------------------------
|
||||
# MW-Linux面板
|
||||
# ---------------------------------------------------------------------------------
|
||||
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
|
||||
# ---------------------------------------------------------------------------------
|
||||
# Author: midoks <midoks@163.com>
|
||||
# ---------------------------------------------------------------------------------
|
||||
|
||||
from flask import request
|
||||
|
||||
from admin import model
|
||||
from admin.model import db, Users
|
||||
|
||||
import core.mw as mw
|
||||
|
||||
def init_option():
|
||||
model.setOption('title', '后羿面板')
|
||||
model.setOption('recycle_bin', 'open')
|
||||
model.setOption('template', 'default')
|
||||
|
||||
# 开启后台任务
|
||||
# model.setOption('run_bg_task', 'close')
|
||||
|
||||
# 首页展示初始化
|
||||
model.setOption('display_index', '[]')
|
||||
|
||||
# 监控默认配置
|
||||
model.setOption('monitor_status', 'open', type='monitor')
|
||||
model.setOption('monitor_day', '30', type='monitor')
|
||||
model.setOption('monitor_only_netio', 'open', type='monitor')
|
||||
|
||||
# 初始化安全路径
|
||||
model.setOption('admin_path', mw.getRandomString(8))
|
||||
model.setOption('server_ip', '127.0.0.1')
|
||||
|
||||
return True
|
||||
|
|
@ -39,21 +39,3 @@ def init_admin_user():
|
|||
db.session.close()
|
||||
return True
|
||||
|
||||
def init_option():
|
||||
model.setOption('title', '后羿面板')
|
||||
model.setOption('recycle_bin', 'open')
|
||||
model.setOption('template', 'default')
|
||||
|
||||
# 首页展示初始化
|
||||
model.setOption('display_index', '[]')
|
||||
|
||||
# 监控默认配置
|
||||
model.setOption('monitor_status', 'open', type='monitor')
|
||||
model.setOption('monitor_day', '30', type='monitor')
|
||||
model.setOption('monitor_only_netio', 'open', type='monitor')
|
||||
|
||||
# 初始化安全路径
|
||||
model.setOption('admin_path', mw.getRandomString(8))
|
||||
model.setOption('server_ip', '127.0.0.1')
|
||||
|
||||
return True
|
||||
|
|
@ -10,10 +10,96 @@
|
|||
|
||||
|
||||
from flask import Blueprint, render_template
|
||||
from flask import request
|
||||
|
||||
from admin import model
|
||||
from admin.model import db,Tasks
|
||||
|
||||
import core.mw as mw
|
||||
|
||||
blueprint = Blueprint('task', __name__, url_prefix='/task', template_folder='../../templates/default')
|
||||
|
||||
|
||||
@blueprint.route('/count', endpoint='task_count')
|
||||
def task_count():
|
||||
return "0"
|
||||
return str(model.getTaskUnexecutedCount())
|
||||
|
||||
|
||||
@blueprint.route('/list', endpoint='list', methods=['POST'])
|
||||
def list():
|
||||
p = request.form.get('p', '1')
|
||||
limit = request.form.get('limit', '10').strip()
|
||||
search = request.form.get('search', '').strip()
|
||||
|
||||
count = Tasks.query.filter_by().count()
|
||||
pagination = Tasks.query.filter_by().order_by(Tasks.id.desc()).paginate(page=int(p), per_page=int(limit))
|
||||
|
||||
rows = []
|
||||
for item in pagination.items:
|
||||
t = {}
|
||||
t['id'] = item.id
|
||||
t['name'] = item.name
|
||||
t['type'] = item.type
|
||||
t['cmd'] = item.cmd
|
||||
t['start'] = item.start
|
||||
t['end'] = item.end
|
||||
t['status'] = item.status
|
||||
t['add_time'] = item.add_time
|
||||
rows.append(t)
|
||||
|
||||
data = {}
|
||||
data['data'] = rows
|
||||
data['page'] = mw.getPage({'count':count,'tojs':'remind','p':p})
|
||||
return data
|
||||
|
||||
@blueprint.route('/get_exec_log', endpoint='get_exec_log', methods=['POST'])
|
||||
def get_exec_log():
|
||||
file = mw.getPanelTaskLog()
|
||||
return mw.getLastLine(file, 100)
|
||||
|
||||
|
||||
@blueprint.route('/get_task_speed', endpoint='get_task_speed', methods=['POST'])
|
||||
def get_task_speed():
|
||||
count = model.getTaskUnexecutedCount()
|
||||
if count == 0:
|
||||
return mw.returnData(False, '当前没有任务队列在执行-2!')
|
||||
|
||||
row = model.getTaskFirstByRun()
|
||||
if row is None:
|
||||
return mw.returnData(False, '当前没有任务队列在执行-3!')
|
||||
|
||||
task_logfile = mw.getPanelTaskLog()
|
||||
|
||||
data = {}
|
||||
data['name'] = row['name']
|
||||
data['cmd'] = row['cmd']
|
||||
|
||||
if row['type'] == 'download':
|
||||
readLine = ""
|
||||
for i in range(3):
|
||||
try:
|
||||
readLine = mw.readFile(task_logfile)
|
||||
if len(readLine) > 10:
|
||||
data['msg'] = json.loads(readLine)
|
||||
data['isDownload'] = True
|
||||
break
|
||||
except Exception as e:
|
||||
if i == 2:
|
||||
mw.M('tasks').where("id=?", (row['id'],)).save(
|
||||
'status', ('0',))
|
||||
return mw.returnJson(False, '当前没有任务队列在执行-4:' + str(e))
|
||||
time.sleep(0.5)
|
||||
else:
|
||||
data['msg'] = mw.getLastLine(task_logfile, 10)
|
||||
data['isDownload'] = False
|
||||
|
||||
|
||||
data['task'] = model.getTaskList(status=-1)
|
||||
return data
|
||||
|
||||
# file = mw.getPanelTaskLog()
|
||||
# return mw.getLastLine(file, 100)
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -87,6 +87,9 @@ def getMWLogs():
|
|||
def getPanelTmp():
|
||||
return getPanelDir() + '/tmp'
|
||||
|
||||
def getPanelTaskLog():
|
||||
return getMWLogs() + '/panel_task.log'
|
||||
|
||||
|
||||
def getServerDir():
|
||||
return getFatherDir() + '/server'
|
||||
|
|
|
|||
|
|
@ -1400,7 +1400,7 @@ function remind(a){
|
|||
<span class="rs-time">'+cos_text+'</span>\
|
||||
</div>\
|
||||
</td>\
|
||||
<td class="text-right c3">'+g.data[d].addtime+'</td>\
|
||||
<td class="text-right c3">'+g.data[d].add_time+'</td>\
|
||||
</tr>';
|
||||
}
|
||||
var con = '<div class="divtable"><table class="table table-hover">\
|
||||
|
|
@ -1458,7 +1458,7 @@ function getReloads() {
|
|||
a++;
|
||||
$.post('/task/get_task_speed', '', function(h) {
|
||||
if(h.task == undefined) {
|
||||
$(".cmdlist").html(lan.bt.task_not_list);
|
||||
$(".cmdlist").html('当前没有任务!');
|
||||
return;
|
||||
}
|
||||
var b = "";
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ import json
|
|||
import threading
|
||||
import multiprocessing
|
||||
|
||||
from admin import model
|
||||
|
||||
import core.mw as mw
|
||||
import admin.model.option as option
|
||||
|
||||
|
|
@ -191,11 +193,11 @@ class MwPlugin(object):
|
|||
version
|
||||
)
|
||||
|
||||
title = '{0}[{1}-{2}]'.format(msg_head,name,version)
|
||||
model.addTask(name=title,cmd=exec_bash, status=0)
|
||||
|
||||
if mw.isDebugMode():
|
||||
print(exec_bash)
|
||||
|
||||
title = '{0}[{1}-{2}]'.format(msg_head,name,version)
|
||||
|
||||
return mw.returnData(True, '已将安装任务添加到队列!')
|
||||
|
||||
# 卸载插件
|
||||
|
|
|
|||
Loading…
Reference in New Issue