]> 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 26759fd2ce0ceee650b189897850c3049ab13f26..ac8d78cb3035febf0d8446518c267a55bde5a4d2 100644 (file)
@@ -29,10 +29,10 @@ class StatNode
 {
 public:
 
-  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;
@@ -41,8 +41,8 @@ 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;
     }
@@ -55,13 +55,18 @@ public:
   std::string fullname;
   unsigned int labelsCount{0};
 
-  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, unsigned int count);
+  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, 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);
 };