]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Send a latency of 0 over carbon, null over API for down servers 4785/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 19 Dec 2016 09:50:54 +0000 (10:50 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 19 Dec 2016 09:50:54 +0000 (10:50 +0100)
pdns/dnsdist-carbon.cc
pdns/dnsdist-web.cc
regression-tests.dnsdist/test_API.py

index 6fb8b43d08641121f2be1b440b94adade6361ffd..41f32c577e0ed1510d43d958b85d71dc9598ad3e 100644 (file)
@@ -89,7 +89,7 @@ try
           const string base = "dnsdist." + hostname + ".main.servers." + serverName + ".";
           str<<base<<"queries" << ' ' << s->queries.load() << " " << now << "\r\n";
           str<<base<<"drops" << ' ' << s->reuseds.load() << " " << now << "\r\n";
-          str<<base<<"latency" << ' ' << s->latencyUsec/1000.0 << " " << now << "\r\n";
+          str<<base<<"latency" << ' ' << (s->availability != DownstreamState::Availability::Down ? s->latencyUsec/1000.0 : 0) << " " << now << "\r\n";
           str<<base<<"senderrors" << ' ' << s->sendErrors.load() << " " << now << "\r\n";
           str<<base<<"outstanding" << ' ' << s->outstanding.load() << " " << now << "\r\n";
         }
index 58ef982f03e857e03efe613b537ff4dee6ee1607..530fc44012a13ee8c1f080a9687677a73bf20c70 100644 (file)
@@ -354,6 +354,11 @@ static void connectionThread(int sock, ComboAddress remote, string password, str
           {"latency", (int)(a->latencyUsec/1000.0)},
           {"queries", (int)a->queries}};
 
+        /* sending a latency for a DOWN server doesn't make sense */
+        if (a->availability == DownstreamState::Availability::Down) {
+          server["latency"] = nullptr;
+        }
+
        servers.push_back(server);
       }
 
index 95b353b5d34c84f72a50d00bb655727c403436f1..fd4a323812956f60df507426856b137e35c6dc72 100644 (file)
@@ -248,6 +248,35 @@ class TestAPIBasics(DNSDistTest):
             for key in ['blocks']:
                 self.assertTrue(content[key] >= 0)
 
+class TestAPIServerDown(DNSDistTest):
+
+    _webTimeout = 2.0
+    _webServerPort = 8083
+    _webServerBasicAuthPassword = 'secret'
+    _webServerAPIKey = 'apisecret'
+    # paths accessible using the API key
+    _config_params = ['_testServerPort', '_webServerPort', '_webServerBasicAuthPassword', '_webServerAPIKey']
+    _config_template = """
+    setACL({"127.0.0.1/32", "::1/128"})
+    newServer{address="127.0.0.1:%s"}
+    getServer(0):setDown()
+    webserver("127.0.0.1:%s", "%s", "%s")
+    """
+
+    def testServerDownNoLatencyLocalhost(self):
+        """
+        API: /api/v1/servers/localhost, no latency for a down server
+        """
+        headers = {'x-api-key': self._webServerAPIKey}
+        url = 'http://127.0.0.1:' + str(self._webServerPort) + '/api/v1/servers/localhost'
+        r = requests.get(url, headers=headers, timeout=self._webTimeout)
+        self.assertTrue(r)
+        self.assertEquals(r.status_code, 200)
+        self.assertTrue(r.json())
+        content = r.json()
+
+        self.assertEquals(content['servers'][0]['latency'], None)
+
 class TestAPIWritable(DNSDistTest):
 
     _webTimeout = 2.0