]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Maintain blacklist inside StatBag. 7887/head
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 11 Jun 2019 06:56:03 +0000 (08:56 +0200)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 11 Jun 2019 06:56:03 +0000 (08:56 +0200)
pdns/dynhandler.cc
pdns/receiver.cc
pdns/statbag.cc
pdns/statbag.hh

index 7f4449cefd64ce1ece3e2b36d3f5f07dd707ea65..bef847764b4ee1c795d84978c33bff89276055ab 100644 (file)
@@ -84,14 +84,12 @@ string DLPingHandler(const vector<string>&parts, Utility::pid_t ppid)
 }
 
 string DLShowHandler(const vector<string>&parts, Utility::pid_t ppid) {
-  std::set<string> blacklist;
-  blacklist.insert("special-memory-usage");
   try {
     extern StatBag S;
     string ret("Wrong number of parameters");
     if (parts.size() == 2) {
       if (parts[1] == "*")
-        ret = S.directory(blacklist);
+        ret = S.directory();
       else
         ret = S.getValueStr(parts[1]);
     }
index bd0f7cf9b11d58a6511eac5a6b7a4d866312f3c8..e6686787b38ef9c19a265df5d66759525cf3e38c 100644 (file)
@@ -606,6 +606,8 @@ int main(int argc, char **argv)
   }
   
   declareStats();
+  S.blacklist("special-memory-usage");
+
   DLOG(g_log<<Logger::Warning<<"Verbose logging in effect"<<endl);
 
   showProductVersion();
index 697226e92b241dcc4c9ad61e531c312e0aa933b7..83af32c7517887cc8496b071c9f8b6ddadbfa689 100644 (file)
@@ -48,20 +48,20 @@ void StatBag::exists(const string &key)
     }
 }
 
-string StatBag::directory(const std::set<string>& skip)
+string StatBag::directory()
 {
   string dir;
   ostringstream o;
 
   for(const auto& i: d_stats) {
-    if (skip.find(i.first) != skip.end())
+    if (d_blacklist.find(i.first) != d_blacklist.end())
       continue;
     o<<i.first<<"="<<*(i.second)<<",";
   }
 
 
   for(const funcstats_t::value_type& val :  d_funcstats) {
-    if (skip.find(val.first) != skip.end())
+    if (d_blacklist.find(val.first) != d_blacklist.end())
       continue;
     o << val.first<<"="<<val.second(val.first)<<",";
   }
@@ -75,10 +75,14 @@ vector<string>StatBag::getEntries()
   vector<string> ret;
 
   for(const auto& i: d_stats) {
-      ret.push_back(i.first);
+    if (d_blacklist.find(i.first) != d_blacklist.end())
+      continue;
+    ret.push_back(i.first);
   }
 
   for(const funcstats_t::value_type& val :  d_funcstats) {
+    if (d_blacklist.find(val.first) != d_blacklist.end())
+      continue;
     ret.push_back(val.first);
   }
 
@@ -329,6 +333,10 @@ bool StatBag::ringExists(const string &name)
   return d_rings.count(name) || d_comborings.count(name) || d_dnsnameqtyperings.count(name);
 }
 
+void StatBag::blacklist(const string& str) {
+  d_blacklist.insert(str);
+}
+
 template class StatRing<std::string, CIStringCompare>;
 template class StatRing<SComboAddress>;
 template class StatRing<std::tuple<DNSName, QType> >;
index e1a3998649fcbbada5b3ea67e5ed8721c34be183..f36c211f636f886096f9a779a662c908c2f2cc6e 100644 (file)
@@ -71,6 +71,7 @@ class StatBag
   typedef map<string, func_t> funcstats_t;
   funcstats_t d_funcstats;
   bool d_doRings;
+  std::set<string> d_blacklist;
 
 public:
   StatBag(); //!< Naked constructor. You need to declare keys before this class becomes useful
@@ -120,7 +121,7 @@ public:
   void resizeRing(const string &name, unsigned int newsize);
   unsigned int getRingSize(const string &name);
 
-  string directory(const std::set<string>& skip); //!< Returns a list of all data stored
+  string directory(); //!< Returns a list of all data stored
   vector<string> getEntries(); //!< returns a vector with datums (items)
   string getDescrip(const string &item); //!< Returns the description of this datum/item
   void exists(const string &key); //!< call this function to throw an exception in case a key does not exist
@@ -132,6 +133,7 @@ public:
   AtomicCounter *getPointer(const string &key); //!< get a direct pointer to the value behind a key. Use this for high performance increments
   string getValueStr(const string &key); //!< read a value behind a key, and return it as a string
   string getValueStrZero(const string &key); //!< read a value behind a key, and return it as a string, and zero afterwards
+  void blacklist(const string &str);
 };
 
 inline void StatBag::deposit(const string &key, int value)