Merge pull request #2289 from freifunk-gluon/status-page-improvements
Status page improvements
This commit is contained in:
commit
90fe74bf4d
@ -29,17 +29,31 @@
|
|||||||
|
|
||||||
local mesh = get_mesh()
|
local mesh = get_mesh()
|
||||||
|
|
||||||
local function get_interfaces()
|
local function get_interfaces(uconn)
|
||||||
local uconn = ubus.connect()
|
|
||||||
if not uconn then
|
|
||||||
error('failed to connect to ubus')
|
|
||||||
end
|
|
||||||
local interfaces = util.get_mesh_devices(uconn)
|
local interfaces = util.get_mesh_devices(uconn)
|
||||||
ubus.close(uconn)
|
|
||||||
table.sort(interfaces)
|
table.sort(interfaces)
|
||||||
return interfaces
|
return interfaces
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function get_radios(uconn)
|
||||||
|
local radios = uconn:call("network.wireless", "status", {})
|
||||||
|
local ret = {}
|
||||||
|
|
||||||
|
for radio, info in pairs(radios) do
|
||||||
|
if info.up then
|
||||||
|
table.insert(ret, {
|
||||||
|
name = radio,
|
||||||
|
channel = info.config.channel,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
table.sort(ret, function(a, b)
|
||||||
|
return a.name < b.name
|
||||||
|
end)
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
local function is_wireless(iface)
|
local function is_wireless(iface)
|
||||||
while true do
|
while true do
|
||||||
local pattern = '/sys/class/net/' .. iface .. '/lower_*'
|
local pattern = '/sys/class/net/' .. iface .. '/lower_*'
|
||||||
@ -52,7 +66,15 @@
|
|||||||
return unistd.access('/sys/class/net/' .. iface .. '/wireless') ~= nil
|
return unistd.access('/sys/class/net/' .. iface .. '/wireless') ~= nil
|
||||||
end
|
end
|
||||||
|
|
||||||
local interfaces = get_interfaces()
|
local uconn = ubus.connect()
|
||||||
|
if not uconn then
|
||||||
|
error('failed to connect to ubus')
|
||||||
|
end
|
||||||
|
|
||||||
|
local interfaces = get_interfaces(uconn)
|
||||||
|
local radios = get_radios(uconn)
|
||||||
|
|
||||||
|
ubus.close(uconn)
|
||||||
|
|
||||||
local function sorted(t)
|
local function sorted(t)
|
||||||
t = {unpack(t)}
|
t = {unpack(t)}
|
||||||
@ -66,12 +88,17 @@
|
|||||||
|
|
||||||
local function formatBits(bits)
|
local function formatBits(bits)
|
||||||
local units = {[0]='', 'k', 'M', 'G'}
|
local units = {[0]='', 'k', 'M', 'G'}
|
||||||
|
local unit = 0
|
||||||
|
|
||||||
local pow = math.floor(math.log(math.max(math.abs(bits), 1)) / math.log(1000))
|
for i = 1, #units do
|
||||||
local known_pow = math.min(pow, #units)
|
if math.abs(bits) < 1000 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
unit = i
|
||||||
|
bits = bits / 1000
|
||||||
|
end
|
||||||
|
|
||||||
local significand = bits/(1000^known_pow)
|
return string.format('%g %sbit', bits, units[unit])
|
||||||
return string.format('%g %sbit', significand, units[known_pow])
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function statistics(key, format)
|
local function statistics(key, format)
|
||||||
@ -190,11 +217,17 @@
|
|||||||
<tr><th><%:Wireless 2.4 GHz%></th><td><%= statistics('clients/wifi24') %></td></tr>
|
<tr><th><%:Wireless 2.4 GHz%></th><td><%= statistics('clients/wifi24') %></td></tr>
|
||||||
<tr><th><%:Wireless 5 GHz%></th><td><%= statistics('clients/wifi5') %></td></tr>
|
<tr><th><%:Wireless 5 GHz%></th><td><%= statistics('clients/wifi5') %></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div id="radios" style="display: none">
|
<% if radios[1] then -%>
|
||||||
<h3><%:Radios%></h3>
|
<h3><%:Radios%></h3>
|
||||||
<table id="radio-devices">
|
<table>
|
||||||
|
<% for _, radio in ipairs(radios) do -%>
|
||||||
|
<tr>
|
||||||
|
<th><%| radio.name %></th>
|
||||||
|
<td><%| translatef('Channel %u', radio.channel) %></td>
|
||||||
|
</tr>
|
||||||
|
<%- end %>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
<%- end %>
|
||||||
|
|
||||||
<h3><%:Traffic%></h3>
|
<h3><%:Traffic%></h3>
|
||||||
<table>
|
<table>
|
||||||
|
File diff suppressed because one or more lines are too long
@ -31,8 +31,8 @@ msgstr "Automatische Updates"
|
|||||||
msgid "Bandwidth limit"
|
msgid "Bandwidth limit"
|
||||||
msgstr "Bandbreitenlimit"
|
msgstr "Bandbreitenlimit"
|
||||||
|
|
||||||
msgid "Channel"
|
msgid "Channel %u"
|
||||||
msgstr "Kanal"
|
msgstr "Kanal %u"
|
||||||
|
|
||||||
msgid "Clients"
|
msgid "Clients"
|
||||||
msgstr "Clients"
|
msgstr "Clients"
|
||||||
|
@ -22,7 +22,7 @@ msgstr ""
|
|||||||
msgid "Bandwidth limit"
|
msgid "Bandwidth limit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Channel"
|
msgid "Channel %u"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clients"
|
msgid "Clients"
|
||||||
|
@ -216,50 +216,6 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function update_radios(wireless) {
|
|
||||||
function channel(frequency) {
|
|
||||||
if (frequency===2484)
|
|
||||||
return 14
|
|
||||||
|
|
||||||
if (2412<=frequency && frequency<=2472)
|
|
||||||
return (frequency-2407)/5
|
|
||||||
|
|
||||||
if (5160<=frequency && frequency<=5885)
|
|
||||||
return (frequency-5000)/5
|
|
||||||
|
|
||||||
return 'unknown'
|
|
||||||
}
|
|
||||||
|
|
||||||
var div = document.getElementById('radios');
|
|
||||||
if (!wireless) {
|
|
||||||
div.style.display = 'none';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
div.style.display = '';
|
|
||||||
|
|
||||||
var table = document.getElementById('radio-devices');
|
|
||||||
while (table.lastChild)
|
|
||||||
table.removeChild(table.lastChild);
|
|
||||||
|
|
||||||
wireless.sort(function (a, b) {
|
|
||||||
return a.phy - b.phy;
|
|
||||||
});
|
|
||||||
|
|
||||||
wireless.forEach(function (radio) {
|
|
||||||
var tr = document.createElement('tr');
|
|
||||||
|
|
||||||
var th = document.createElement('th');
|
|
||||||
th.textContent = "phy" + radio.phy;
|
|
||||||
tr.appendChild(th);
|
|
||||||
|
|
||||||
var td = document.createElement('td');
|
|
||||||
td.innerHTML = radio.frequency + " MHz<br />Channel " + channel(radio.frequency);
|
|
||||||
tr.appendChild(td);
|
|
||||||
|
|
||||||
table.appendChild(tr);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var statisticsElems = document.querySelectorAll('[data-statistics]');
|
var statisticsElems = document.querySelectorAll('[data-statistics]');
|
||||||
|
|
||||||
add_event_source('/cgi-bin/dyn/statistics', function(data, dataPrev) {
|
add_event_source('/cgi-bin/dyn/statistics', function(data, dataPrev) {
|
||||||
@ -274,14 +230,13 @@
|
|||||||
try {
|
try {
|
||||||
var format_result = formats[format](value, valuePrev, diff);
|
var format_result = formats[format](value, valuePrev, diff);
|
||||||
switch (typeof format_result) {
|
switch (typeof format_result) {
|
||||||
case "string":
|
|
||||||
elem.textContent = format_result;
|
|
||||||
break;
|
|
||||||
case "object":
|
case "object":
|
||||||
if (elem.lastChild)
|
if (elem.lastChild)
|
||||||
elem.removeChild(elem.lastChild);
|
elem.removeChild(elem.lastChild);
|
||||||
elem.appendChild(format_result);
|
elem.appendChild(format_result);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
elem.textContent = format_result;
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
@ -293,11 +248,6 @@
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
update_radios(data.wireless);
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
function haversine(lat1, lon1, lat2, lon2) {
|
function haversine(lat1, lon1, lat2, lon2) {
|
||||||
|
Loading…
Reference in New Issue
Block a user