Changeset 8330

Show
Ignore:
Timestamp:
03/04/12 19:36:05 (15 months ago)
Author:
jow
Message:

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

Location:
luci/trunk/modules/admin-full/luasrc
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • luci/trunk/modules/admin-full/luasrc/controller/admin/status.lua

    r7731 r8330  
    3838    entry({"admin", "status", "realtime", "connections"}, template("admin_status/connections"), _("Connections"), 4).leaf = true 
    3939    entry({"admin", "status", "realtime", "connections_status"}, call("action_connections")).leaf = true 
     40 
     41    entry({"admin", "status", "nameinfo"}, call("action_nameinfo")).leaf = true 
    4042end 
    4143 
     
    154156    luci.http.write(" }") 
    155157end 
     158 
     159function action_nameinfo(...) 
     160    local i 
     161    local rv = { } 
     162    for i = 1, select('#', ...) do 
     163        local addr = select(i, ...) 
     164        local fqdn = nixio.getnameinfo(addr) 
     165        rv[addr] = fqdn or (addr:match(":") and "[%s]" % addr or addr) 
     166    end 
     167 
     168    luci.http.prepare_content("application/json") 
     169    luci.http.write_json(rv) 
     170end 
  • luci/trunk/modules/admin-full/luasrc/view/admin_status/connections.htm

    r8328 r8330  
    5959 
    6060    var conn_table; 
     61 
     62    var dns_cache = { }; 
    6163 
    6264 
     
    150152                            conn_table.rows[0].parentNode.deleteRow(-1); 
    151153 
     154 
     155                        var lookup_queue = [ ]; 
     156 
     157                        conn.sort(function(a, b) { 
     158                            return b.bytes - a.bytes; 
     159                        }); 
     160 
    152161                        for (var i = 0; i < conn.length; i++) 
    153162                        { 
    154163                            var c  = conn[i]; 
    155164                            var tr = conn_table.rows[0].parentNode.insertRow(-1); 
    156                                 tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2)); 
     165                                tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2)); 
     166 
     167                            if (!dns_cache[c.src]) 
     168                                lookup_queue.push(c.src); 
     169 
     170                            if (!dns_cache[c.dst]) 
     171                                lookup_queue.push(c.dst); 
     172 
     173                            var src = dns_cache[c.src] || (c.layer3 == 'ipv6' ? '[' + c.src + ']' : c.src); 
     174                            var dst = dns_cache[c.dst] || (c.layer3 == 'ipv6' ? '[' + c.dst + ']' : c.dst); 
    157175 
    158176                            tr.insertCell(-1).innerHTML = c.layer3.toUpperCase(); 
    159177                            tr.insertCell(-1).innerHTML = c.layer4.toUpperCase(); 
    160                             tr.insertCell(-1).innerHTML = String.format(c.layer3 == 'ipv6' ? '[%s]:%d' : '%s:%d', c.src, c.sport); 
    161                             tr.insertCell(-1).innerHTML = String.format(c.layer3 == 'ipv6' ? '[%s]:%d' : '%s:%d', c.dst, c.dport); 
    162                             tr.insertCell(-1).innerHTML = String.format('%1024.2mB (%d <%:Pkts.%>)', c.bytes, c.packets); 
     178                            tr.insertCell(-1).innerHTML = String.format('%s:%d', src, c.sport); 
     179                            tr.insertCell(-1).innerHTML = String.format('%s:%d', dst, c.dport); 
     180 
     181                            var traf = tr.insertCell(-1); 
     182                                traf.style.whiteSpace = 'nowrap'; 
     183                                traf.innerHTML = String.format('%1024.2mB (%d <%:Pkts.%>)', c.bytes, c.packets); 
    163184                        } 
     185 
     186                        if (lookup_queue.length > 0) 
     187                            XHR.get('<%=build_url("admin/status/nameinfo")%>/' + lookup_queue.slice(0, 100).join('/'), null, 
     188                                function(x, json) 
     189                                { 
     190                                    for (var addr in json) 
     191                                        dns_cache[addr] = json[addr]; 
     192                                } 
     193                            ); 
    164194 
    165195