From b22f022f2c3652a5af3c1ef843a9b06eba851404 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sun, 4 Mar 2012 18:36:05 +0000 Subject: [PATCH] modules/admin-full: add DNS resolution to connections status page, order connections descending by traffic --- .../luasrc/controller/admin/status.lua | 15 ++++++++ .../luasrc/view/admin_status/connections.htm | 38 +++++++++++++++++-- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/modules/admin-full/luasrc/controller/admin/status.lua b/modules/admin-full/luasrc/controller/admin/status.lua index f77d91b34..d7d301c54 100644 --- a/modules/admin-full/luasrc/controller/admin/status.lua +++ b/modules/admin-full/luasrc/controller/admin/status.lua @@ -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 diff --git a/modules/admin-full/luasrc/view/admin_status/connections.htm b/modules/admin-full/luasrc/view/admin_status/connections.htm index bfa2a33a4..9c9eb01c9 100644 --- a/modules/admin-full/luasrc/view/admin_status/connections.htm +++ b/modules/admin-full/luasrc/view/admin_status/connections.htm @@ -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; -- 2.25.1