]> granicus.if.org Git - pdns/commitdiff
merge ahu's work
authorPeter van Dijk <peter.van.dijk@netherlabs.nl>
Thu, 8 Aug 2013 13:43:30 +0000 (15:43 +0200)
committerPeter van Dijk <peter.van.dijk@netherlabs.nl>
Thu, 8 Aug 2013 14:36:41 +0000 (16:36 +0200)
pdns/dynhandler.cc
pdns/dynhandler.hh
pdns/receiver.cc
pdns/responsestats.cc

index e77816b6780ce296625d646ddbf6670453b8efba..45b4e2cea2677c5b8410f3fa27270709edef7eaf 100644 (file)
@@ -168,17 +168,41 @@ string DLCCHandler(const vector<string>&parts, Utility::pid_t ppid)
 
 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};
index d6fd1b28bf147598e102a5d1f3f2063dd1eaa60f..9b284090e09f1b8814d37ca93debfde51bb755cb 100644 (file)
@@ -42,8 +42,11 @@ string DLPingHandler(const vector<string>&parts, Utility::pid_t ppid);
 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);
index a4f79fdb233ab062ff1a0541351a2c2cfee83811..b5cb44d65ae7c867065aba9785a43adea5df035e 100644 (file)
@@ -553,6 +553,8 @@ int main(int argc, char **argv)
     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");
index 90d05beb0e8e41c65c6f60ec47e2f1c5b371ff6d..2d9c287a730a44e261de0a852b03547f0987afbc 100644 (file)
@@ -42,3 +42,14 @@ map<uint16_t, uint64_t> ResponseStats::getQTypeResponseCounts()
   }
   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