luci-mod-admin-full: improve connection page lookup loop

Currently the lookup loop is very inefficient. This improve the lookup loop by moving the entities to a separate array and adds them only one time. Every entities is checked 3 times, after that it will be moved to dns cache as a raw addres (not resolved). This also introduce the Type column to identify common packet using the source port.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
This commit is contained in:
Ansuel Smith 2018-07-07 01:06:29 +02:00
parent 3b379f01b5
commit e8bce3db42
No known key found for this signature in database
GPG key ID: AC001D09ADBFEAD7

View file

@ -132,14 +132,20 @@
label_scale.innerHTML = String.format('<%:(%d minute window, %d second interval)%>', data_wanted / 60, 3); label_scale.innerHTML = String.format('<%:(%d minute window, %d second interval)%>', data_wanted / 60, 3);
var recheck_lookup_queue = {};
/* render datasets, start update interval */ /* render datasets, start update interval */
XHR.poll(3, '<%=build_url("admin/status/realtime/connections_status")%>', null, XHR.poll(3, '<%=build_url("admin/status/realtime/connections_status")%>', null,
function(x, json) function(x, json)
{ {
var rows = [];
if (!json.connections)
return;
var conn = json.connections; var conn = json.connections;
var lookup_queue = [ ]; var lookup_queue = [ ];
var rows = [];
conn.sort(function(a, b) { conn.sort(function(a, b) {
return b.bytes - a.bytes; return b.bytes - a.bytes;
@ -153,10 +159,10 @@
(c.src == '::1' && c.dst == '::1')) (c.src == '::1' && c.dst == '::1'))
continue; continue;
if (!dns_cache[c.src]) if (!dns_cache[c.src] && lookup_queue.indexOf(c.src) == -1)
lookup_queue.push(c.src); lookup_queue.push(c.src);
if (!dns_cache[c.dst]) if (!dns_cache[c.dst] && lookup_queue.indexOf(c.dst) == -1)
lookup_queue.push(c.dst); lookup_queue.push(c.dst);
var src = dns_cache[c.src] || (c.layer3 == 'ipv6' ? '[' + c.src + ']' : c.src); var src = dns_cache[c.src] || (c.layer3 == 'ipv6' ? '[' + c.src + ']' : c.src);
@ -173,14 +179,39 @@
cbi_update_table(conn_table, rows, '<em><%:No information available%></em>'); cbi_update_table(conn_table, rows, '<em><%:No information available%></em>');
if (lookup_queue.length > 0) if (lookup_queue.length > 0) {
XHR.get('<%=build_url("admin/status/nameinfo")%>/' + lookup_queue.slice(0, 100).join('/'), null, var reduced_lookup_queue = lookup_queue;
function(x, json)
{ if (lookup_queue.length > 100)
for (var addr in json) reduced_lookup_queue = lookup_queue.slice(0, 100);
dns_cache[addr] = json[addr];
XHR.get('<%=build_url("admin/status/nameinfo")%>/' + reduced_lookup_queue.join('/'), null,
function(x, json) {
if (!json)
return;
for (var index in reduced_lookup_queue) {
var address = reduced_lookup_queue[index];
if (!address)
continue;
if (json[address]) {
dns_cache[address] = json[address];
lookup_queue.splice(reduced_lookup_queue.indexOf(address),1);
continue;
}
if(recheck_lookup_queue[address] > 2) {
dns_cache[address] = (address.match(/:/)) ? '[' + address + ']' : address;
lookup_queue.splice(index,1);
} else {
recheck_lookup_queue[address] != null ? recheck_lookup_queue[address]++ : recheck_lookup_queue[address] = 0;
}
}
} }
); );
}
var data = json.statistics; var data = json.statistics;