From 4fc2f55f761d71aae1f145d5aa94ba929cc39676 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 11:34:30 +0200 Subject: Adding upstream version 1.7.3. Signed-off-by: Daniel Baumann --- html/local.js | 275 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 html/local.js (limited to 'html/local.js') diff --git a/html/local.js b/html/local.js new file mode 100644 index 0000000..cbf9534 --- /dev/null +++ b/html/local.js @@ -0,0 +1,275 @@ +"use strict"; + +var gdata={} + +$(document).ready(function() { + $.ajaxSetup({ cache: false }); + + var qpsgraph = new Rickshaw.Graph( { + element: document.getElementById("qpschart"), + width: 400, + height: 200, + renderer: 'line', + series: new Rickshaw.Series.FixedDuration([{ name: 'servfailps' }, {name: 'qps'}], undefined, { + timeInterval: 1000, + maxDataPoints: 100, + timeBase: new Date().getTime() / 1000 + }) + } ); + var y_ticks = new Rickshaw.Graph.Axis.Y( { + graph: qpsgraph, + orientation: 'left', + tickFormat: Rickshaw.Fixtures.Number.formatKMBT, + element: document.getElementById('qpsy_axis') + } ); + + qpsgraph.render(); + + var cpugraph = new Rickshaw.Graph( { + element: document.getElementById("cpuchart"), + width: 400, + height: 200, + renderer: 'line', + series: new Rickshaw.Series.FixedDuration([{ name: 'one' }, {name: 'two'}], undefined, { + timeInterval: 1000, + maxDataPoints: 100, + timeBase: new Date().getTime() / 1000 + }) + } ); + var y_ticks = new Rickshaw.Graph.Axis.Y( { + graph: cpugraph, + orientation: 'left', + tickFormat: Rickshaw.Fixtures.Number.formatKMBT, + element: document.getElementById('cpuy_axis') + } ); + + cpugraph.render(); + var intervalcount=0; + + function updateRingBuffers() + { + var filtered=$("#filter1").is(':checked') + var qstring='jsonstat?command=get-query-ring&name=queries'; + if(filtered) + qstring=qstring+"&public-filtered=1"; + + $.getJSON(qstring, + function(data) { + console.log(data); + var bouw=""; + var num=0; + var total=0, rest=0; + $.each(data["entries"], function(a,b) { + total+=b[0]; + if(num++ > 10) { + rest+=b[0]; + return; + } + if(b[1].length > 25) + b[1]=b[1].substring(0,25); + + bouw=bouw+(""); + }); + bouw+=""; + bouw=bouw+"
NumberDomainType
"+b[0]+""+b[1]+""+b[2]+"
"+rest+"Rest
"; + $("#queryring").html(bouw); + + }); + + filtered=$("#filter2").is(':checked') + qstring='jsonstat?command=get-query-ring&name=servfail-queries'; + if(filtered) + qstring=qstring+"&public-filtered=1"; + + $.getJSON(qstring, + function(data) { + var bouw=""; + var num=0, total=0, rest=0; + $.each(data["entries"], function(a,b) { + total+=b[0]; + if(num++ > 10) { + rest+=b[0]; + return; + } + if(b[1].length > 25) + b[1]=b[1].substring(0,25); + bouw=bouw+(""); + }); + bouw+=""; + bouw=bouw+"
NumberServfail domainType
"+b[0]+""+b[1]+""+b[2]+"
"+rest+"Rest
"; + $("#servfailqueryring").html(bouw); + + }); + + $.getJSON('jsonstat?command=get-remote-ring&name=remotes', + function(data) { + var bouw=""; + var num=0, total=0, rest=0; + $.each(data["entries"], function(a,b) { + total+=b[0]; + if(num++ > 10) { + rest +=b[0]; + return; + } + bouw=bouw+(""); + }); + bouw+=""; + bouw=bouw+"
NumberRemote
"+b[0]+""+b[1]+"
"+rest+"Rest
"; + $("#remotering").html(bouw); + + }); + + $.getJSON('jsonstat?command=get-remote-ring&name=servfail-remotes', + function(data) { + var bouw=""; + var num=0, total=0, rest=0; + $.each(data["entries"], function(a,b) { + total+=b[0]; + if(num++ > 10) { + rest += b[0]; + return; + } + bouw=bouw+(""); + }); + bouw+=""; + bouw=bouw+"
NumberServfail Remote
"+b[0]+""+b[1]+"
"+rest+"Rest
"; + $("#servfailremotering").html(bouw); + }); + } + + function update() + { + $.ajax({ + url: 'jsonstat?command=stats', + type: 'GET', + dataType: 'json', + jsonp: false, + success: function(data, x, y) { + $("#questions").text(data["queries"]); + $("#acl-drops").text(data["acl-drops"]); + $("#dyn-drops").text(data["dyn-blocked"]); + $("#rule-drops").text(data["rule-drop"]); + $("#uptime").text(moment.duration(data["uptime"]*1000.0).humanize()); + $("#latency").text((data["latency-avg10000"]/1000.0).toFixed(2)); + if(!gdata["cpu-sys-msec"]) + gdata=data; + + var cpu=((1.0*data["cpu-sys-msec"]+1.0*data["cpu-user-msec"] - 1.0*gdata["cpu-sys-msec"]-1.0*gdata["cpu-user-msec"])/10.0); + + $("#cpu").text(cpu.toFixed(2)); + var qps=1.0*data["queries"]-1.0*gdata["queries"]; + $("#qps").text(qps.toFixed(2)); + $("#server-policy").text(data["server-policy"]); + + var servfailps=1.0*data["servfail-responses"]-1.0*gdata["servfail-responses"]; + + var totpcache=1.0*data["cache-hits"]-1.0*gdata["cache-hits"]+1.0*data["cache-misses"]-1.0*gdata["cache-misses"]; + var hitrate=0; + if(totpcache > 0) { + hitrate=100.0*(data["cache-hits"]-1.0*gdata["cache-hits"])/totpcache; + $("#phitrate").text(hitrate.toFixed(2)); + } + else + $("#phitrate").text(0); + + qpsgraph.series.addData({ qps: qps, servfailps: servfailps}); + qpsgraph.render(); + + cpugraph.series.addData({ one: cpu, two: hitrate}); + cpugraph.render(); + + gdata=data; + }, + error: function() { + + }, + }); + + $.ajax({ url: 'api/v1/servers/localhost', type: 'GET', dataType: 'json', jsonp: false, + success: function(data) { + $("#version").text(data["daemon_type"]+" "+data["version"]); + $("#acl").text(data["acl"]); + $("#local").text(data["local"]); + var bouw=''; + $.each(data["servers"], function(a,b) { + bouw = bouw + (""); + var latency = (b["latency"] === null) ? 0.0 : b["latency"]; + bouw = bouw + (""); + bouw = bouw + (""); + }); + bouw = bouw + "
#NameAddressStatusLatencyQueriesDropsQPSOutWeightOrderPools
"+b["id"]+""+b["name"]+""+b["address"]+""+b["state"]+""+latency.toFixed(2)+""+b["queries"]+""+b["reuseds"]+""+(b["qps"]).toFixed(2)+""+b["outstanding"]+""+b["weight"]+""+b["order"]+""+b["pools"]+"
"; + $("#downstreams").html(bouw); + + bouw=''; + if(data["rules"].length) { + $.each(data["rules"], function(a,b) { + bouw = bouw + (""); + bouw = bouw + (""); + }); + } + else + bouw = bouw + ''; + bouw = bouw + "
#RuleActionMatches
"+b["id"]+""+b["rule"]+""+b["action"]+""+b["matches"]+"
No rules defined
"; + $("#rules").html(bouw); + + bouw=''; + if(data["response-rules"].length) { + $.each(data["response-rules"], function(a,b) { + bouw = bouw + (""); + bouw = bouw + (""); + }); + } + else + bouw = bouw + ''; + bouw = bouw + "
#Response RuleActionMatches
"+b["id"]+""+b["rule"]+""+b["action"]+""+b["matches"]+"
No response rules defined
"; + $("#response-rules").html(bouw); + } + }); + + +// if((intervalcount++)%5) + // return; + // updateRingBuffers(); + + $.ajax({ url: 'jsonstat?command=dynblocklist', type: 'GET', dataType: 'json', jsonp: false, + success: function(data) { + var bouw=''; + var gotsome=false; + $.each(data, function(a,b) { + bouw=bouw+(""); + gotsome=true; + }); + + if(!gotsome) + bouw = bouw + ''; + + bouw=bouw+"
Dyn blocked netmaskSecondsBlocksReason
"+a+""+b.seconds+""+b.blocks+""+b.reason+"
No dynamic blocks active
"; + $("#dynblock").html(bouw); + + }}); + + $.ajax({ url: 'jsonstat?command=ebpfblocklist', type: 'GET', dataType: 'json', jsonp: false, + success: function(data) { + var bouw=''; + var gotsome=false; + $.each(data, function(a,b) { + bouw=bouw+(""); + gotsome=true; + }); + + if(!gotsome) + bouw = bouw + ''; + + bouw=bouw+"
Kernel-based dyn blocked netmaskSecondsBlocks
"+a+""+b.seconds+""+b.blocks+"
No eBPF blocks active
"; + $("#ebpfblock").html(bouw); + + }}); + + }; + + $("#filter1").click(updateRingBuffers); + $("#filter2").click(updateRingBuffers); + + update(); + setInterval(update, 1000); +}); -- cgit v1.2.3