]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - pdns/statnode.hh
Merge pull request #7677 from rgacogne/dnsdist-logging-facility
[thirdparty/pdns.git] / pdns / statnode.hh
index 108a9d00d7004cb654c8e86bc509158d1729a912..ac8d78cb3035febf0d8446518c267a55bde5a4d2 100644 (file)
 class StatNode
 {
 public:
-  void submit(const DNSName& domain, int rcode, const ComboAddress& remote);
-  void submit(std::deque<std::string>& labels, const std::string& domain, int rcode, const ComboAddress& remote);
 
-  std::string name;
-  std::string fullname;
-  struct Stat 
+  struct Stat
   {
     Stat() : queries(0), noerrors(0), nxdomains(0), servfails(0), drops(0){}
-    int queries, noerrors, nxdomains, servfails, drops;
+    uint64_t queries, noerrors, nxdomains, servfails, drops;
 
     Stat& operator+=(const Stat& rhs) {
       queries+=rhs.queries;
@@ -45,20 +41,32 @@ public:
       servfails+=rhs.servfails;
       drops+=rhs.drops;
 
-      for(const remotes_t::value_type& rem :  rhs.remotes) {
-       remotes[rem.first]+=rem.second;
+      for(const remotes_t::value_type& rem : rhs.remotes) {
+        remotes[rem.first]+=rem.second;
       }
       return *this;
     }
-typedef std::map<ComboAddress,int,ComboAddress::addressOnlyLessThan> remotes_t;
+    typedef std::map<ComboAddress,int,ComboAddress::addressOnlyLessThan> remotes_t;
     remotes_t remotes;
   };
 
   Stat s;
-  Stat print(int depth=0, Stat newstat=Stat(), bool silent=false) const;
+  std::string name;
+  std::string fullname;
+  unsigned int labelsCount{0};
+
+  void submit(const DNSName& domain, int rcode, boost::optional<const ComboAddress&> remote);
+
+  Stat print(unsigned int depth=0, Stat newstat=Stat(), bool silent=false) const;
   typedef boost::function<void(const StatNode*, const Stat& selfstat, const Stat& childstat)> visitor_t;
-  void visit(visitor_t visitor, Stat& newstat, int depth=0) const;
+  void visit(visitor_t visitor, Stat& newstat, unsigned int depth=0) const;
+  bool empty() const
+  {
+    return children.empty() && s.remotes.empty();
+  }
   typedef std::map<std::string,StatNode, CIStringCompare> children_t;
   children_t children;
-  
+
+private:
+  void submit(std::vector<string>::const_iterator end, std::vector<string>::const_iterator begin, const std::string& domain, int rcode, boost::optional<const ComboAddress&> remote, unsigned int count);
 };