modules/admin-full: add DNS resolution to connections status page, order connections descending by traffic

This commit is contained in:
Jo-Philipp Wich 2012-03-04 18:36:05 +00:00
parent e6bf801bad
commit b22f022f2c
2 changed files with 49 additions and 4 deletions

View file

@ -37,6 +37,8 @@ function index()
entry({"admin", "status", "realtime", "connections"}, template("admin_status/connections"), _("Connections"), 4).leaf = true
entry({"admin", "status", "realtime", "connections_status"}, call("action_connections")).leaf = true
entry({"admin", "status", "nameinfo"}, call("action_nameinfo")).leaf = true
end
function action_syslog()
@ -153,3 +155,16 @@ function action_connections()
luci.http.write(" }")
end
function action_nameinfo(...)
local i
local rv = { }
for i = 1, select('#', ...) do
local addr = select(i, ...)
local fqdn = nixio.getnameinfo(addr)
rv[addr] = fqdn or (addr:match(":") and "[%s]" % addr or addr)
end
luci.http.prepare_content("application/json")
luci.http.write_json(rv)
end

View file

@ -59,6 +59,8 @@ $Id$
var conn_table;
var dns_cache = { };
/* wait for SVG */
window.setTimeout(
@ -149,19 +151,47 @@ $Id$
while (conn_table.rows.length > 1)
conn_table.rows[0].parentNode.deleteRow(-1);
var lookup_queue = [ ];
conn.sort(function(a, b) {
return b.bytes - a.bytes;
});
for (var i = 0; i < conn.length; i++)
{
var c = conn[i];
var tr = conn_table.rows[0].parentNode.insertRow(-1);
tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2));
tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2));
if (!dns_cache[c.src])
lookup_queue.push(c.src);
if (!dns_cache[c.dst])
lookup_queue.push(c.dst);
var src = dns_cache[c.src] || (c.layer3 == 'ipv6' ? '[' + c.src + ']' : c.src);
var dst = dns_cache[c.dst] || (c.layer3 == 'ipv6' ? '[' + c.dst + ']' : c.dst);
tr.insertCell(-1).innerHTML = c.layer3.toUpperCase();
tr.insertCell(-1).innerHTML = c.layer4.toUpperCase();
tr.insertCell(-1).innerHTML = String.format(c.layer3 == 'ipv6' ? '[%s]:%d' : '%s:%d', c.src, c.sport);
tr.insertCell(-1).innerHTML = String.format(c.layer3 == 'ipv6' ? '[%s]:%d' : '%s:%d', c.dst, c.dport);
tr.insertCell(-1).innerHTML = String.format('%1024.2mB (%d <%:Pkts.%>)', c.bytes, c.packets);
tr.insertCell(-1).innerHTML = String.format('%s:%d', src, c.sport);
tr.insertCell(-1).innerHTML = String.format('%s:%d', dst, c.dport);
var traf = tr.insertCell(-1);
traf.style.whiteSpace = 'nowrap';
traf.innerHTML = String.format('%1024.2mB (%d <%:Pkts.%>)', c.bytes, c.packets);
}
if (lookup_queue.length > 0)
XHR.get('<%=build_url("admin/status/nameinfo")%>/' + lookup_queue.slice(0, 100).join('/'), null,
function(x, json)
{
for (var addr in json)
dns_cache[addr] = json[addr];
}
);
var data = json.statistics;