Skip to content
Snippets Groups Projects
Commit 710cb8b3 authored by Nils Schneider's avatar Nils Schneider
Browse files

status-page: lua rewrite, use gluon-neighbour-info

parent f9cc7318
No related branches found
No related tags found
No related merge requests found
...@@ -12,7 +12,7 @@ define Package/gluon-status-page ...@@ -12,7 +12,7 @@ define Package/gluon-status-page
SECTION:=gluon SECTION:=gluon
CATEGORY:=Gluon CATEGORY:=Gluon
TITLE:=Adds a status page showing information about the node. TITLE:=Adds a status page showing information about the node.
DEPENDS:=+gluon-core +uhttpd DEPENDS:=+gluon-core +gluon-neighbour-info +uhttpd
endef endef
define Package/gluon-status-page/description define Package/gluon-status-page/description
......
#!/bin/sh #!/usr/bin/lua
model="$(lua -e 'print(require("platform_info").get_model())')" local util = require("luci.util")
local fs = require("luci.fs")
escape_html() { local sys = require("luci.sys")
sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g' local json = require("luci.json")
} local platform_info = require("platform_info")
linknodes() { local hostname = sys.hostname()
PREFIX=$(uci get network.local_node_route6.target | cut -d: -f 1-4) local model = platform_info.get_model()
sed 's#\([0-9a-f]\{2\}\):\([0-9a-f]\{2\}\):\([0-9a-f]\{2\}\):\([0-9a-f]\{2\}\):\([0-9a-f]\{2\}\):\([0-9a-f]\{2\}\)#<a href="http://['$PREFIX':\1\2:\3ff:fe\4:\5\6]/">&</a>#g' local release = util.trim(fs.readfile("/lib/gluon/release") or "")
}
function neighbours(ifname)
echo Content-type: text/html local info = util.exec("gluon-neighbour-info -d ff02::2:1001 -p 1001 -r nodeinfo -t 3 -i " .. ifname)
echo "" local macs = {}
for _, line in ipairs(util.split(info)) do
cat <<EOF local data = json.decode(line)
<!DOCTYPE html> if data then
<html> if data["network"] and data["network"]["mesh_interfaces"] then
<head> for _, mac in ipairs(data["network"]["mesh_interfaces"]) do
<title>$(cat /proc/sys/kernel/hostname)</title> macs[mac] = data
</head> end
<body> end
EOF end
end
echo "<h1>$(cat /proc/sys/kernel/hostname)</h1>"
return macs
echo "<pre>" end
echo "Model: $model" | escape_html io.write("Content-type: text/html\n\n")
echo "Firmware release: $(cat /lib/gluon/release | escape_html)" io.write("<!DOCTYPE html>\n")
echo io.write("<html>")
io.write("<head>")
uptime | sed 's/^ \+//' | escape_html io.write("<script src=\"/status.js\"></script>")
echo io.write("<title>" .. hostname .. "</title>")
io.write("</head>")
ip address show dev br-client | escape_html io.write("<body>")
echo
io.write("<h1>" .. hostname .. "</h1>")
free -m | escape_html io.write("<pre>")
echo
io.write("Model: " .. model .. "\n")
df /rom /overlay | escape_html io.write("Firmware release: " .. release .. "\n\n")
echo "</pre>" io.write(util.trim(sys.exec("uptime | sed 's/^ \+//'")) .. "\n\n")
io.write(sys.exec("ip address show dev br-client") .. "\n")
echo "<h2>Neighbours</h2>" io.write(sys.exec("free -m") .. "\n")
io.write(sys.exec("df /rom /overlay"))
io.write("</pre>")
iw dev | grep IBSS -B 5 | grep Interface | cut -d' ' -f2 | while read if
do io.write("<h2>Neighbours</h2>")
echo "<h3>$if</h3>"
echo "<pre>" local interfaces = util.split(util.trim(util.exec("iw dev | grep IBSS -B 5 | grep Interface | cut -d' ' -f2")))
iw dev $if link | escape_html for _, ifname in ipairs(interfaces) do
io.write("<h3>" .. ifname .. "</h3>")
echo io.write("<pre>")
iw dev $if station dump | escape_html | linknodes io.write(sys.exec("iw dev " .. ifname .. " link") .. "\n")
echo "</pre>" for _, line in ipairs(util.split(util.exec("iw dev " .. ifname .. " station dump"))) do
done local mac = line:match("^Station (.*) %(on ")
if mac then
cat <<EOF io.write("Station <a id=\"" .. ifname .. "-" .. mac .. "\">" .. mac .. "</a> (on " .. ifname .. ")\n")
</body> else
</html> io.write(line .. "\n")
EOF end
end
io.write("</pre>")
end
io.write("</body>")
io.write("<script>")
for _, ifname in ipairs(interfaces) do
local macs = neighbours(ifname)
for mac, node in pairs(macs) do
local hostname = node["hostname"]
local ip
if node["network"] and node["network"]["addresses"] then
for _, myip in ipairs(node["network"]["addresses"]) do
if ip == nil and myip:sub(1, 5) ~= "fe80:" then
ip = myip
end
end
end
if ip and hostname then
io.write("update_node(\"" .. ifname .. "-" .. mac .. "\", \"" .. ip .. "\", \"" .. hostname .. "\");")
end
end
end
io.write("</script>")
io.write("</html>")
function update_node(id, ip, hostname) {
var el = document.getElementById(id);
if (!el)
return;
el.href = "http://[" + ip + "]/";
el.textContent += " (" + hostname + ")";
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment