From 330ad8ed120d35ecaa76446fdd36796ac2fecdfb Mon Sep 17 00:00:00 2001 From: Seva Date: Wed, 29 May 2019 16:02:25 -0400 Subject: [PATCH] dhtproxy: pipe restinio logs to opendht logger --- include/opendht/dht_proxy_server.h | 35 ++++++++++++++++++++++++++++-- src/dht_proxy_server.cpp | 7 +++--- tools/dhtnode.cpp | 2 +- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/include/opendht/dht_proxy_server.h b/include/opendht/dht_proxy_server.h index ddc72174..1614fca7 100644 --- a/include/opendht/dht_proxy_server.h +++ b/include/opendht/dht_proxy_server.h @@ -38,10 +38,41 @@ #include #endif +class opendht_logger_t +{ + public: + opendht_logger_t(const dht::Logger &logger): + m_logger(logger) + {} + + template + void trace(Builder && msg_builder){ + m_logger.d("[restinio] %s", msg_builder().c_str()); + } + + template + void info(Builder && msg_builder){ + m_logger.d("[restinio] %s", msg_builder().c_str()); + } + + template + void warn(Builder && msg_builder){ + m_logger.w("[restinio] %s", msg_builder().c_str()); + } + + template + void error(Builder && msg_builder){ + m_logger.e("[restinio] %s", msg_builder().c_str()); + } + + private: + dht::Logger m_logger; +}; + using RestRouter = restinio::router::express_router_t<>; using RestRouterTraits = restinio::traits_t< restinio::asio_timer_manager_t, - restinio::single_threaded_ostream_logger_t, + opendht_logger_t, //restinio::single_threaded_ostream_logger_t, RestRouter>; using RequestStatus = restinio::request_handling_status_t; using ResponseByParts = restinio::chunked_output_t; @@ -70,7 +101,7 @@ public: * @note if the server fails to start (if port is already used or reserved), * it will fails silently */ - DhtProxyServer(std::shared_ptr dht, in_port_t port = 8000, const std::string& pushServer = ""); + DhtProxyServer(std::shared_ptr dht, in_port_t port = 8000, const std::string& pushServer = "", const Logger& logger = {}); virtual ~DhtProxyServer(); DhtProxyServer(const DhtProxyServer& other) = delete; diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp index 7981a3f7..d04675e2 100644 --- a/src/dht_proxy_server.cpp +++ b/src/dht_proxy_server.cpp @@ -51,8 +51,8 @@ constexpr const std::chrono::minutes PRINT_STATS_PERIOD {2}; constexpr const size_t IO_THREADS_MAX {64}; -DhtProxyServer::DhtProxyServer(std::shared_ptr dht, in_port_t port , const std::string& pushServer) -: dht_(dht), threadPool_(new ThreadPool(IO_THREADS_MAX)), pushServer_(pushServer) +DhtProxyServer::DhtProxyServer(std::shared_ptr dht, in_port_t port , const std::string& pushServer, const Logger &logger) +: dht_(dht), threadPool_(new ThreadPool(IO_THREADS_MAX)), pushServer_(pushServer) { if (not dht_) throw std::invalid_argument("A DHT instance must be provided"); @@ -69,11 +69,12 @@ DhtProxyServer::DhtProxyServer(std::shared_ptr dht, in_port_t port , jsonBuilder_["commentStyle"] = "None"; jsonBuilder_["indentation"] = ""; - server_thread = std::thread([this, port](){ + server_thread = std::thread([this, port, &logger](){ using namespace std::chrono; auto maxThreads = std::thread::hardware_concurrency() - 1; auto restThreads = maxThreads > 1 ? maxThreads : 1; auto settings = restinio::on_thread_pool(restThreads); + settings.logger(logger); settings.port(port); settings.protocol(restinio::asio_ns::ip::tcp::v6()); settings.request_handler(this->createRestRouter()); diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index 14570e1a..e70473a1 100644 --- a/tools/dhtnode.cpp +++ b/tools/dhtnode.cpp @@ -551,7 +551,7 @@ main(int argc, char **argv) #endif if (params.proxyserver != 0) { #ifdef OPENDHT_PROXY_SERVER - proxies.emplace(params.proxyserver, std::unique_ptr(new DhtProxyServer(node, params.proxyserver, params.pushserver))); + proxies.emplace(params.proxyserver, std::unique_ptr(new DhtProxyServer(node, params.proxyserver, params.pushserver, *context.logger))); #else std::cerr << "DHT proxy server requested but OpenDHT built without proxy server support." << std::endl; exit(EXIT_FAILURE);