]> granicus.if.org Git - pdns/commitdiff
dnsdist: Add response rules to the API and Web status page
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 4 Aug 2016 14:14:27 +0000 (16:14 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 4 Aug 2016 14:14:27 +0000 (16:14 +0200)
pdns/dnsdist-web.cc
pdns/dnsdistdist/html/index.html
pdns/dnsdistdist/html/local.js
regression-tests.dnsdist/test_API.py

index e5a6e9939cd877f1696562d1b9ec58b11fae1fd7..b0ba8aa7f054eb22f3ccc8ea2547e90300c17746 100644 (file)
@@ -275,6 +275,18 @@ static void connectionThread(int sock, ComboAddress remote, string password, str
        rules.push_back(rule);
       }
       
+      Json::array responseRules;
+      auto localResponseRules = g_resprulactions.getCopy();
+      num=0;
+      for(const auto& a : localResponseRules) {
+        Json::object rule{
+          {"id", num++},
+          {"matches", (int)a.first->d_matches},
+          {"rule", a.first->toString()},
+          {"action", a.second->toString()},
+        };
+        responseRules.push_back(rule);
+      }
 
       string acl;
 
@@ -298,6 +310,7 @@ static void connectionThread(int sock, ComboAddress remote, string password, str
        { "servers", servers},
        { "frontends", frontends },
        { "rules", rules},
+       { "response-rules", responseRules},
        { "acl", acl},
        { "local", localaddresses}
       };
index 1417c212a7bdbbba1c116228f0a2accbcd6ea20b..0897a7c6b6ebcfd75cc7852a0fa439ffae8b2e57 100644 (file)
@@ -83,6 +83,9 @@
             <tr>
               <td><div id="rules"></div></td>
             </tr>
+            <tr>
+              <td><div id="response-rules"></div></td>
+            </tr>
             <tr>
               <td><div id="dynblock"></div></td>
             </tr>
index 4b20cd074f08c02762fd36ffbec343f475ebed72..dd6bd844d061bcca805f9794e0ba3e0d06ad5761 100644 (file)
@@ -211,6 +211,18 @@ $(document).ready(function() {
                          bouw = bouw + '<tr><td align="center" colspan="4"><font color="#aaaaaa">No rules defined</font></td></tr>';
                      bouw = bouw + "</table>";
                      $("#rules").html(bouw);
+
+                     bouw='<table width="100%"><tr align=left><th>#</th><th align=left>Response Rule</th><th>Action</th><th>Matches</th></tr>';
+                     if(data["response-rules"].length) {
+                         $.each(data["response-rules"], function(a,b) {
+                             bouw = bouw + ("<tr align=left><td>"+b["id"]+"</td><td align=left>"+b["rule"]+"</td><td>"+b["action"]+"</td>");
+                             bouw = bouw + ("<td>"+b["matches"]+"</td></tr>");
+                         });
+                     }
+                     else
+                         bouw = bouw + '<tr><td align="center" colspan="4"><font color="#aaaaaa">No response rules defined</font></td></tr>';
+                     bouw = bouw + "</table>";
+                     $("#response-rules").html(bouw);
                  }
                });
 
index 58163a604670738559d3464e962e8ca142cdb7b0..a0e628faf49abd1d16d37ebb6f6c8c08193c7851 100644 (file)
@@ -64,7 +64,7 @@ class TestBasics(DNSDistTest):
 
         self.assertEquals(content['daemon_type'], 'dnsdist')
 
-        for key in ['version', 'acl', 'local', 'rules', 'servers', 'frontends']:
+        for key in ['version', 'acl', 'local', 'rules', 'response-rules', 'servers', 'frontends']:
             self.assertIn(key, content)
 
         for rule in content['rules']:
@@ -73,6 +73,12 @@ class TestBasics(DNSDistTest):
             for key in ['id', 'matches']:
                 self.assertTrue(rule[key] >= 0)
 
+        for rule in content['response-rules']:
+            for key in ['id', 'matches', 'rule', 'action']:
+                self.assertIn(key, rule)
+            for key in ['id', 'matches']:
+                self.assertTrue(rule[key] >= 0)
+
         for server in content['servers']:
             for key in ['id', 'latency', 'name', 'weight', 'outstanding', 'qpsLimit',
                         'reuseds', 'state', 'address', 'pools', 'qps', 'queries', 'order']: