]>
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 $("#blockfilter-drops").text(data
["block-filter"]);
153 $("#uptime").text(moment
.duration(data
["uptime"]*1000.0).humanize());
154 $("#latency").text((data
["latency-avg10000"]/1000.0).toFixed(2));
155 if(!gdata
["cpu-sys-msec"])
158 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);
160 $("#cpu").text(cpu
.toFixed(2));
161 var qps
=1.0*data
["queries"]-1.0*gdata
["queries"];
162 $("#qps").text(qps
.toFixed(2));
163 $("#server-policy").text(data
["server-policy"]);
165 var servfailps
=1.0*data
["servfail-responses"]-1.0*gdata
["servfail-responses"];
167 var totpcache
=1.0*data
["cache-hits"]-1.0*gdata
["cache-hits"]+1.0*data
["cache-misses"]-1.0*gdata
["cache-misses"];
170 hitrate
=100.0*(data
["cache-hits"]-1.0*gdata
["cache-hits"])/totpcache
;
171 $("#phitrate").text(hitrate
.toFixed(2));
174 $("#phitrate").text(0);
176 qpsgraph
.series
.addData({ qps
: qps
, servfailps
: servfailps
});
179 cpugraph
.series
.addData({ one
: cpu
, two
: hitrate
});
189 $.ajax({ url
: 'api/v1/servers/localhost', type
: 'GET', dataType
: 'json', jsonp
: false,
190 success: function(data
) {
191 $("#version").text(data
["daemon_type"]+" "+data
["version"]);
192 $("#acl").text(data
["acl"]);
193 $("#local").text(data
["local"]);
194 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>';
195 $.each(data
["servers"], function(a
,b
) {
196 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>");
197 var latency
= (b
["latency"] === null) ? 0.0 : b
["latency"];
198 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>");
199 bouw
= bouw
+ ("<td>"+b
["weight"]+"</td><td>"+b
["order"]+"</td><td align=left>"+b
["pools"]+"</td></tr>");
201 bouw
= bouw
+ "</table>";
202 $("#downstreams").html(bouw
);
204 bouw
='<table width="100%"><tr align=left><th>#</th><th align=left>Rule</th><th>Action</th><th>Matches</th></tr>';
205 if(data
["rules"].length
) {
206 $.each(data
["rules"], function(a
,b
) {
207 bouw
= bouw
+ ("<tr align=left><td>"+b
["id"]+"</td><td align=left>"+b
["rule"]+"</td><td>"+b
["action"]+"</td>");
208 bouw
= bouw
+ ("<td>"+b
["matches"]+"</td></tr>");
212 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No rules defined</font></td></tr>';
213 bouw
= bouw
+ "</table>";
214 $("#rules").html(bouw
);
216 bouw
='<table width="100%"><tr align=left><th>#</th><th align=left>Response Rule</th><th>Action</th><th>Matches</th></tr>';
217 if(data
["response-rules"].length
) {
218 $.each(data
["response-rules"], function(a
,b
) {
219 bouw
= bouw
+ ("<tr align=left><td>"+b
["id"]+"</td><td align=left>"+b
["rule"]+"</td><td>"+b
["action"]+"</td>");
220 bouw
= bouw
+ ("<td>"+b
["matches"]+"</td></tr>");
224 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No response rules defined</font></td></tr>';
225 bouw
= bouw
+ "</table>";
226 $("#response-rules").html(bouw
);
231 // if((intervalcount++)%5)
233 // updateRingBuffers();
235 $.ajax({ url
: 'jsonstat?command=dynblocklist', type
: 'GET', dataType
: 'json', jsonp
: false,
236 success: function(data
) {
237 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>';
239 $.each(data
, function(a
,b
) {
240 bouw
=bouw
+("<tr><td>"+a
+"</td><td>"+b
.seconds
+"</td><td>"+b
.blocks
+"</td><td>"+b
.reason
+"</td></tr>");
245 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No dynamic blocks active</font></td></tr>';
247 bouw
=bouw
+"</table>";
248 $("#dynblock").html(bouw
);
252 $.ajax({ url
: 'jsonstat?command=ebpfblocklist', type
: 'GET', dataType
: 'json', jsonp
: false,
253 success: function(data
) {
254 var bouw
='<table width="100%"><tr align=left><th>Kernel-based dyn blocked netmask</th><th>Seconds</th></th><th>Blocks</th></tr>';
256 $.each(data
, function(a
,b
) {
257 bouw
=bouw
+("<tr><td>"+a
+"</td><td>"+b
.seconds
+"</td><td>"+b
.blocks
+"</td></tr>");
262 bouw
= bouw
+ '<tr><td align="center" colspan="4"><font color="#aaaaaa">No eBPF blocks active</font></td></tr>';
264 bouw
=bouw
+"</table>";
265 $("#ebpfblock").html(bouw
);
271 $("#filter1").click(updateRingBuffers
);
272 $("#filter2").click(updateRingBuffers
);
275 setInterval(update
, 1000);