pull/628/head
Mr Chen 6 months ago
parent 2337ea901b
commit e7bf5ef8b9
  1. 73
      panel_task.py
  2. 10
      web/admin/model/__init__.py
  3. 4
      web/admin/model/initdb.py
  4. 101
      web/admin/model/task.py
  5. 4
      web/admin/setup/__init__.py
  6. 38
      web/admin/setup/option.py
  7. 18
      web/admin/setup/user.py
  8. 88
      web/admin/task/__init__.py
  9. 3
      web/core/mw.py
  10. 4
      web/static/app/public.js
  11. 8
      web/utils/mwplugin.py

@ -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():
# 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))
def runPanelTask():
try:
bash_list = model.getTaskList(status=-1)
for task in bash_list:
model.setTaskStatus(task['id'], 0)
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 .sites import getSitesCount
from .task import getTaskCount
from .option import setOption
from .sites import getSitesCount
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
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
)
if mw.isDebugMode():
print(exec_bash)
title = '{0}[{1}-{2}]'.format(msg_head,name,version)
model.addTask(name=title,cmd=exec_bash, status=0)
if mw.isDebugMode():
print(exec_bash)
return mw.returnData(True, '已将安装任务添加到队列!')
# 卸载插件

Loading…
Cancel
Save