]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Display backend and frontend TCP metrics in showTCPStats()
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 26 Mar 2019 10:10:57 +0000 (11:10 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 4 Apr 2019 09:54:05 +0000 (11:54 +0200)
pdns/dnsdist-lua-inspection.cc

index 554afa0d6c160951672d24967a0b9eaa5633ca97..92fb413047bd689e91d7f480e8d39485b12ad3c1 100644 (file)
@@ -552,10 +552,38 @@ void setupLuaInspection()
 
   g_lua.writeFunction("showTCPStats", [] {
       setLuaNoSideEffect();
+      ostringstream ret;
       boost::format fmt("%-10d %-10d %-10d %-10d\n");
-      g_outputBuffer += (fmt % "Clients" % "MaxClients" % "Queued" % "MaxQueued").str();
-      g_outputBuffer += (fmt % g_tcpclientthreads->getThreadsCount() % g_maxTCPClientThreads % g_tcpclientthreads->getQueuedCount() % g_maxTCPQueuedConnections).str();
-      g_outputBuffer += "Query distribution mode is: " + std::string(g_useTCPSinglePipe ? "single queue" : "per-thread queues") + "\n";
+      ret << (fmt % "Clients" % "MaxClients" % "Queued" % "MaxQueued") << endl;
+      ret << (fmt % g_tcpclientthreads->getThreadsCount() % g_maxTCPClientThreads % g_tcpclientthreads->getQueuedCount() % g_maxTCPQueuedConnections) << endl;
+      ret <<endl;
+
+      ret << "Query distribution mode is: " << std::string(g_useTCPSinglePipe ? "single queue" : "per-thread queues") << endl;
+      ret << endl;
+
+      ret << "Frontends:" << endl;
+      fmt = boost::format("%-3d %-20.20s %-25d %-25d %-25d %-25d %-25d");
+      ret << (fmt % "#" % "Address" % "Died reading query" % "Died sending response" % "Gave up" % "Client timeouts" % "Downstream timeouts" ) << endl;
+
+      size_t counter = 0;
+      for(const auto& f : g_frontends) {
+        ret << (fmt % counter % f->local.toStringWithPort() % f->tcpDiedReadingQuery % f->tcpDiedSendingResponse % f->tcpGaveUp % f->tcpClientTimeouts % f->tcpDownstreamTimeouts) << endl;
+        ++counter;
+      }
+      ret << endl;
+
+      ret << "Backends:" << endl;
+      fmt = boost::format("%-3d %-20.20s %-20.20s %-25d %-25d %-25d %-25d %-25d");
+      ret << (fmt % "#" % "Name" % "Address" % "Died sending query" % "Died reading response" % "Gave up" % "Read timeouts" % "Write timeouts" ) << endl;
+
+      auto states = g_dstates.getLocal();
+      counter = 0;
+      for(const auto& s : *states) {
+        ret << (fmt % counter % s->name % s->remote.toStringWithPort() % s->tcpDiedSendingQuery % s->tcpDiedReadingResponse % s->tcpGaveUp % s->tcpReadTimeouts % s->tcpWriteTimeouts) << endl;
+        ++counter;
+      }
+
+      g_outputBuffer=ret.str();
     });
 
   g_lua.writeFunction("dumpStats", [] {