L<<Logger::Error<<"Chrooted to '"<<::arg()["chroot"]<<"'"<<endl;
}
#endif
-
- Utility::dropPrivs(newuid, newgid);
+ StatWebServer sws;
+ Utility::dropPrivs(newuid, newgid);
if(::arg().mustDo("recursor")){
DP=new DNSProxy(::arg()["recursor"]);
dl->go();
pthread_t qtid;
- StatWebServer sws;
+
if(::arg().mustDo("webserver"))
sws.go();
/*
PowerDNS Versatile Database Driven Nameserver
- Copyright (C) 2002-2007 PowerDNS.COM BV
+ Copyright (C) 2002-2010 PowerDNS.COM BV
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2
d_listenaddress=listenaddress;
d_port=port;
d_password=password;
+ d_server = 0; // on exception, this class becomes a NOOP later on
+ try {
+ d_server = new Server(d_port, d_listenaddress);
+ }
+ catch(SessionException &e) {
+ L<<Logger::Error<<"Fatal error in webserver: "<<e.reason<<endl;
+ }
}
void WebServer::go()
{
+ if(!d_server)
+ return;
try {
- Server *s=new Server(d_port, d_listenaddress);
-
Session *client;
pthread_t tid;
L<<Logger::Error<<"Launched webserver on "<<d_listenaddress<<":"<<d_port<<endl;
- while((client=s->accept())) {
+ while((client=d_server->accept())) {
pthread_create(&tid, 0 , &serveConnection, (void *)client);
}
}
using namespace std;
+class Server;
class WebServer
{
static map<string,HandlerFunction *>d_functions;
static void *d_that;
static string d_password;
+ Server* d_server;
};
#endif /* WEBSERVER_HH */
StatWebServer::StatWebServer()
{
d_start=time(0);
- d_min10=d_min5=d_min1=0;
+ d_min10=d_min5=d_min1=0;
+ d_ws = new WebServer(arg()["webserver-address"], arg().asNum("webserver-port"),arg()["webserver-password"]);
}
void StatWebServer::go()
void StatWebServer::launch()
{
try {
- WebServer ws(arg()["webserver-address"], arg().asNum("webserver-port"),arg()["webserver-password"]);
- ws.setCaller(this);
- ws.registerHandler("",&indexfunction);
- ws.go();
+
+ d_ws->setCaller(this);
+ d_ws->registerHandler("",&indexfunction);
+ d_ws->go();
}
catch(...) {
L<<Logger::Error<<"StatWebserver thread caught an exception, dying"<<endl;
double d_10, d_5, d_1, d_max;
};
+class WebServer;
class StatWebServer
{
double d_min10, d_min5, d_min1;
Ewma d_queries, d_cachehits, d_cachemisses;
Ewma d_qcachehits, d_qcachemisses;
+ WebServer *d_ws;
};
#endif