]>
git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/dnsdistdist/html/local.js
5 $(document
).ready(function() {
6 $.ajaxSetup({ cache
: false });
8 var qpsgraph
= new Rickshaw
.Graph( {
9 element
: document
.getElementById("qpschart"),
13 series
: new Rickshaw
.Series
.FixedDuration([{ name
: 'servfailps' }, {name
: 'qps'}], undefined, {
16 timeBase
: new Date().getTime() / 1000
19 var y_ticks
= new Rickshaw
.Graph
.Axis
.Y( {
22 tickFormat
: Rickshaw
.Fixtures
.Number
.formatKMBT
,
23 element
: document
.getElementById('qpsy_axis')
28 var cpugraph
= new Rickshaw
.Graph( {
29 element
: document
.getElementById("cpuchart"),
33 series
: new Rickshaw
.Series
.FixedDuration([{ name
: 'one' }, {name
: 'two'}], undefined, {
36 timeBase
: new Date().getTime() / 1000
39 var y_ticks
= new Rickshaw
.Graph
.Axis
.Y( {
42 tickFormat
: Rickshaw
.Fixtures
.Number
.formatKMBT
,
43 element
: document
.getElementById('cpuy_axis')
49 function updateRingBuffers()
51 var filtered
=$("#filter1").is(':checked')
52 var qstring
='jsonstat?command=get-query-ring&name=queries';
54 qstring
=qstring
+"&public-filtered=1";
59 var bouw
="<table><tr><th>Number</th><th>Domain</th><th>Type</th></tr>";
62 $.each(data
["entries"], function(a
,b
) {
69 b
[1]=b
[1].substring(0,25);
71 bouw
=bouw
+("<tr><td>"+b
[0]+"</td><td>"+b
[1]+"</td><td>"+b
[2]+"</td></tr>");
73 bouw
+="<tr><td>"+rest
+"</td><td>Rest</td></tr>";
75 $("#queryring").html(bouw
);
79 filtered
=$("#filter2").is(':checked')
80 qstring
='jsonstat?command=get-query-ring&name=servfail-queries';
82 qstring
=qstring
+"&public-filtered=1";
86 var bouw
="<table><tr><th>Number</th><th>Servfail domain</th><th>Type</th></tr>";
87 var num
=0, total
=0, rest
=0;
88 $.each(data
["entries"], function(a
,b
) {
95 b
[1]=b
[1].substring(0,25);
96 bouw
=bouw
+("<tr><td>"+b
[0]+"</td><td>"+b
[1]+"</td><td>"+b
[2]+"</td></tr>");
98 bouw
+="<tr><td>"+rest
+"</td><td>Rest</td></tr>";
100 $("#servfailqueryring").html(bouw
);
104 $.getJSON('jsonstat?command=get-remote-ring&name=remotes',
106 var bouw
="<table><tr><th>Number</th><th>Remote</th></tr>";
107 var num
=0, total
=0, rest
=0;
108 $.each(data
["entries"], function(a
,b
) {
114 bouw
=bouw
+("<tr><td>"+b
[0]+"</td><td>"+b
[1]+"</td></tr>");
116 bouw
+="<tr><td>"+rest
+"</td><td>Rest</td></tr>";
117 bouw
=bouw
+"</table>";
118 $("#remotering").html(bouw
);
122 $.getJSON('jsonstat?command=get-remote-ring&name=servfail-remotes',
124 var bouw
="<table><tr><th>Number</th><th>Servfail Remote</th></tr>";
125 var num
=0, total
=0, rest
=0;
126 $.each(data
["entries"], function(a
,b
) {
132 bouw
=bouw
+("<tr><td>"+b
[0]+"</td><td>"+b
[1]+"</td></tr>");
134 bouw
+="<tr><td>"+rest
+"</td><td>Rest</td></tr>";
135 bouw
=bouw
+"</table>";
136 $("#servfailremotering").html(bouw
);
143 url
: 'jsonstat?command=stats',
147 success: function(data
, x
, y
) {
148 $("#questions").text(data
["queries"]);
149 $("#acl-drops").text(data
["acl-drops"]);
150 $("#dyn-drops").text(data
["dyn-blocked"]);
151 $("#rule-drops").text(data
["rule-drop"]);
152 $("#uptime").text(moment
.duration(data
["uptime"]*1000.0).humanize());
153 $("#latency").text((data
["latency-avg10000"]/1000.0).toFixed(2));
154 $("#latency-tcp").text((data
["latency-tcp-avg10000"]/1000.0).toFixed(2));
155 $("#latency-dot").text((data
["latency-dot-avg10000"]/1000.0).toFixed(2));
156 $("#latency-doh").text((data
["latency-doh-avg10000"]/1000.0).toFixed(2));
157 if(!gdata
["cpu-sys-msec"])
160 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);
162 $("#cpu").text(cpu
.toFixed(2));
163 var qps
=1.0*data
["queries"]-1.0*gdata
["queries"];
164 $("#qps").text(qps
.toFixed(2));
165 $("#server-policy").text(data
["server-policy"]);
167 var servfailps
=1.0*data
["servfail-responses"]-1.0*gdata
["servfail-responses"];
169 var totpcache
=1.0*data
["cache-hits"]-1.0*gdata
["cache-hits"]+1.0*data
["cache-misses"]-1.0*gdata
["cache-misses"];
172 hitrate
=100.0*(data
["cache-hits"]-1.0*gdata
["cache-hits"])/totpcache
;
173 $("#phitrate").text(hitrate
.toFixed(2));
176 $("#phitrate").text(0);
178 qpsgraph
.series
.addData({ qps
: qps
, servfailps
: servfailps
});
181 cpugraph
.series
.addData({ one
: cpu
, two
: hitrate
});
191 $.ajax({ url
: 'api/v1/servers/localhost', type
: 'GET', dataType
: 'json', jsonp
: false,
192 success: function(data
) {
193 $("#version").text(data
["daemon_type"]+" "+data
["version"]);
194 $("#acl").text(data
["acl"]);
195 $("#local").text(data
["local"]);
196 var bouw
='<table width="100%"><tr align=right><th>#</th><th align=left>Name</th><th align=left>Address</th><th>Status</th><th>Latency</th><th>Queries</th><th>Drops</th><th>QPS</th><th>Out</th><th>Weight</th><th>Order</th><th align=left>Pools</th></tr>';
197 $.each(data
["servers"], function(a
,b
) {
198 bouw
= bouw
+ ("<tr align=right><td>"+b
["id"]+"</td><td align=left>"+b
["name"]+"</td><td align=left>"+b
["address"]+"</td><td>"+b
["state"]+"</td>");
199 var latency
= (b
["latency"] === null) ? 0.0 : b
["latency"];
200 bouw
= bouw
+ ("<td>"+latency
.toFixed(2)+"</td><td>"+b
["queries"]+"</td><td>"+b
["reuseds"]+"</td><td>"+(b
["qps"]).toFixed(2)+"</td><td>"+b
["outstanding"]+"</td>");
201 bouw
= bouw
+ ("<td>"+b
["weight"]+"</td><td>"+b
["order"]+"</td><td align=left>"+b
["pools"]+"</td></tr>");
203 bouw
= bouw
+ "</table>";
204 $("#downstreams").html(bouw
);
206 bouw
='<table width="100%"><tr align=left><th>#</th><th align=left>Rule</th><th>Action</th><th>Matches</th></tr>';
207 if(data
["rules"].length
) {
208 $.each(data
["rules"], function(a
,b
) {
209 bouw
= bouw
+ ("<tr align=left><td>"+b
["id"]+"</td><td align=left>"+b
["rule"]+"</td><td>"+b
["action"]+"</td>");
210 bouw
= bouw
+ ("<td>"+b
["matches"]+"</td></tr>");
214 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No rules defined</font></td></tr>';
215 bouw
= bouw
+ "</table>";
216 $("#rules").html(bouw
);
218 bouw
='<table width="100%"><tr align=left><th>#</th><th align=left>Response Rule</th><th>Action</th><th>Matches</th></tr>';
219 if(data
["response-rules"].length
) {
220 $.each(data
["response-rules"], function(a
,b
) {
221 bouw
= bouw
+ ("<tr align=left><td>"+b
["id"]+"</td><td align=left>"+b
["rule"]+"</td><td>"+b
["action"]+"</td>");
222 bouw
= bouw
+ ("<td>"+b
["matches"]+"</td></tr>");
226 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No response rules defined</font></td></tr>';
227 bouw
= bouw
+ "</table>";
228 $("#response-rules").html(bouw
);
233 // if((intervalcount++)%5)
235 // updateRingBuffers();
237 $.ajax({ url
: 'jsonstat?command=dynblocklist', type
: 'GET', dataType
: 'json', jsonp
: false,
238 success: function(data
) {
239 var bouw
='<table width="100%"><tr align=left><th>Dyn blocked netmask</th><th>Seconds</th><th>Blocks</th><th align=left>Reason</th></tr>';
241 $.each(data
, function(a
,b
) {
242 bouw
=bouw
+("<tr><td>"+a
+"</td><td>"+b
.seconds
+"</td><td>"+b
.blocks
+"</td><td>"+b
.reason
+"</td></tr>");
247 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No dynamic blocks active</font></td></tr>';
249 bouw
=bouw
+"</table>";
250 $("#dynblock").html(bouw
);
254 $.ajax({ url
: 'jsonstat?command=ebpfblocklist', type
: 'GET', dataType
: 'json', jsonp
: false,
255 success: function(data
) {
256 var bouw
='<table width="100%"><tr align=left><th>Kernel-based dyn blocked netmask</th><th>Seconds</th></th><th>Blocks</th></tr>';
258 $.each(data
, function(a
,b
) {
259 bouw
=bouw
+("<tr><td>"+a
+"</td><td>"+b
.seconds
+"</td><td>"+b
.blocks
+"</td></tr>");
264 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No eBPF blocks active</font></td></tr>';
266 bouw
=bouw
+"</table>";
267 $("#ebpfblock").html(bouw
);
273 $("#filter1").click(updateRingBuffers
);
274 $("#filter2").click(updateRingBuffers
);
277 setInterval(update
, 1000);