141 lines
3.6 KiB
Lua
Executable File
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
|