This commit is contained in:
Mr Chen
2024-10-29 18:47:46 +08:00
parent 2337ea901b
commit e7bf5ef8b9
11 changed files with 272 additions and 79 deletions
+7 -3
View File
@@ -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
+2 -2
View File
@@ -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="状态")
+99 -4
View File
@@ -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()
+3 -1
View File
@@ -8,4 +8,6 @@
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
from .user import *
from .user import init_admin_user
from .option import init_option
+38
View File
@@ -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
-18
View File
@@ -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
+87 -1
View File
@@ -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)