immortalwrt/package/jsda/luci-app-scutclient/luasrc/controller/scutclient.lua
2019-07-02 18:06:49 +08:00

141 lines
3.6 KiB
Lua
Executable File

module("luci.controller.scutclient", package.seeall)
http = require "luci.http"
fs = require "nixio.fs"
sys = require "luci.sys"
log_file = "/tmp/scutclient.log"
log_file_backup = "/tmp/scutclient.log.backup.log"
function index()
if not fs.access("/etc/config/scutclient") then
return
end
local uci = require "luci.model.uci".cursor()
local mainorder = uci:get_first("scutclient", "luci", "mainorder", 10)
if not uci:get_first("scutclient", "luci", "configured", false) then
entry({"admin", "scutclient"},
alias("admin", "scutclient", "settings"),
"华南理工大学客户端",
mainorder
)
entry({"admin", "scutclient", "settings"},
cbi("scutclient/scutclient"),
"设置",
10
).leaf = true
entry({"admin", "scutclient", "status"},
call("action_status"),
"状态",
20
).leaf = true
else
entry({"admin", "scutclient"},
alias("admin", "scutclient", "status"),
"华南理工大学客户端",
mainorder
)
entry({"admin", "scutclient", "status"},
call("action_status"),
"状态",
10
).leaf = true
entry({"admin", "scutclient", "settings"},
cbi("scutclient/scutclient"),
"设置",
20
).leaf = true
end
entry({"admin", "scutclient", "logs"}, template("scutclient/logs"), "日志", 30).leaf = true
entry({"admin", "scutclient", "about"}, call("action_about"), "关于", 40).leaf = true
entry({"admin", "scutclient", "get_log"}, call("get_log"))
entry({"admin", "scutclient", "netstat"}, call("get_netstat"))
entry({"admin", "scutclient", "scutclient-log.tar"}, call("get_dbgtar"))
end
function get_log()
local send_log_lines = 75
if fs.access(log_file) then
client_log = sys.exec("tail -n "..send_log_lines.." " .. log_file)
else
client_log = "Unable to access the log file!"
end
http.prepare_content("text/plain; charset=gbk")
http.write(client_log)
http.close()
end
function action_about()
luci.template.render("scutclient/about")
end
function action_status()
luci.template.render("scutclient/status")
if luci.http.formvalue("logoff") == "1" then
luci.sys.call("/etc/init.d/scutclient stop > /dev/null")
end
if luci.http.formvalue("redial") == "1" then
luci.sys.call("/etc/init.d/scutclient stop > /dev/null")
luci.sys.call("/etc/init.d/scutclient start > /dev/null")
end
if luci.http.formvalue("move_tag") == "1" then
luci.sys.call("uci set scutclient.@luci[-1].mainorder=90")
luci.sys.call("uci commit")
luci.sys.call("rm -rf /tmp/luci-*cache")
end
end
function get_netstat()
local hcontent = sys.exec("wget -O- http://whatismyip.akamai.com 2>/dev/null | head -n1")
local nstat = {}
if hcontent == '' then
nstat.stat = 'no_internet'
elseif hcontent:find("(%d+)%.(%d+)%.(%d+)%.(%d+)") then
nstat.stat = 'internet'
else
nstat.stat = 'no_login'
end
http.prepare_content("application/json")
http.write_json(nstat)
http.close()
end
function get_dbgtar()
local tar_dir = "/tmp/scutclient-log"
local tar_files = {
"/etc/config/wireless",
"/etc/config/network",
"/etc/config/system",
"/etc/config/scutclient",
"/etc/openwrt_release",
"/etc/crontabs/root",
"/etc/config/dhcp",
"/tmp/dhcp.leases",
"/etc/rc.local",
}
fs.mkdirr(tar_dir)
table.foreach(tar_files, function(i, v)
luci.sys.call("cp " .. v .. " " .. tar_dir)
end)
if fs.access(log_file_backup) then
luci.sys.call("cat " .. log_file_backup .. " >> " .. tar_dir .. "/scutclient.log")
end
if fs.access(log_file) then
luci.sys.call("cat " .. log_file .. " >> " .. tar_dir .. "/scutclient.log")
end
http.prepare_content("application/octet-stream")
http.write(sys.exec("tar -C " .. tar_dir .. " -cf - ."))
luci.sys.call("rm -rf " .. tar_dir)
http.close()
end