]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - pdns/dnsdist-tcp.cc
dnsdist: add frontend response statistics
[thirdparty/pdns.git] / pdns / dnsdist-tcp.cc
index 777865ff162b5f130234964f0f21f6beadc58984..41465e16da06f86033d4e000ae73afd9e2b8140e 100644 (file)
@@ -467,6 +467,17 @@ void tcpClientThread(int pipefd)
 #endif
               handler.writeSizeAndMsg(cachedResponse, cachedResponseSize, g_tcpSendTimeout);
               g_stats.cacheHits++;
+              switch (dr.dh->rcode) {
+              case RCode::NXDomain:
+                ++g_stats.frontendNXDomain;
+                break;
+              case RCode::ServFail:
+                ++g_stats.frontendServFail;
+                break;
+              case RCode::NoError:
+                ++g_stats.frontendNoError;
+                break;
+              }
               continue;
             }
 
@@ -501,6 +512,17 @@ void tcpClientThread(int pipefd)
 #endif
             handler.writeSizeAndMsg(cachedResponse, cachedResponseSize, g_tcpSendTimeout);
             ++g_stats.cacheHits;
+            switch (dr.dh->rcode) {
+            case RCode::NXDomain:
+              ++g_stats.frontendNXDomain;
+              break;
+            case RCode::ServFail:
+              ++g_stats.frontendServFail;
+              break;
+            case RCode::NoError:
+              ++g_stats.frontendNoError;
+              break;
+            }
             continue;
           }
           ++g_stats.cacheMisses;
@@ -711,6 +733,17 @@ void tcpClientThread(int pipefd)
         }
 
         ++g_stats.responses;
+        switch (dr.dh->rcode) {
+        case RCode::NXDomain:
+           ++g_stats.frontendNXDomain;
+           break;
+        case RCode::ServFail:
+          ++g_stats.frontendServFail;
+          break;
+        case RCode::NoError:
+          ++g_stats.frontendNoError;
+          break;
+        }
         struct timespec answertime;
         gettime(&answertime);
         unsigned int udiff = 1000000.0*DiffTime(now,answertime);