diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2010-11-24 20:09:37 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2010-11-24 20:09:37 +0000 |
commit | 23da14d3031ff796adedfd8bf122b4dae48fcdbc (patch) | |
tree | 93fdfb46b4be1dca93b5f53c86053d43bad0ea83 /modules/admin-full/luasrc/controller/admin | |
parent | c897d47af216560479aa232bd103fe1f5efb01e2 (diff) |
modules/admin-full: add diagnostics page with ping / traceroute / nslookup
Diffstat (limited to 'modules/admin-full/luasrc/controller/admin')
-rw-r--r-- | modules/admin-full/luasrc/controller/admin/network.lua | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/modules/admin-full/luasrc/controller/admin/network.lua b/modules/admin-full/luasrc/controller/admin/network.lua index f28f6077c..f2f629b6d 100644 --- a/modules/admin-full/luasrc/controller/admin/network.lua +++ b/modules/admin-full/luasrc/controller/admin/network.lua @@ -111,6 +111,19 @@ function index() page.title = i18n("Static Routes") page.order = 50 + page = node("admin", "network", "diagnostics") + page.target = template("admin_network/diagnostics") + page.title = i18n("Diagnostics") + page.order = 60 + + page = entry({"admin", "network", "diag_ping"}, call("diag_ping"), nil) + page.leaf = true + + page = entry({"admin", "network", "diag_nslookup"}, call("diag_nslookup"), nil) + page.leaf = true + + page = entry({"admin", "network", "diag_traceroute"}, call("diag_traceroute"), nil) + page.leaf = true end function wifi_join() @@ -371,3 +384,40 @@ function lease_status() luci.http.prepare_content("application/json") luci.http.write_json(rv) end + +function diag_command(cmd) + local path = luci.dispatcher.context.requestpath + local addr = path[#path] + + if addr and addr:match("^[a-zA-Z0-9%-%.:_]+$") then + luci.http.prepare_content("text/plain") + + local util = io.popen(cmd % addr) + if util then + while true do + local ln = util:read("*l") + if not ln then break end + luci.http.write(ln) + luci.http.write("\n") + end + + util:close() + end + + return + end + + luci.http.status(500, "Bad address") +end + +function diag_ping() + diag_command("ping -c 5 -W 1 %q 2>&1") +end + +function diag_traceroute() + diag_command("traceroute -q 1 -w 1 -n %q 2>&1") +end + +function diag_nslookup() + diag_command("nslookup %q 2>&1") +end |