You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.2 KiB
Lua
93 lines
2.2 KiB
Lua
1 year ago
|
|
||
|
module("luci.controller.tasks-lib", package.seeall)
|
||
|
|
||
|
|
||
|
function index()
|
||
|
entry({"admin", "system", "tasks", "status"}, call("tasks_status")).dependent=false
|
||
|
entry({"admin", "system", "tasks", "log"}, call("tasks_log")).dependent=false
|
||
|
entry({"admin", "system", "tasks", "stop"}, post("tasks_stop")).dependent=false
|
||
|
end
|
||
|
|
||
|
local util = require "luci.util"
|
||
|
local jsonc = require "luci.jsonc"
|
||
|
local ltn12 = require "luci.ltn12"
|
||
|
|
||
|
local taskd = require "luci.model.tasks"
|
||
|
|
||
|
function tasks_status()
|
||
|
local data = taskd.status(luci.http.formvalue("task_id"))
|
||
|
luci.http.prepare_content("application/json")
|
||
|
luci.http.write_json(data)
|
||
|
end
|
||
|
|
||
|
function tasks_log()
|
||
|
local wait = 107
|
||
|
local task_id = luci.http.formvalue("task_id")
|
||
|
local offset = luci.http.formvalue("offset")
|
||
|
offset = offset and tonumber(offset) or 0
|
||
|
local logpath = "/var/log/tasks/"..task_id..".log"
|
||
|
local i
|
||
|
local logfd = io.open(logpath, "rb")
|
||
|
if logfd == nil then
|
||
|
luci.http.status(404)
|
||
|
luci.http.write("log not found")
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local size = logfd:seek("end")
|
||
|
|
||
|
if size < offset then
|
||
|
luci.http.status(205, "Reset Content")
|
||
|
luci.http.write("reset offset")
|
||
|
return
|
||
|
end
|
||
|
|
||
|
i = 0
|
||
|
while (i < wait)
|
||
|
do
|
||
|
if size > offset then
|
||
|
break
|
||
|
end
|
||
|
nixio.nanosleep(0, 10000000) -- sleep 10ms
|
||
|
size = logfd:seek("end")
|
||
|
i = i+1
|
||
|
end
|
||
|
if i == wait then
|
||
|
logfd:close()
|
||
|
luci.http.status(204)
|
||
|
luci.http.prepare_content("application/octet-stream")
|
||
|
return
|
||
|
end
|
||
|
logfd:seek("set", offset)
|
||
|
|
||
|
local write_log = function()
|
||
|
local buffer = logfd:read(4096)
|
||
|
if buffer and #buffer > 0 then
|
||
|
return buffer
|
||
|
else
|
||
|
logfd:close()
|
||
|
return nil
|
||
|
end
|
||
|
end
|
||
|
|
||
|
luci.http.prepare_content("application/octet-stream")
|
||
|
|
||
|
if logfd then
|
||
|
ltn12.pump.all(write_log, luci.http.write)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function tasks_stop()
|
||
|
local sys = require("luci.sys")
|
||
|
local task_id = luci.http.formvalue("task_id") or ""
|
||
|
if task_id == "" then
|
||
|
luci.http.status(400)
|
||
|
luci.http.write("task_id is empty")
|
||
|
return
|
||
|
end
|
||
|
if sys.call("/etc/init.d/tasks task_del "..task_id.." >/dev/null 2>&1") ~= 0 then
|
||
|
nixio.nanosleep(2, 10000000)
|
||
|
end
|
||
|
luci.http.status(204)
|
||
|
end
|