pull/632/head
Mr Chen 6 months ago
parent ffcceb16cf
commit 0b37a34528
  1. 49
      panel_task.py
  2. 20
      web/admin/files/files.py
  3. 10
      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,43 +77,46 @@ def downloadFile(url, filename):
if not mw.isAppleSystem(): if not mw.isAppleSystem():
os.system('chown www.www ' + filename) os.system('chown www.www ' + filename)
writeLogs('done') writeLogs(filename + ' download success!')
except Exception as e: except Exception as e:
writeLogs(str(e)) writeLogs(str(e))
return True return True
def downloadHook(count, blockSize, totalSize): def downloadHook(count, blockSize, totalSize):
# 下载文件进度回调 # 下载文件进度回调
global pre
used = count * blockSize used = count * blockSize
pre1 = int((100.0 * used / totalSize)) pre = int((100.0 * used / totalSize))
if pre == (100 - pre1): speed = {'total': totalSize, 'used': used, 'pre': pre}
return
speed = {'total': totalSize, 'used': used, 'pre': pre1}
writeLogs(json.dumps(speed)) writeLogs(json.dumps(speed))
def runPanelTask(): def runPanelTask():
# 站点过期检查 # 站点过期检查
siteEdateCheck() siteEdateCheck()
lock_file = mw.getTriggerTaskLockFile()
# mw.writeFile(lock_file,'True')
try: try:
bash_list = thisdb.getTaskList(status=-1) if os.path.exists(lock_file):
for task in bash_list: bash_list = thisdb.getTaskList(status=-1)
thisdb.setTaskStatus(task['id'], 0) for task in bash_list:
thisdb.setTaskStatus(task['id'], 0)
run_list = thisdb.getTaskList(status=0)
for run_task in run_list: run_list = thisdb.getTaskList(status=0)
start = int(time.time()) for run_task in run_list:
thisdb.setTaskData(run_task['id'], start=start) start = int(time.time())
thisdb.setTaskStatus(run_task['id'], -1) thisdb.setTaskData(run_task['id'], start=start)
if run_task['type'] == 'download': thisdb.setTaskStatus(run_task['id'], -1)
argv = run_task['cmd'].split('|mw|')
downloadFile(argv[0], argv[1]) if run_task['type'] == 'download':
elif run_task['type'] == 'execshell': argv = run_task['cmd'].split('|mw|')
execShell(run_task['cmd']) downloadFile(argv[0], argv[1])
end = int(time.time()) elif run_task['type'] == 'execshell':
thisdb.setTaskData(run_task['id'], end=end) execShell(run_task['cmd'])
thisdb.setTaskStatus(run_task['id'], 1)
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: except Exception as e:
pass pass

@ -9,6 +9,7 @@
# --------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------
import os import os
import time
from flask import Blueprint, render_template from flask import Blueprint, render_template
from flask import request from flask import request
@ -185,7 +186,7 @@ def delete_dir():
path = request.form.get('path', '') path = request.form.get('path', '')
return file.dirDelete(path) return file.dirDelete(path)
# 删除文件 # 下载文件
@blueprint.route('/download', endpoint='download', methods=['GET']) @blueprint.route('/download', endpoint='download', methods=['GET'])
@panel_login_required @panel_login_required
def download(): 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)) response = make_response(send_from_directory(os.path.dirname(filename), os.path.basename(filename), as_attachment=is_attachment))
return response 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']) @blueprint.route('/close_logs', endpoint='close_logs', methods=['POST'])
@panel_login_required @panel_login_required

@ -8,6 +8,8 @@
# Author: midoks <midoks@163.com> # Author: midoks <midoks@163.com>
# --------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------
import json
import time
from flask import Blueprint, render_template from flask import Blueprint, render_template
from flask import request from flask import request
@ -62,14 +64,12 @@ def get_task_speed():
data['cmd'] = row['cmd'] data['cmd'] = row['cmd']
if row['type'] == 'download': if row['type'] == 'download':
readLine = "" readLine = ''
for i in range(3): for i in range(3):
try: try:
readLine = mw.readFile(task_logfile) readLine = mw.readFile(task_logfile)
if len(readLine) > 10: data['msg'] = json.loads(readLine)
data['msg'] = json.loads(readLine) data['isDownload'] = True
data['isDownload'] = True
break
except Exception as e: except Exception as e:
if i == 2: if i == 2:
thisdb.setTaskStatus(row['id'],0) thisdb.setTaskStatus(row['id'],0)

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

@ -1493,7 +1493,7 @@ function getReloads() {
<div class='line-progress' style='width:" + h.msg.pre + "%'></div>\ <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='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='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>" </li>"
} }
} else { } else {

@ -22,6 +22,34 @@ def getTaskCount(
def getTaskUnexecutedCount() -> int: def getTaskUnexecutedCount() -> int:
return mw.M('tasks').where('status!=?',(1,)).count() 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( def addTask(
name: str | None = '常用任务', name: str | None = '常用任务',
cmd: str | None = None, cmd: str | None = None,
@ -77,7 +105,7 @@ def getTaskPage(
return rdata return rdata
def getTaskFirstByRun() -> None: 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: if data is None:
return None return None
return data return data

Loading…
Cancel
Save