/* don't account truncate actions for TCP queries, since they are not applied */
if (appliedPolicy.d_kind != DNSFilterEngine::PolicyKind::Truncate || !dc->d_tcp) {
++g_stats.policyResults[appliedPolicy.d_kind];
+ ++g_stats.policyHits[appliedPolicy.getName()];
}
if (sr.doLog() && appliedPolicy.d_type != DNSFilterEngine::PolicyType::None) {
for (size_t idx = 0; idx < 128; idx++) {
defaultAPIDisabledStats += ", ecs-v6-response-bits-" + std::to_string(idx + 1);
}
- std::string defaultDisabledStats = defaultAPIDisabledStats + ", cumul-answers, cumul-auth4answers, cumul-auth6answers";
+ std::string defaultDisabledStats = defaultAPIDisabledStats + ", cumul-answers, cumul-auth4answers, cumul-auth6answers, policy-hits";
::arg().set("stats-api-blacklist", "List of statistics that are disabled when retrieving the complete list of statistics via the API (deprecated)")=defaultAPIDisabledStats;
::arg().set("stats-carbon-blacklist", "List of statistics that are prevented from being exported via Carbon (deprecated)")=defaultDisabledStats;
{
const string pbasename = getPrometheusName(name);
StatsMap entries;
-
for (unsigned int n = 0; n < g_numThreads; ++n) {
uint64_t tm = doGetThreadCPUMsec(n);
std::string pname = pbasename + "{thread=" + std::to_string(n) + '}';
return entries;
}
+static StatsMap toRPZStatsMap(const string& name, const std::unordered_map<std::string, std::atomic<uint64_t>>& map)
+{
+ const string pbasename = getPrometheusName(name);
+ StatsMap entries;
+
+ for (const auto& entry: map) {
+ auto &key = entry.first;
+ auto count = entry.second.load();
+ std::string sname, pname;
+ if (key.empty()) {
+ sname = name + "-filter";
+ pname = pbasename + "{type=\"filter\"}";
+ } else {
+ sname = name + "-rpz-" + key;
+ pname = pbasename + "{type=\"rpz\",zone=\"" + entry.first + "\"}";
+ }
+ entries.emplace(make_pair(sname, StatsMapEntry{pname, std::to_string(count)}));
+ }
+ return entries;
+}
+
extern ResponseStats g_rs;
static void registerAllStats1()
addGetStat("cumul-auth6answers", []() {
return toStatsMap(g_stats.cumulativeAuth6Answers.getName(), g_stats.cumulativeAuth6Answers);
});
+ addGetStat("policy-hits", []() {
+ return toRPZStatsMap("policy-hits", g_stats.policyHits);
+ });
}
void registerAllStats()
/* don't account truncate actions for TCP queries, since they are not applied */
if (d_appliedPolicy.d_kind != DNSFilterEngine::PolicyKind::Truncate || !d_queryReceivedOverTCP) {
++g_stats.policyResults[d_appliedPolicy.d_kind];
+ ++g_stats.policyHits[d_appliedPolicy.getName()];
}
if (d_appliedPolicy.d_type != DNSFilterEngine::PolicyType::None) {
std::map<vState, std::atomic<uint64_t> > dnssecResults;
std::map<vState, std::atomic<uint64_t> > xdnssecResults;
std::map<DNSFilterEngine::PolicyKind, std::atomic<uint64_t> > policyResults;
+ std::unordered_map<std::string, std::atomic<uint64_t>> policyHits;
std::atomic<uint64_t> rebalancedQueries{0};
std::atomic<uint64_t> proxyProtocolInvalidCount{0};
std::atomic<uint64_t> nodLookupsDroppedOversize{0};