string DLQTypesHandler(const vector<string>&parts, Utility::pid_t ppid)
{
+ typedef map<uint16_t, uint64_t> qtypenums_t;
+ qtypenums_t qtypenums = g_rs.getQTypeResponseCounts();
ostringstream os;
- typedef map<uint16_t, uint64_t> qtmap;
- qtmap stats = g_rs.getQTypeResponseCounts();
- BOOST_FOREACH(qtmap::value_type &i, stats)
- {
- os<<QType(i.first).getName()<<"("<<i.first<<"):"<<i.second<<"; ";
+ boost::format fmt("%d\t%d\n");
+ BOOST_FOREACH(const qtypenums_t::value_type& val, qtypenums) {
+ os << (fmt %DNSRecordContent::NumberToType( val.first) % val.second).str();
+ }
+ return os.str();
+}
+
+string DLRSizesHandler(const vector<string>&parts, Utility::pid_t ppid)
+{
+ typedef map<uint16_t, uint64_t> respsizes_t;
+ respsizes_t respsizes = g_rs.getSizeResponseCounts();
+ ostringstream os;
+ boost::format fmt("%d\t%d\n");
+ BOOST_FOREACH(const respsizes_t::value_type& val, respsizes) {
+ os << (fmt % val.first % val.second).str();
}
- os<<endl;
return os.str();
}
+string DLRemotesHandler(const vector<string>&parts, Utility::pid_t ppid)
+{
+ extern StatBag S;
+ typedef vector<pair<string, unsigned int> > totals_t;
+ totals_t totals = S.getRing("remotes");
+ string ret;
+ boost::format fmt("%s\t%d\n");
+ BOOST_FOREACH(totals_t::value_type& val, totals) {
+ ret += (fmt % val.first % val.second).str();
+ }
+ return ret;
+}
+
string DLSettingsHandler(const vector<string>&parts, Utility::pid_t ppid)
{
static const char *whitelist[]={"query-logging",0};
string DLShowHandler(const vector<string>&parts, Utility::pid_t ppid);
string DLUptimeHandler(const vector<string>&parts, Utility::pid_t ppid);
string DLSettingsHandler(const vector<string>&parts, Utility::pid_t ppid);
+string DLRespSizeHandler(const vector<string>&parts, Utility::pid_t ppid);
string DLCCHandler(const vector<string>&parts, Utility::pid_t ppid);
string DLQTypesHandler(const vector<string>&parts, Utility::pid_t ppid);
+string DLRSizesHandler(const vector<string>&parts, Utility::pid_t ppid);
+string DLRemotesHandler(const vector<string>&parts, Utility::pid_t ppid);
string DLStatusHandler(const vector<string>&parts, Utility::pid_t ppid);
string DLNotifyHandler(const vector<string>&parts, Utility::pid_t ppid);
string DLNotifyHostHandler(const vector<string>&parts, Utility::pid_t ppid);
DynListener::registerFunc("PURGE",&DLPurgeHandler, "purge entries from packet cache", "[<record>]");
DynListener::registerFunc("CCOUNTS",&DLCCHandler, "get cache statistics");
DynListener::registerFunc("QTYPES", &DLQTypesHandler, "get QType statistics");
+ DynListener::registerFunc("RESPSIZES", &DLRSizesHandler, "get histogram of response sizes");
+ DynListener::registerFunc("REMOTES", &DLRemotesHandler, "get top remotes");
DynListener::registerFunc("SET",&DLSettingsHandler, "set config variables", "<var> <value>");
DynListener::registerFunc("RETRIEVE",&DLNotifyRetrieveHandler, "retrieve slave domain", "<domain>");
DynListener::registerFunc("CURRENT-CONFIG",&DLCurrentConfigHandler, "Retrieve the current configuration");
}
return ret;
}
+
+map<uint16_t, uint64_t> ResponseStats::getSizeResponseCounts()
+{
+ map<uint16_t, uint64_t> ret;
+ for(sizecounters_t::const_iterator iter = d_sizecounters.begin();
+ iter != d_sizecounters.end();
+ ++iter) {
+ ret[iter->first]=iter->second;
+ }
+ return ret;
+}
\ No newline at end of file