summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-mod-status
diff options
context:
space:
mode:
authorAnsuel Smith <ansuelsmth@gmail.com>2018-07-07 01:06:29 +0200
committerAnsuel Smith <ansuelsmth@gmail.com>2019-05-02 12:50:36 +0200
commite8bce3db42e259f25476e8e953dfe8ae605d3fcd (patch)
tree49ea17d12b04f6063b037084f97737a1918c50a3 /modules/luci-mod-status
parent3b379f01b52ec1150662f707864608e3e0f51c3f (diff)
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>
Diffstat (limited to 'modules/luci-mod-status')
-rw-r--r--modules/luci-mod-status/luasrc/view/admin_status/connections.htm51
1 files changed, 41 insertions, 10 deletions
diff --git a/modules/luci-mod-status/luasrc/view/admin_status/connections.htm b/modules/luci-mod-status/luasrc/view/admin_status/connections.htm
index e3dd39d60..37debcde6 100644
--- a/modules/luci-mod-status/luasrc/view/admin_status/connections.htm
+++ b/modules/luci-mod-status/luasrc/view/admin_status/connections.htm
@@ -131,15 +131,21 @@
}
label_scale.innerHTML = String.format('<%:(%d minute window, %d second interval)%>', data_wanted / 60, 3);
+
+ var recheck_lookup_queue = {};
/* render datasets, start update interval */
XHR.poll(3, '<%=build_url("admin/status/realtime/connections_status")%>', null,
function(x, json)
{
- var rows = [];
+
+ if (!json.connections)
+ return;
+
var conn = json.connections;
var lookup_queue = [ ];
+ var rows = [];
conn.sort(function(a, b) {
return b.bytes - a.bytes;
@@ -150,13 +156,13 @@
var c = conn[i];
if ((c.src == '127.0.0.1' && c.dst == '127.0.0.1') ||
- (c.src == '::1' && c.dst == '::1'))
+ (c.src == '::1' && c.dst == '::1'))
continue;
- if (!dns_cache[c.src])
+ if (!dns_cache[c.src] && lookup_queue.indexOf(c.src) == -1)
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);
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>');
- 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];
+ if (lookup_queue.length > 0) {
+ var reduced_lookup_queue = lookup_queue;
+
+ if (lookup_queue.length > 100)
+ reduced_lookup_queue = lookup_queue.slice(0, 100);
+
+ 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;