2 * This file is part of PowerDNS or dnsdist.
3 * Copyright -- PowerDNS.COM B.V. and its contributors
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
9 * In addition, for the avoidance of any doubt, permission is granted to
10 * link this program with OpenSSL and to (re)distribute the binaries
11 * produced as the result of such linking.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
36 uint64_t nxdomains{0};
37 uint64_t servfails{0};
41 using remotes_t = std::map<ComboAddress,int,ComboAddress::addressOnlyLessThan>;
44 Stat& operator+=(const Stat& rhs) {
45 queries += rhs.queries;
46 noerrors += rhs.noerrors;
47 nxdomains += rhs.nxdomains;
48 servfails += rhs.servfails;
53 for (const remotes_t::value_type& rem : rhs.remotes) {
54 remotes[rem.first] += rem.second;
60 using visitor_t = std::function<void(const StatNode*, const Stat& selfstat, const Stat& childstat)>;
61 using children_t = std::map<std::string, StatNode, CIStringCompare>;
66 uint8_t labelsCount{0};
68 void submit(const DNSName& domain, int rcode, unsigned int bytes, bool hit, const boost::optional<const ComboAddress&>& remote);
69 Stat print(unsigned int depth=0, Stat newstat=Stat(), bool silent=false) const;
70 void visit(const visitor_t& visitor, Stat& newstat, unsigned int depth = 0) const;
73 return children.empty() && s.remotes.empty();
78 void submit(std::vector<string>::const_iterator end, std::vector<string>::const_iterator begin, const std::string& domain, int rcode, unsigned int bytes, const boost::optional<const ComboAddress&>& remote, unsigned int count, bool hit);