]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Constify remaining response stats methods
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 15 Apr 2021 09:54:45 +0000 (11:54 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 15 Apr 2021 10:04:19 +0000 (12:04 +0200)
pdns/responsestats-auth.cc
pdns/responsestats.cc
pdns/responsestats.hh

index 4caae74f42407f15ba3e986443847e3ef1ebbd20..833cd025a3cab4394f7c4c454adff2b547fd9351 100644 (file)
@@ -7,7 +7,7 @@ extern StatBag S;
  *  Function that creates all the stats
  *  when udpOrTCP is true, it is udp
  */
-void ResponseStats::submitResponse(DNSPacket &p, bool udpOrTCP, bool last) {
+void ResponseStats::submitResponse(DNSPacket &p, bool udpOrTCP, bool last) const {
   const string& buf=p.getString();
   static AtomicCounter &udpnumanswered=*S.getPointer("udp-answers");
   static AtomicCounter &udpnumanswered4=*S.getPointer("udp4-answers");
index 824ee60d661ecf644474246409b2c1aa4716e2fc..a41add263047972055b3113230561641ce26e3b7 100644 (file)
@@ -28,24 +28,24 @@ ResponseStats::ResponseStats() :
   d_sizecounters("SizeCounters", sizeBounds())
 {
   for (unsigned int n = 0; n < 65535; ++n) {
-    d_qtypecounters[n] = 0;
+    d_qtypecounters[n].value = 0;
   }
   for (unsigned int n = 0; n < 256; ++n) {
-    d_rcodecounters[n] = 0;
+    d_rcodecounters[n].value = 0;
   }
 }
 
 ResponseStats g_rs;
 
-void ResponseStats::submitResponse(uint16_t qtype, uint16_t respsize, uint8_t rcode, bool udpOrTCP)
+void ResponseStats::submitResponse(uint16_t qtype, uint16_t respsize, uint8_t rcode, bool udpOrTCP) const
 {
-  d_rcodecounters.at(rcode)++;
+  d_rcodecounters.at(rcode).value++;
   submitResponse(qtype, respsize, udpOrTCP);
 }
 
-void ResponseStats::submitResponse(uint16_t qtype, uint16_t respsize, bool udpOrTCP)
+void ResponseStats::submitResponse(uint16_t qtype, uint16_t respsize, bool udpOrTCP) const
 {
-  d_qtypecounters.at(qtype)++;
+  d_qtypecounters.at(qtype).value++;
   d_sizecounters(respsize);
 }
 
@@ -54,7 +54,7 @@ map<uint16_t, uint64_t> ResponseStats::getQTypeResponseCounts() const
   map<uint16_t, uint64_t> ret;
   uint64_t count;
   for (unsigned int i = 0; i < 65535; ++i) {
-    count = d_qtypecounters.at(i);
+    count = d_qtypecounters.at(i).value;
     if (count) {
       ret[i] = count;
     }
@@ -78,7 +78,7 @@ map<uint8_t, uint64_t> ResponseStats::getRCodeResponseCounts() const
   map<uint8_t, uint64_t> ret;
   uint64_t count;
   for (unsigned int i = 0; i < 256; ++i) {
-    count = d_rcodecounters.at(i);
+    count = d_rcodecounters.at(i).value;
     if (count) {
       ret[i] = count;
     }
index e9ace3528480953d6ef5cfbfcb67a1490b5dcd25..421c814cfc46225fc463d1022a8142ac74adb917 100644 (file)
@@ -31,17 +31,22 @@ class ResponseStats
 public:
   ResponseStats();
 
-  void submitResponse(DNSPacket& p, bool udpOrTCP, bool last = true);
-  void submitResponse(uint16_t qtype, uint16_t respsize, bool udpOrTCP);
-  void submitResponse(uint16_t qtype, uint16_t respsize, uint8_t rcode, bool udpOrTCP);
+  void submitResponse(DNSPacket& p, bool udpOrTCP, bool last = true) const;
+  void submitResponse(uint16_t qtype, uint16_t respsize, bool udpOrTCP) const;
+  void submitResponse(uint16_t qtype, uint16_t respsize, uint8_t rcode, bool udpOrTCP) const;
   map<uint16_t, uint64_t> getQTypeResponseCounts() const;
   map<uint16_t, uint64_t> getSizeResponseCounts() const;
   map<uint8_t, uint64_t> getRCodeResponseCounts() const;
   string getQTypeReport() const;
 
 private:
-  std::array<std::atomic<uint64_t>, 65535> d_qtypecounters;
-  std::array<std::atomic<uint64_t>, 256> d_rcodecounters;
+  struct Counter
+  {
+    mutable std::atomic<uint64_t> value;
+  };
+
+  std::array<Counter, 65535> d_qtypecounters;
+  std::array<Counter, 256> d_rcodecounters;
   pdns::AtomicHistogram<uint64_t> d_sizecounters;
 };