]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/statnode.hh
Merge pull request #3968 from zeha/api-regress-bindlocal
[thirdparty/pdns.git] / pdns / statnode.hh
1 #pragma once
2 #include "dnsname.hh"
3 #include <deque>
4 #include <map>
5 #include "iputils.hh"
6
7 class StatNode
8 {
9 public:
10 void submit(const DNSName& domain, int rcode, const ComboAddress& remote);
11 void submit(std::deque<std::string>& labels, const std::string& domain, int rcode, const ComboAddress& remote);
12
13 std::string name;
14 std::string fullname;
15 struct Stat
16 {
17 Stat() : queries(0), noerrors(0), nxdomains(0), servfails(0), drops(0){}
18 int queries, noerrors, nxdomains, servfails, drops;
19
20 Stat& operator+=(const Stat& rhs) {
21 queries+=rhs.queries;
22 noerrors+=rhs.noerrors;
23 nxdomains+=rhs.nxdomains;
24 servfails+=rhs.servfails;
25 drops+=rhs.drops;
26
27 for(const remotes_t::value_type& rem : rhs.remotes) {
28 remotes[rem.first]+=rem.second;
29 }
30 return *this;
31 }
32 typedef std::map<ComboAddress,int,ComboAddress::addressOnlyLessThan> remotes_t;
33 remotes_t remotes;
34 };
35
36 Stat s;
37 Stat print(int depth=0, Stat newstat=Stat(), bool silent=false) const;
38 typedef boost::function<void(const StatNode*, const Stat& selfstat, const Stat& childstat)> visitor_t;
39 void visit(visitor_t visitor, Stat& newstat, int depth=0) const;
40 typedef std::map<std::string,StatNode, CIStringCompare> children_t;
41 children_t children;
42
43 };