From 5112af896f1bc06b4f83d16d4e625440aecd9ba0 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sun, 13 Mar 2011 13:57:21 +0000 Subject: modules/admin-full: add dhcp and wifi status info --- .../admin-full/luasrc/view/admin_status/index.htm | 265 ++++++++++++++++++++- 1 file changed, 259 insertions(+), 6 deletions(-) diff --git a/modules/admin-full/luasrc/view/admin_status/index.htm b/modules/admin-full/luasrc/view/admin_status/index.htm index 0cbf101d18..230a702723 100644 --- a/modules/admin-full/luasrc/view/admin_status/index.htm +++ b/modules/admin-full/luasrc/view/admin_status/index.htm @@ -14,6 +14,14 @@ $Id$ -%> <% + require "luci.fs" + require "luci.tools.status" + + local has_ipv6 = luci.fs.access("/proc/net/ipv6_route") + local has_dhcp = luci.fs.access("/etc/config/dhcp") + local has_wifi = luci.fs.stat("/etc/config/wireless") + has_wifi = has_wifi and has_wifi.size > 0 + if luci.http.formvalue("status") == "1" then local ntm = require "luci.model.network".init() local dr4 = luci.sys.net.defaultroute() @@ -51,7 +59,9 @@ $Id$ membuffers = membuffers, memfree = memfree, connmax = conn_max, - conncount = conn_count + conncount = conn_count, + leases = luci.tools.status.dhcp_leases(), + wifinets = luci.tools.status.wifi_networks() } if wan then @@ -102,7 +112,7 @@ $Id$ '
' + '
' + '
' + - '%d / %d (%d%%)' + + '%s / %s (%d%%)' + '
' + '
' + '
', pc, v, m, pc @@ -170,6 +180,7 @@ $Id$ ss.innerHTML = 'Not connected'; } + <% if has_ipv6 then %> var si6 = document.getElementById('wan6_i'); var ss6 = document.getElementById('wan6_s'); var ifc6 = info.wan6; @@ -210,6 +221,203 @@ $Id$ si6.innerHTML = '
?'; ss6.innerHTML = 'Not connected'; } + <% end %> + + <% if has_dhcp then %> + var ls = document.getElementById('lease_status_table'); + if (ls) + { + /* clear all rows */ + while( ls.rows.length > 1 ) + ls.rows[0].parentNode.deleteRow(1); + + for( var i = 0; i < info.leases.length; i++ ) + { + var timestr; + + if (info.leases[i].expires <= 0) + timestr = '<%:expired%>'; + else + timestr = String.format('%t', info.leases[i].expires); + + var tr = ls.rows[0].parentNode.insertRow(-1); + tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); + + tr.insertCell(-1).innerHTML = info.leases[i].hostname ? info.leases[i].hostname : '?'; + tr.insertCell(-1).innerHTML = info.leases[i].ipaddr; + tr.insertCell(-1).innerHTML = info.leases[i].macaddr; + tr.insertCell(-1).innerHTML = timestr; + } + + if( ls.rows.length == 1 ) + { + var tr = ls.rows[0].parentNode.insertRow(-1); + tr.className = 'cbi-section-table-row'; + + var td = tr.insertCell(-1); + td.colSpan = 4; + td.innerHTML = '
<%:There are no active leases.%>
'; + } + } + <% end %> + + <% if has_wifi then %> + var assoclist = [ ]; + + var ws = document.getElementById('wifi_status_table'); + if (ws) + { + var wsbody = ws.rows[0].parentNode; + while (ws.rows.length > 0) + wsbody.deleteRow(0); + + for (var didx = 0; didx < info.wifinets.length; didx++) + { + var dev = info.wifinets[didx]; + + var tr = wsbody.insertRow(-1); + var td; + + td = tr.insertCell(-1); + td.width = "33%"; + td.innerHTML = dev.name; + td.style.verticalAlign = "top"; + + td = tr.insertCell(-1); + + var s = ''; + + for (var nidx = 0; nidx < dev.networks.length; nidx++) + { + var net = dev.networks[nidx]; + var is_assoc = (net.bssid != '00:00:00:00:00:00' && net.channel); + + var icon; + if (!is_assoc) + icon = "<%=resource%>/icons/signal-none.png"; + else if (net.quality == 0) + icon = "<%=resource%>/icons/signal-0.png"; + else if (net.quality < 25) + icon = "<%=resource%>/icons/signal-0-25.png"; + else if (net.quality < 50) + icon = "<%=resource%>/icons/signal-25-50.png"; + else if (net.quality < 75) + icon = "<%=resource%>/icons/signal-50-75.png"; + else + icon = "<%=resource%>/icons/signal-75-100.png"; + + s += String.format( + '
' + + '' + + '
%d%%' + + '
' + + '<%:SSID%>: %h
' + + '<%:Mode%>: %s
' + + '<%:Channel%>: %d (%.2f GHz)
' + + '<%:Bitrate%>: %s Mb/s
', + icon, net.signal, net.noise, + net.quality, + net.ssid, + net.mode, + net.channel, net.frequency, + net.bitrate || '?' + ); + + if (is_assoc) + { + s += String.format( + '<%:BSSID%>: %s
' + + '<%:Encryption%>: %s', + net.bssid, + net.encryption + ); + } + else + { + s += '<%:Wireless is disabled or not associated%>'; + } + + s += '
'; + + for (var bssid in net.assoclist) + { + assoclist.push({ + bssid: bssid, + signal: net.assoclist[bssid].signal, + noise: net.assoclist[bssid].noise, + link: net.link, + name: net.name + }); + } + } + + if (!s) + s = '<%:No information available%>'; + + td.innerHTML = s; + } + } + + var ac = document.getElementById('wifi_assoc_table'); + if (ac) + { + /* clear all rows */ + while( ac.rows.length > 1 ) + ac.rows[0].parentNode.deleteRow(1); + + assoclist.sort(function(a, b) { + return (a.name == b.name) + ? (a.bssid < b.bssid) + : (a.name > b.name ) + ; + }); + + for( var i = 0; i < assoclist.length; i++ ) + { + var tr = ac.rows[0].parentNode.insertRow(-1); + tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2)); + + var icon; + var q = (-1 * (assoclist[i].noise - assoclist[i].signal)) / 5; + if (q < 1) + icon = "<%=resource%>/icons/signal-0.png"; + else if (q < 2) + icon = "<%=resource%>/icons/signal-0-25.png"; + else if (q < 3) + icon = "<%=resource%>/icons/signal-25-50.png"; + else if (q < 4) + icon = "<%=resource%>/icons/signal-50-75.png"; + else + icon = "<%=resource%>/icons/signal-75-100.png"; + + tr.insertCell(-1).innerHTML = String.format( + '', + icon, assoclist[i].signal, assoclist[i].noise + ); + + tr.insertCell(-1).innerHTML = assoclist[i].bssid; + + tr.insertCell(-1).innerHTML = String.format( + '%h', + assoclist[i].link, + assoclist[i].name + ); + + tr.insertCell(-1).innerHTML = String.format('%d dBm', assoclist[i].signal); + tr.insertCell(-1).innerHTML = String.format('%d dBm', assoclist[i].noise); + } + + if (ac.rows.length == 0) + { + var tr = ac.rows[0].parentNode.insertRow(-1); + tr.className = 'cbi-section-table-row'; + + var td = tr.insertCell(-1); + td.colSpan = 5; + td.innerHTML = '
<%:No information available%>'; + } + } + <% end %> var e; @@ -245,9 +453,7 @@ $Id$ ); if (e = document.getElementById('conns')) - e.innerHTML = progressbar( - info.conncount + " kB", info.connmax + " kB" - ); + e.innerHTML = progressbar(info.conncount, info.connmax); window.setTimeout(update_status, 5000); } @@ -269,7 +475,7 @@ $Id$ <%=pcdata(luci.version.distname)%> <%=pcdata(luci.version.distversion)%> / <%=pcdata(luci.version.luciname)%> <%=pcdata(luci.version.luciversion)%> - <%:Kernel%><%=luci.sys.exec("uname -r")%> + <%:Kernel Version%><%=luci.sys.exec("uname -r")%> <%:Local Time%>- <%:Uptime%>- <%:Load Average%>- @@ -297,14 +503,61 @@ $Id$ <%:Collecting data...%> + <% if has_ipv6 then %> <%:IPv6 WAN Status%>

?
<%:Collecting data...%>
+ <% end %> <%:Active IP Connections%>- +<% if has_dhcp then %> +
+ <%:DHCP Leases%> + + + + + + + + + + + +
<%:Hostname%><%:IPv4-Address%><%:MAC-Address%><%:Leasetime remaining%>

<%:Collecting data...%>
+
+<% end %> + +<% if has_wifi then %> +
+ <%:Wireless%> + + + +
<%:Collecting data...%>
+
+ +
+ <%:Associated Stations%> + + + + + + + + + + + + +
 <%:BSSID%><%:Network%><%:Signal%><%:Noise%>

<%:Collecting data...%>
+
+<% end %> + <%+footer%> -- cgit v1.2.3