applications: add luci-freifunk-diagnostics which is a clone of diagnostics in admin-full
This commit is contained in:
parent
c46d1c22e9
commit
d3184b9e79
5 changed files with 210 additions and 0 deletions
2
applications/luci-freifunk-diagnostics/Makefile
Normal file
2
applications/luci-freifunk-diagnostics/Makefile
Normal file
|
@ -0,0 +1,2 @@
|
|||
include ../../build/config.mk
|
||||
include ../../build/module.mk
|
4
applications/luci-freifunk-diagnostics/ipkg/postinst
Normal file
4
applications/luci-freifunk-diagnostics/ipkg/postinst
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
[ -n "${IPKG_INSTROOT}" ] || {
|
||||
( . /etc/uci-defaults/luci-freifunk-diagnostics ) && rm -f /etc/uci-defaults/luci-freifunk-diagnostics
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2011 Jo-Philipp Wich <xm@subsignal.org>
|
||||
Copyright 2013 Manuel Munz <freifunk@somakoma.de>
|
||||
|
||||
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
|
||||
|
||||
]]--
|
||||
|
||||
module("luci.controller.freifunk.diag", package.seeall)
|
||||
|
||||
function index()
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
local page
|
||||
page = node("freifunk", "status", "diagnostics")
|
||||
page.target = template("freifunk/diagnostics")
|
||||
page.title = _("Diagnostics")
|
||||
page.order = 60
|
||||
|
||||
page = entry({"freifunk", "status", "diag_ping"}, call("diag_ping"), nil)
|
||||
page.leaf = true
|
||||
|
||||
page = entry({"freifunk", "status", "diag_nslookup"}, call("diag_nslookup"), nil)
|
||||
page.leaf = true
|
||||
|
||||
page = entry({"freifunk", "status", "diag_traceroute"}, call("diag_traceroute"), nil)
|
||||
page.leaf = true
|
||||
|
||||
page = entry({"freifunk", "status", "diag_ping6"}, call("diag_ping6"), nil)
|
||||
page.leaf = true
|
||||
|
||||
page = entry({"freifunk", "status", "diag_traceroute6"}, call("diag_traceroute6"), nil)
|
||||
page.leaf = true
|
||||
end
|
||||
|
||||
function diag_command(cmd, addr)
|
||||
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(addr)
|
||||
diag_command("ping -c 5 -W 1 %q 2>&1", addr)
|
||||
end
|
||||
|
||||
function diag_traceroute(addr)
|
||||
diag_command("traceroute -q 1 -w 1 -n %q 2>&1", addr)
|
||||
end
|
||||
|
||||
function diag_nslookup(addr)
|
||||
diag_command("nslookup %q 2>&1", addr)
|
||||
end
|
||||
|
||||
function diag_ping6(addr)
|
||||
diag_command("ping6 -c 5 %q 2>&1", addr)
|
||||
end
|
||||
|
||||
function diag_traceroute6(addr)
|
||||
diag_command("traceroute6 -q 1 -w 2 -n %q 2>&1", addr)
|
||||
end
|
|
@ -0,0 +1,120 @@
|
|||
<%#
|
||||
LuCI - Lua Configuration Interface
|
||||
Copyright 2010 Jo-Philipp Wich <xm@subsignal.org>
|
||||
|
||||
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%>
|
||||
|
||||
<%
|
||||
local fs = require "nixio.fs"
|
||||
local has_ping6 = fs.access("/bin/ping6") or fs.access("/usr/bin/ping6")
|
||||
local has_traceroute6 = fs.access("/usr/bin/traceroute6")
|
||||
%>
|
||||
|
||||
<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
var stxhr = new XHR();
|
||||
|
||||
function update_status(field, proto)
|
||||
{
|
||||
var tool = field.name;
|
||||
var addr = field.value;
|
||||
var protocol = proto ? "6" : "";
|
||||
|
||||
var legend = document.getElementById('diag-rc-legend');
|
||||
var output = document.getElementById('diag-rc-output');
|
||||
|
||||
if (legend && output)
|
||||
{
|
||||
output.innerHTML =
|
||||
'<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' +
|
||||
'<%:Waiting for command to complete...%>'
|
||||
;
|
||||
|
||||
legend.parentNode.style.display = 'block';
|
||||
legend.style.display = 'inline';
|
||||
|
||||
stxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/diag_' + tool + protocol + '/' + addr, null,
|
||||
function(x)
|
||||
{
|
||||
if (x.responseText)
|
||||
{
|
||||
legend.style.display = 'none';
|
||||
output.innerHTML = String.format('<pre>%h</pre>', x.responseText);
|
||||
}
|
||||
else
|
||||
{
|
||||
legend.style.display = 'none';
|
||||
output.innerHTML = '<span class="error"><%:Bad address specified!%></span>';
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
//]]></script>
|
||||
|
||||
<form method="post" action="<%=pcdata(luci.http.getenv("REQUEST_URI"))%>">
|
||||
<div class="cbi-map">
|
||||
<h2><a id="content" name="content"><%:Diagnostics%></a></h2>
|
||||
|
||||
<fieldset class="cbi-section">
|
||||
<legend><%:Network Utilities%></legend>
|
||||
|
||||
<br />
|
||||
|
||||
<div style="width:30%; float:left">
|
||||
<input style="margin: 5px 0" type="text" value="openwrt.org" name="ping" /><br />
|
||||
<% if has_ping6 then %>
|
||||
<select name="ping_proto" style="width:auto">
|
||||
<option value="" selected="selected"><%:IPv4%></option>
|
||||
<option value="6"><%:IPv6%></option>
|
||||
</select>
|
||||
<input type="button" value="<%:Ping%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.ping, this.form.ping_proto.selectedIndex)" />
|
||||
<% else %>
|
||||
<input type="button" value="<%:Ping%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.ping)" />
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div style="width:33%; float:left">
|
||||
<input style="margin: 5px 0" type="text" value="openwrt.org" name="traceroute" /><br />
|
||||
<% if has_traceroute6 then %>
|
||||
<select name="traceroute_proto" style="width:auto">
|
||||
<option value="" selected="selected"><%:IPv4%></option>
|
||||
<option value="6"><%:IPv6%></option>
|
||||
</select>
|
||||
<input type="button" value="<%:Traceroute%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.traceroute, this.form.traceroute_proto.selectedIndex)" />
|
||||
<% else %>
|
||||
<input type="button" value="<%:Traceroute%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.traceroute)" />
|
||||
<% end %>
|
||||
<% if not has_traceroute6 then %>
|
||||
<p> </p>
|
||||
<p><%:Install iputils-traceroute6 for IPv6 traceroute%></p>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div style="width:33%; float:left;">
|
||||
<input style="margin: 5px 0" type="text" value="openwrt.org" name="nslookup" /><br />
|
||||
<input type="button" value="<%:Nslookup%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.nslookup)" />
|
||||
</div>
|
||||
|
||||
<br style="clear:both" /><br />
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<fieldset class="cbi-section" style="display:none">
|
||||
<legend id="diag-rc-legend"><%:Collecting data...%></legend>
|
||||
<span id="diag-rc-output"></span>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<%+footer%>
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/sh
|
||||
rm -f /tmp/luci-indexcache
|
Loading…
Reference in a new issue