From 23da14d3031ff796adedfd8bf122b4dae48fcdbc Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Wed, 24 Nov 2010 20:09:37 +0000 Subject: [PATCH 1/1] modules/admin-full: add diagnostics page with ping / traceroute / nslookup --- .../admin-full/luasrc/controller/admin/network.lua | 50 ++++++++++++ .../luasrc/view/admin_network/diagnostics.htm | 93 ++++++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 modules/admin-full/luasrc/view/admin_network/diagnostics.htm 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 diff --git a/modules/admin-full/luasrc/view/admin_network/diagnostics.htm b/modules/admin-full/luasrc/view/admin_network/diagnostics.htm new file mode 100644 index 000000000..304e71741 --- /dev/null +++ b/modules/admin-full/luasrc/view/admin_network/diagnostics.htm @@ -0,0 +1,93 @@ +<%# +LuCI - Lua Configuration Interface +Copyright 2010 Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +-%> + +<%+header%> + + + + +
"> +
+

<%:Diagnostics%>

+ +
+ <%:Network Utilities%> + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +

+ +
+
+ + +
+ +<%+footer%> -- 2.11.0