#include "iputils.hh"
#include "logger.hh"
#include "arguments.hh"
+#include "lock.hh"
#include <boost/foreach.hpp>
void doCarbonDump(void*)
try
{
- if(arg()["carbon-server"].empty())
+ string hostname, carbonServer;
+
+ {
+ Lock l(&g_carbon_config_lock);
+ carbonServer=arg()["carbon-server"];
+ hostname=arg()["carbon-ourname"];
+ }
+
+ if(carbonServer.empty())
return;
RecursorControlParser rcp; // inits if needed
- ComboAddress remote(arg()["carbon-server"], 2003);
+ ComboAddress remote(carbonServer, 2003);
Socket s(remote.sin4.sin_family, SOCK_STREAM);
s.setNonBlocking();
ostringstream str;
time_t now=time(0);
- string hostname=arg()["carbon-ourname"];
+
if(hostname.empty()) {
char tmp[80];
memset(tmp, 0, sizeof(tmp));
#include "responsestats.hh"
#include "namespaces.hh"
+pthread_mutex_t g_carbon_config_lock=PTHREAD_MUTEX_INITIALIZER;
map<string, const uint32_t*> d_get32bitpointers;
map<string, const uint64_t*> d_get64bitpointers;
return "wiped "+lexical_cast<string>(count)+" records, "+lexical_cast<string>(countNeg)+" negative records\n";
}
+template<typename T>
+string doSetCarbonServer(T begin, T end)
+{
+ Lock l(&g_carbon_config_lock);
+ if(begin==end) {
+ ::arg().set("carbon-server").clear();
+ return "cleared carbon-server setting\n";
+ }
+ string ret;
+ ::arg().set("carbon-server")=*begin;
+ ret="set carbon-server to '"+::arg()["carbon-server"]+"'\n";
+ if(begin != end) {
+ ++begin;
+ ::arg().set("carbon-ourname")=*begin;
+ ret+="set carbon-ourname to '"+*begin+"'\n";
+ }
+ return ret;
+}
+
+
template<typename T>
string setMinimumTTL(T begin, T end)
{
"reload-lua-script [filename] (re)load Lua script\n"
"reload-zones reload all auth and forward zones\n"
"set-minimum-ttl value set mininum-ttl-override\n"
+"set-carbon-server set a carbon server for telemetry\n"
"trace-regex [regex] emit resolution trace for matching queries (empty regex to clear trace)\n"
"top-remotes show top remotes\n"
"unload-lua-script unload Lua script\n"
if(cmd=="reload-lua-script")
return doQueueReloadLuaScript(begin, end);
+ if(cmd=="set-carbon-server")
+ return doSetCarbonServer(begin, end);
+
if(cmd=="trace-regex")
return doTraceRegex(begin, end);