]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth: add metric for open TCP connections 8125/head
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Wed, 24 Jul 2019 16:48:33 +0000 (18:48 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Wed, 24 Jul 2019 17:51:22 +0000 (19:51 +0200)
docs/performance.rst
pdns/common_startup.cc
pdns/tcpreceiver.cc
pdns/tcpreceiver.hh
regression-tests.nobackend/counters/expected_result

index e31ac892f7b6df046a39bb5af8cef86824af2476..850e352b9e285d8c0a62fb542501f5e64dcaaf58 100644 (file)
@@ -212,6 +212,12 @@ meta-cache-size
 ^^^^^^^^^^^^^^^
 Number of entries in the metadata cache
 
+.. _stat-open-tcp-connections:
+
+open-tcp-connections
+~~~~~~~~~~~~~~~~~~~~
+Number of currently open TCP connections
+
 .. _stat-overload-drops:
 
 overload-drops
index 63a0d094f52028fdc3a7d90f489b15313cb9eb76..fa56dd687070de9adf5968d30b96acc371628e6c 100644 (file)
@@ -247,6 +247,11 @@ static uint64_t getSysUserTimeMsec(const std::string& str)
 
 }
 
+static uint64_t getTCPConnectionCount(const std::string& str)
+{
+  return TN->numTCPConnections();
+}
+
 static uint64_t getQCount(const std::string& str)
 try
 {
@@ -306,7 +311,8 @@ void declareStats(void)
   
   S.declare("tcp6-queries","Number of IPv6 TCP queries received");
   S.declare("tcp6-answers","Number of IPv6 answers sent out over TCP");
-    
+
+  S.declare("open-tcp-connections","Number of currently open TCP connections", getTCPConnectionCount);;
 
   S.declare("qsize-q","Number of questions waiting for database attention", getQCount);
 
index 0ea41bb88f43ff97cb59fabcefdc54f8e16f676e..c925766966087e01eb4a7de600049bd86a509010 100644 (file)
@@ -68,6 +68,7 @@ extern StatBag S;
 
 pthread_mutex_t TCPNameserver::s_plock = PTHREAD_MUTEX_INITIALIZER;
 Semaphore *TCPNameserver::d_connectionroom_sem;
+unsigned int TCPNameserver::d_maxTCPConnections = 0;
 PacketHandler *TCPNameserver::s_P; 
 NetmaskGroup TCPNameserver::d_ng;
 size_t TCPNameserver::d_maxTransactionsPerConn;
@@ -1195,6 +1196,7 @@ TCPNameserver::TCPNameserver()
 
 //  sem_init(&d_connectionroom_sem,0,::arg().asNum("max-tcp-connections"));
   d_connectionroom_sem = new Semaphore( ::arg().asNum( "max-tcp-connections" ));
+  d_maxTCPConnections = ::arg().asNum( "max-tcp-connections" );
   d_tid=0;
   vector<string>locals;
   stringtok(locals,::arg()["local-address"]," ,");
@@ -1387,3 +1389,9 @@ void TCPNameserver::thread()
 }
 
 
+unsigned int TCPNameserver::numTCPConnections()
+{
+  int room;
+  d_connectionroom_sem->getValue( &room);
+  return d_maxTCPConnections - room;
+}
index cfd6d3001678f40ec58f04e1a32c22ec1d3c599b..fd8b33c22f8a7d9daec064a505dd97b423f2a5b4 100644 (file)
@@ -47,6 +47,7 @@ public:
   TCPNameserver();
   ~TCPNameserver();
   void go();
+  unsigned int numTCPConnections();
 private:
 
   static void sendPacket(std::shared_ptr<DNSPacket> p, int outsock);
@@ -65,6 +66,7 @@ private:
   static PacketHandler *s_P;
   pthread_t d_tid;
   static Semaphore *d_connectionroom_sem;
+  static unsigned int d_maxTCPConnections;
   static NetmaskGroup d_ng;
   static size_t d_maxTransactionsPerConn;
   static size_t d_maxConnectionsPerClient;
index cf1ba2fd109a868d63a44052523e70781163be4e..7e73f4fb6546cbe9509ae31312a5d45868019a30 100644 (file)
@@ -11,6 +11,7 @@ dnsupdate-refused=0
 incoming-notifications=0
 key-cache-size=0
 meta-cache-size=3
+open-tcp-connections=0
 overload-drops=0
 packetcache-size=4
 qsize-q=0