g_log<<Logger::Notice<<"stats: throttle map: "
<< broadcastAccFunction<uint64_t>(pleaseGetThrottleSize) <<", ns speeds: "
<< broadcastAccFunction<uint64_t>(pleaseGetNsSpeedsSize)<<", failed ns: "
- << broadcastAccFunction<uint64_t>(pleaseGetFailedServersSize)<<endl;
+ << broadcastAccFunction<uint64_t>(pleaseGetFailedServersSize)<<", ednsmap: "
+ <<broadcastAccFunction<uint64_t>(pleaseGetEDNSStatusesSize)<<endl;
g_log<<Logger::Notice<<"stats: outpacket/query ratio "<<(int)(SyncRes::s_outqueries*100.0/SyncRes::s_queries)<<"%";
g_log<<Logger::Notice<<", "<<(int)(SyncRes::s_throttledqueries*100.0/(SyncRes::s_outqueries+SyncRes::s_throttledqueries))<<"% throttled, "
<<SyncRes::s_nodelegated<<" no-delegation drops"<<endl;
SyncRes::pruneNSSpeeds(limit);
limit = now.tv_sec - SyncRes::s_serverdownthrottletime * 10;
SyncRes::pruneFailedServers(limit);
+ limit = now.tv_sec - 2*3600;
+ SyncRes::pruneEDNSStatuses(limit);
}
last_prune=time(0);
}
return new uint64_t(SyncRes::getFailedServersSize());
}
+uint64_t* pleaseGetEDNSStatusesSize()
+{
+ return new uint64_t(SyncRes::getEDNSStatusesSize());
+}
+
uint64_t* pleaseGetConcurrentQueries()
{
return new uint64_t(getMT() ? getMT()->numProcesses() : 0);
{
t_sstorage.ednsstatus.clear();
}
+ static void pruneEDNSStatuses(time_t cutoff)
+ {
+ for (auto it = t_sstorage.ednsstatus.begin(); it != t_sstorage.ednsstatus.end(); ) {
+ if (it->second.modeSetAt && it->second.modeSetAt <= cutoff) {
+ it = t_sstorage.ednsstatus.erase(it);
+ } else {
+ ++it;
+ }
+ }
+ }
static uint64_t getThrottledServersSize()
{
return t_sstorage.throttle.size();
std::shared_ptr<SyncRes::domainmap_t> parseAuthAndForwards();
uint64_t* pleaseGetNsSpeedsSize();
uint64_t* pleaseGetFailedServersSize();
+uint64_t* pleaseGetEDNSStatusesSize();
uint64_t* pleaseGetCacheSize();
uint64_t* pleaseGetNegCacheSize();
uint64_t* pleaseGetCacheHits();