]>
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 if(!gdata
["cpu-sys-msec"])
157 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);
159 $("#cpu").text(cpu
.toFixed(2));
160 var qps
=1.0*data
["queries"]-1.0*gdata
["queries"];
161 $("#qps").text(qps
.toFixed(2));
162 $("#server-policy").text(data
["server-policy"]);
164 var servfailps
=1.0*data
["servfail-responses"]-1.0*gdata
["servfail-responses"];
166 var totpcache
=1.0*data
["cache-hits"]-1.0*gdata
["cache-hits"]+1.0*data
["cache-misses"]-1.0*gdata
["cache-misses"];
169 hitrate
=100.0*(data
["cache-hits"]-1.0*gdata
["cache-hits"])/totpcache
;
170 $("#phitrate").text(hitrate
.toFixed(2));
173 $("#phitrate").text(0);
175 qpsgraph
.series
.addData({ qps
: qps
, servfailps
: servfailps
});
178 cpugraph
.series
.addData({ one
: cpu
, two
: hitrate
});
188 $.ajax({ url
: 'api/v1/servers/localhost', type
: 'GET', dataType
: 'json', jsonp
: false,
189 success: function(data
) {
190 $("#version").text(data
["daemon_type"]+" "+data
["version"]);
191 $("#acl").text(data
["acl"]);
192 $("#local").text(data
["local"]);
193 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>';
194 $.each(data
["servers"], function(a
,b
) {
195 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>");
196 var latency
= (b
["latency"] === null) ? 0.0 : b
["latency"];
197 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>");
198 bouw
= bouw
+ ("<td>"+b
["weight"]+"</td><td>"+b
["order"]+"</td><td align=left>"+b
["pools"]+"</td></tr>");
200 bouw
= bouw
+ "</table>";
201 $("#downstreams").html(bouw
);
203 bouw
='<table width="100%"><tr align=left><th>#</th><th align=left>Rule</th><th>Action</th><th>Matches</th></tr>';
204 if(data
["rules"].length
) {
205 $.each(data
["rules"], function(a
,b
) {
206 bouw
= bouw
+ ("<tr align=left><td>"+b
["id"]+"</td><td align=left>"+b
["rule"]+"</td><td>"+b
["action"]+"</td>");
207 bouw
= bouw
+ ("<td>"+b
["matches"]+"</td></tr>");
211 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No rules defined</font></td></tr>';
212 bouw
= bouw
+ "</table>";
213 $("#rules").html(bouw
);
215 bouw
='<table width="100%"><tr align=left><th>#</th><th align=left>Response Rule</th><th>Action</th><th>Matches</th></tr>';
216 if(data
["response-rules"].length
) {
217 $.each(data
["response-rules"], function(a
,b
) {
218 bouw
= bouw
+ ("<tr align=left><td>"+b
["id"]+"</td><td align=left>"+b
["rule"]+"</td><td>"+b
["action"]+"</td>");
219 bouw
= bouw
+ ("<td>"+b
["matches"]+"</td></tr>");
223 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No response rules defined</font></td></tr>';
224 bouw
= bouw
+ "</table>";
225 $("#response-rules").html(bouw
);
230 // if((intervalcount++)%5)
232 // updateRingBuffers();
234 $.ajax({ url
: 'jsonstat?command=dynblocklist', type
: 'GET', dataType
: 'json', jsonp
: false,
235 success: function(data
) {
236 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>';
238 $.each(data
, function(a
,b
) {
239 bouw
=bouw
+("<tr><td>"+a
+"</td><td>"+b
.seconds
+"</td><td>"+b
.blocks
+"</td><td>"+b
.reason
+"</td></tr>");
244 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No dynamic blocks active</font></td></tr>';
246 bouw
=bouw
+"</table>";
247 $("#dynblock").html(bouw
);
251 $.ajax({ url
: 'jsonstat?command=ebpfblocklist', type
: 'GET', dataType
: 'json', jsonp
: false,
252 success: function(data
) {
253 var bouw
='<table width="100%"><tr align=left><th>Kernel-based dyn blocked netmask</th><th>Seconds</th></th><th>Blocks</th></tr>';
255 $.each(data
, function(a
,b
) {
256 bouw
=bouw
+("<tr><td>"+a
+"</td><td>"+b
.seconds
+"</td><td>"+b
.blocks
+"</td></tr>");
261 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No eBPF blocks active</font></td></tr>';
263 bouw
=bouw
+"</table>";
264 $("#ebpfblock").html(bouw
);
270 $("#filter1").click(updateRingBuffers
);
271 $("#filter2").click(updateRingBuffers
);
274 setInterval(update
, 1000);