pull/632/head
Mr Chen 6 months ago
parent ffcceb16cf
commit 0b37a34528
  1. 15
      panel_task.py
  2. 20
      web/admin/files/files.py
  3. 6
      web/admin/task/__init__.py
  4. 7
      web/core/mw.py
  5. 2
      web/static/app/public.js
  6. 30
      web/thisdb/tasks.py

@ -77,26 +77,26 @@ def downloadFile(url, filename):
if not mw.isAppleSystem():
os.system('chown www.www ' + filename)
writeLogs('done')
writeLogs(filename + ' download success!')
except Exception as e:
writeLogs(str(e))
return True
def downloadHook(count, blockSize, totalSize):
# 下载文件进度回调
global pre
used = count * blockSize
pre1 = int((100.0 * used / totalSize))
if pre == (100 - pre1):
return
speed = {'total': totalSize, 'used': used, 'pre': pre1}
pre = int((100.0 * used / totalSize))
speed = {'total': totalSize, 'used': used, 'pre': pre}
writeLogs(json.dumps(speed))
def runPanelTask():
# 站点过期检查
siteEdateCheck()
lock_file = mw.getTriggerTaskLockFile()
# mw.writeFile(lock_file,'True')
try:
if os.path.exists(lock_file):
bash_list = thisdb.getTaskList(status=-1)
for task in bash_list:
thisdb.setTaskStatus(task['id'], 0)
@ -106,14 +106,17 @@ def runPanelTask():
start = int(time.time())
thisdb.setTaskData(run_task['id'], start=start)
thisdb.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())
thisdb.setTaskData(run_task['id'], end=end)
thisdb.setTaskStatus(run_task['id'], 1)
os.remove(lock_file)
except Exception as e:
pass

@ -9,6 +9,7 @@
# ---------------------------------------------------------------------------------
import os
import time
from flask import Blueprint, render_template
from flask import request
@ -185,7 +186,7 @@ def delete_dir():
path = request.form.get('path', '')
return file.dirDelete(path)
# 删除文件
# 下载文件
@blueprint.route('/download', endpoint='download', methods=['GET'])
@panel_login_required
def download():
@ -199,6 +200,23 @@ def download():
response = make_response(send_from_directory(os.path.dirname(filename), os.path.basename(filename), as_attachment=is_attachment))
return response
# 远程下载
@blueprint.route('/download_file', endpoint='download_file', methods=['POST'])
@panel_login_required
def download_file():
url = request.form.get('url', '')
path = request.form.get('path', '')
filename = request.form.get('filename', '')
execstr = url + '|mw|' + path + '/' + filename
execstr = execstr.strip()
title = '下载文件[' + filename + ']'
thisdb.addTaskByDownload(name=title, cmd=execstr)
# self.setFileAccept(path + '/' + filename)
mw.triggerTask()
return mw.returnData(True, '已将下载任务添加到队列!')
# 日志清空
@blueprint.route('/close_logs', endpoint='close_logs', methods=['POST'])
@panel_login_required

@ -8,6 +8,8 @@
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
import json
import time
from flask import Blueprint, render_template
from flask import request
@ -62,14 +64,12 @@ def get_task_speed():
data['cmd'] = row['cmd']
if row['type'] == 'download':
readLine = ""
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:
thisdb.setTaskStatus(row['id'],0)

@ -1273,9 +1273,12 @@ def fileNameCheck(filename):
return False
return True
def getTriggerTaskLockFile():
return getPanelDir() + '/logs/panel_task.lock'
def triggerTask():
isTask = getPanelDir() + '/logs/panel_task.lock'
writeFile(isTask, 'True')
lock_file = getTriggerTaskLockFile()
writeFile(lock_file, 'True')
def restartTask():
initd = getPanelDir() + '/scripts/init.d/mw'

@ -1493,7 +1493,7 @@ function getReloads() {
<div class='line-progress' style='width:" + h.msg.pre + "%'></div>\
<span class='titlename'>" + h.task[g].name + "<a style='margin-left:130px;'>" + (toSize(h.msg.used) + "/" + toSize(h.msg.total)) + "</a></span>\
<span class='com-progress'>" + h.msg.pre + "%</span>\
<span class='state'>"+lan.bt.task_downloading+" <img src='/static/img/ing.gif'> | <a href=\"javascript:removeTask(" + h.task[g].id + ")\">"+lan.public.close+"</a></span>\
<span class='state'>下载中<img src='/static/img/ing.gif'> | <a href=\"javascript:removeTask(" + h.task[g].id + ")\">"+lan.public.close+"</a></span>\
</li>"
}
} else {

@ -22,6 +22,34 @@ def getTaskCount(
def getTaskUnexecutedCount() -> int:
return mw.M('tasks').where('status!=?',(1,)).count()
def addTaskByDownload(
name: str | None = '下载文件',
cmd: str | None = None,
type: str | None = 'download',
status: int | None = 0,
):
'''
添加后台任务
:name -> str 类型
:cmd -> str 日志内容 (必填)
:type -> str 用户ID
'''
if cmd is None:
return False
add_time = mw.formatDate()
insert_data = {
'name':name,
'type':type,
'cmd':cmd,
'start':0,
'end':0,
'status':status,
'add_time':add_time,
}
mw.M('tasks').insert(insert_data)
return True
def addTask(
name: str | None = '常用任务',
cmd: str | None = None,
@ -77,7 +105,7 @@ def getTaskPage(
return rdata
def getTaskFirstByRun() -> None:
data = mw.M('tasks').where('status=?', (-1,)).field(__FIELD).order('id asc').find()
data = mw.M('tasks').where('status=? or status=0', (-1,)).field(__FIELD).order('id asc').find()
if data is None:
return None
return data

Loading…
Cancel
Save