diff --git a/.clang-format b/.clang-format index e1c0d55..c16a5d8 100644 --- a/.clang-format +++ b/.clang-format @@ -66,16 +66,18 @@ IncludeCategories: Priority: 3 - Regex: '^<(grpc|grpc\+\+|google/protobuf)/.*\.(h|hpp)' Priority: 4 + - Regex: '^' Priority: 5 + - Regex: '^<(chrono|condition_variable)>' + Priority: 6 - Regex: '^' Priority: 5 - Regex: '^<.*' Priority: 6 - - Regex: '^<(chrono|condition_variable)>' - Priority: 6 - - Regex: '^(<|")(gtest)/.*\.(h|hpp)' - Priority: 7 - Regex: '.*' Priority: 8 IncludeIsMainRegex: '([-_](test|unittest))?$' diff --git a/.gitmodules b/.gitmodules index 7e1f06d..c01528b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,7 @@ [submodule "externals/sanitizers-cmake"] path = externals/sanitizers-cmake url = https://github.com/arsenm/sanitizers-cmake.git +[submodule "externals/spdlog"] + path = externals/spdlog + url = https://github.com/gabime/spdlog.git + branch = v1.2.1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 8985f2b..12ea0d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,8 +83,10 @@ find_package(GRPC) message(STATUS "Protoc path: " ${Protobuf_PROTOC_EXECUTABLE}) message(STATUS "GRPC plugin path: " ${GRPC_CPP_PLUGIN}) +# Import spdlog +add_subdirectory(externals/spdlog) -# Disable memory locks because of race conditions. +# Disable memory locks because of race conditions. set(ENABLE_MEMORY_LOCK OFF CACHE BOOL "Disable Memory Lock" FORCE) add_subdirectory(third_party/crypto/src) diff --git a/externals/spdlog b/externals/spdlog new file mode 160000 index 0000000..10e809c --- /dev/null +++ b/externals/spdlog @@ -0,0 +1 @@ +Subproject commit 10e809cf644d55e5bd7d66d02e2604e2ddd7fb48 diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 9bffc99..3de9d35 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -50,6 +50,7 @@ target_link_libraries( OpenSSE::crypto OpenSSE::dbparser ${ROCKSDB_LIBRARIES} + spdlog::spdlog ) set(PROTOS @@ -117,4 +118,5 @@ target_link_libraries( OpenSSE::schemes gRPC::grpc++ protobuf::libprotobuf + spdlog::spdlog ) diff --git a/lib/diana/client_runner.cpp b/lib/diana/client_runner.cpp index 66a0d4c..2f722d5 100644 --- a/lib/diana/client_runner.cpp +++ b/lib/diana/client_runner.cpp @@ -36,7 +36,6 @@ #include #include - #include #include #include @@ -219,13 +218,10 @@ bool DianaClientRunner::send_setup() const grpc::Status status = stub_->setup(&context, message, &e); if (status.ok()) { - logger::log(logger::LoggerSeverity::TRACE) - << "Setup succeeded." << std::endl; + logger::logger()->info("Server setup succeeded."); } else { - logger::log(logger::LoggerSeverity::ERROR) - << "Setup failed: " << std::endl; - logger::log(logger::LoggerSeverity::ERROR) - << status.error_message() << std::endl; + logger::logger()->error("Server setup failed: \n" + + status.error_message()); return false; } @@ -245,8 +241,7 @@ std::list DianaClientRunner::search( const std::string& keyword, const std::function& receive_callback) const { - logger::log(logger::LoggerSeverity::TRACE) - << "Search " << keyword << std::endl; + logger::logger()->trace("Searching keyword: " + keyword); grpc::ClientContext context; SearchRequestMessage message; @@ -264,9 +259,6 @@ std::list DianaClientRunner::search( while (reader->Read(&reply)) { - // logger::log(logger::LoggerSeverity::TRACE) << "New result - // received: " - // << std::dec << reply.result() << std::endl; results.push_back(reply.result()); if (receive_callback != nullptr) { @@ -275,13 +267,9 @@ std::list DianaClientRunner::search( } grpc::Status status = reader->Finish(); if (status.ok()) { - logger::log(logger::LoggerSeverity::TRACE) - << "Search succeeded." << std::endl; + logger::logger()->trace("Search succeeded."); } else { - logger::log(logger::LoggerSeverity::ERROR) - << "Search failed:" << std::endl; - logger::log(logger::LoggerSeverity::ERROR) - << status.error_message() << std::endl; + logger::logger()->error("Search failed: \n" + status.error_message()); } return results; @@ -303,13 +291,10 @@ void DianaClientRunner::insert(const std::string& keyword, uint64_t index) grpc::Status status = stub_->insert(&context, message, &e); if (status.ok()) { - logger::log(logger::LoggerSeverity::TRACE) - << "Update succeeded." << std::endl; + logger::logger()->trace("Update succeeded."); } else { - logger::log(logger::LoggerSeverity::ERROR) - << "Update failed:" << std::endl; - logger::log(logger::LoggerSeverity::ERROR) - << status.error_message() << std::endl; + logger::logger()->error("Update failed:\n" + + status.error_message()); } } } @@ -326,8 +311,7 @@ void DianaClientRunner::insert_in_session(const std::string& keyword, bulk_update_state_.mtx.lock(); if (!bulk_update_state_.writer->Write(message)) { - logger::log(logger::LoggerSeverity::ERROR) - << "Update session: broken stream." << std::endl; + logger::logger()->error("Update session stopped: broken stream."); } bulk_update_state_.mtx.unlock(); } @@ -347,8 +331,7 @@ void DianaClientRunner::insert_in_session( for (auto& it : message_list) { if (!bulk_update_state_.writer->Write(request_to_message(it))) { - logger::log(logger::LoggerSeverity::ERROR) - << "Update session: broken stream." << std::endl; + logger::logger()->error("Update session stopped: broken stream."); break; } } @@ -358,9 +341,8 @@ void DianaClientRunner::insert_in_session( void DianaClientRunner::start_update_session() { if (bulk_update_state_.writer) { - logger::log(logger::LoggerSeverity::WARNING) - << "Invalid client state: the bulk update session is already up" - << std::endl; + logger::logger()->warn( + "Invalid client state: the bulk update session is already up"); return; } @@ -369,16 +351,14 @@ void DianaClientRunner::start_update_session() bulk_update_state_.context.get(), &(bulk_update_state_.response)); bulk_update_state_.is_up = true; - logger::log(logger::LoggerSeverity::TRACE) - << "Update session started." << std::endl; + logger::logger()->trace("Update session started."); } void DianaClientRunner::end_update_session() { if (!bulk_update_state_.writer) { - logger::log(logger::LoggerSeverity::WARNING) - << "Invalid client state: the bulk update session is not up" - << std::endl; + logger::logger()->warn( + "Invalid client state: the bulk update session is not up"); return; } @@ -386,17 +366,16 @@ void DianaClientRunner::end_update_session() ::grpc::Status status = bulk_update_state_.writer->Finish(); if (!status.ok()) { - logger::log(logger::LoggerSeverity::ERROR) - << "Status not OK at the end of update sessions. Status: " - << status.error_message() << std::endl; + logger::logger()->error( + "Status not OK at the end of update sessions. Status: \n" + + status.error_message()); } bulk_update_state_.is_up = false; bulk_update_state_.context.reset(); bulk_update_state_.writer.reset(); - logger::log(logger::LoggerSeverity::TRACE) - << "Update session terminated." << std::endl; + logger::logger()->trace("Update session terminated."); } @@ -427,9 +406,8 @@ bool DianaClientRunner::load_inverted_index(const std::string& path) counter++; if ((counter % 100) == 0) { - logger::log(sse::logger::LoggerSeverity::INFO) - << "\rLoading: " << counter << " keywords processed" - << std::flush; + logger::logger()->info("Loading: {} keywords processed", + counter); } }; pool.enqueue(work, kw, docs); @@ -443,16 +421,14 @@ bool DianaClientRunner::load_inverted_index(const std::string& path) parser.parse(); pool.join(); - logger::log(sse::logger::LoggerSeverity::INFO) - << "\rLoading: " << counter << " keywords processed" << std::endl; + logger::logger()->info("Loading: {} keywords processed", counter); end_update_session(); return true; } catch (std::exception& e) { - logger::log(logger::LoggerSeverity::ERROR) - << "\nFailed to load file " << path << " : " << e.what() - << std::endl; + logger::logger()->error("Failed to load file " + path + ": \n" + + e.what()); return false; } return false; diff --git a/lib/diana/server_runner.cpp b/lib/diana/server_runner.cpp index 6f5d8c4..9b04a48 100644 --- a/lib/diana/server_runner.cpp +++ b/lib/diana/server_runner.cpp @@ -78,13 +78,12 @@ grpc::Status DianaImpl::setup(__attribute__((unused)) __attribute__((unused)) google::protobuf::Empty* e) { - logger::log(logger::LoggerSeverity::TRACE) << "Setup!" << std::endl; + logger::logger()->trace("Start server setup"); if (server_) { // problem, the server is already set up - logger::log(logger::LoggerSeverity::ERROR) - << "Info: server received a setup message but is already set up" - << std::endl; + logger::logger()->error( + "Info: server received a setup message but is already set up"); return grpc::Status(grpc::FAILED_PRECONDITION, "The server was already set up"); @@ -94,18 +93,16 @@ grpc::Status DianaImpl::setup(__attribute__((unused)) // there if (utility::exists(storage_path_)) { - logger::log(logger::LoggerSeverity::ERROR) - << "Error: Unable to create the server's content directory" - << std::endl; + logger::logger()->error( + "Error: Unable to create the server's content directory"); return grpc::Status(grpc::ALREADY_EXISTS, "Unable to create the server's content directory"); } if (!utility::create_directory(storage_path_, static_cast(0700))) { - logger::log(logger::LoggerSeverity::ERROR) - << "Error: Unable to create the server's content directory" - << std::endl; + logger::logger()->error( + "Error: Unable to create the server's content directory"); return grpc::Status(grpc::PERMISSION_DENIED, "Unable to create the server's content directory"); @@ -118,57 +115,22 @@ grpc::Status DianaImpl::setup(__attribute__((unused)) std::string pairs_map_path = storage_path_ + "/" + pairs_map_file; try { - logger::log(logger::LoggerSeverity::INFO) << "Seting up" << std::endl; + logger::logger()->info("Setting up ..."); server_.reset(new DianaServer(pairs_map_path)); } catch (std::exception& e) { - logger::log(logger::LoggerSeverity::ERROR) - << "Error when setting up the server's core" << std::endl; + logger::logger()->error("Error when setting up the server's core: \n" + + std::string(e.what())); server_.reset(); return grpc::Status(grpc::FAILED_PRECONDITION, "Unable to create the server's core."); } - logger::log(logger::LoggerSeverity::TRACE) - << "Successful setup" << std::endl; + logger::logger()->trace("Successful setup"); return grpc::Status::OK; } -#define PRINT_BENCH_SEARCH(t, c) \ - ("SEARCH: " \ - + (((c) != 0) ? std::to_string((t) / (c)) + " ms/pair, " \ - + std::to_string((c)) + " pairs" \ - : std::to_string((t)) + " ms, no pair found")) - -//#define PRINT_BENCH_SEARCH_PAR_RPC(t,c) \ - //"Search: " + (((c) != 0) ? std::to_string((t)/(c)) + " ms/pair (with RPC), " + std::to_string((c)) + " pairs" : \ - //std::to_string((t)) + " ms, no pair found" ) -// -//#define PRINT_BENCH_SEARCH_PAR_NORPC(t,c) \ - //"Search: " + (((c) != 0) ? std::to_string((t)/(c)) + " ms/pair (without RPC), -//" + std::to_string((c)) + " pairs" : \ std::to_string((t)) + " ms, no pair -// found" ) -// - -//#define PRINT_BENCH_SEARCH_PAR_RPC(t,c) \ - //"Search (with PRC): " + std::to_string((c)) + " " + (((c) != 0) ? std::to_string((t)/(c)) + " ms/pair" : \ - //std::to_string((t)) + " ms, no pair found" ) -// -//#define PRINT_BENCH_SEARCH_PAR_NORPC(t,c) \ - //"Search: " + (((c) != 0) ? std::to_string((t)/(c)) + " ms/pair (without RPC), -//" + std::to_string((c)) + " pairs" : \ std::to_string((t)) + " ms, no pair -// found" ) - -#define PRINT_BENCH_SEARCH_PAR_RPC(t, c) \ - std::to_string((c)) + " \t\t " \ - + (((c) != 0) ? std::to_string((t) / (c)) : std::to_string((t))) - -#define PRINT_BENCH_SEARCH_PAR_NORPC(t, c) \ - std::to_string((c)) + " \t\t " \ - + (((c) != 0) ? std::to_string((t) / (c)) : std::to_string((t))) - - grpc::Status DianaImpl::search(grpc::ServerContext* context, const SearchRequestMessage* mes, grpc::ServerWriter* writer) @@ -190,42 +152,22 @@ grpc::Status DianaImpl::sync_search(__attribute__((unused)) "The server is not set up"); } - logger::log(logger::LoggerSeverity::TRACE) << "Searching ..." << std::endl; - // std::list res_list; + logger::logger()->trace("Start searching keyword ..."); SearchRequest req = message_to_request(mes); std::vector res_list(req.add_count); - logger::log(logger::LoggerSeverity::TRACE) - << req.add_count << " expected matches" << std::endl; + logger::logger()->trace("{} expected matches", req.add_count); if (req.add_count == 0) { - logger::log(logger::LoggerSeverity::INFO) - << "Empty request (no expected match)" << std::endl; + logger::logger()->info("Empty request (no expected match)"); } else { - // BENCHMARK_Q((res_list = - // server_->search(message_to_request(mes))),res_list.size(), - // PRINT_BENCH_SEARCH_PAR_NORPC) BENCHMARK_Q((res_list = - // server_->search_parallel(message_to_request(mes),4,4)),res_list.size(), - // PRINT_BENCH_SEARCH_PAR_NORPC) - // BENCHMARK_Q((res_list = - // server_->search_simple_parallel(message_to_request(mes),8)),res_list.size(), - // PRINT_BENCH_SEARCH_PAR_NORPC) - - - BENCHMARK_Q((server_->search_simple_parallel(req, 8, res_list)), - res_list.size(), - PRINT_BENCH_SEARCH_PAR_NORPC) - - - // BENCHMARK_Q((res_list = - // server_->search_parallel(message_to_request(mes),2)),res_list.size(), - // PRINT_BENCH_SEARCH_PAR_NORPC) - // BENCHMARK_Q((res_list = - // server_->search_parallel_light(message_to_request(mes),3)),res_list.size(), - // PRINT_BENCH_SEARCH_PAR_NORPC) BENCHMARK_SIMPLE("\n\n",{;}) - + { + SearchBenchmark bench("Diana synchronous search"); + server_->search_simple_parallel(req, 8, res_list); + bench.set_count(res_list.size()); + } for (auto& i : res_list) { SearchReply reply; reply.set_result(static_cast(i)); @@ -233,7 +175,7 @@ grpc::Status DianaImpl::sync_search(__attribute__((unused)) writer->Write(reply); } } - logger::log(logger::LoggerSeverity::TRACE) << "Done searching" << std::endl; + logger::logger()->trace("Done searching"); return grpc::Status::OK; @@ -251,7 +193,7 @@ grpc::Status DianaImpl::async_search(__attribute__((unused)) "The server is not set up"); } - logger::log(logger::LoggerSeverity::TRACE) << "Searching ..."; + logger::logger()->trace("Start searching keyword..."); std::atomic_uint res_size(0); @@ -270,62 +212,27 @@ grpc::Status DianaImpl::async_search(__attribute__((unused)) auto req = message_to_request(mes); - if (mes->add_count() >= 40) { // run the search algorithm in parallel only - // if there are more than 2 results - - // BENCHMARK_Q((server_->search_parallel(message_to_request(mes), - // post_callback, 8, 8)),res_size, - // PRINT_BENCH_SEARCH_PAR_RPC) - BENCHMARK_Q( - (server_->search_simple_parallel( - req, post_callback, std::thread::hardware_concurrency())), - res_size, - PRINT_BENCH_SEARCH_PAR_RPC) - - // BENCHMARK_Q((res_list = - // server_->search_simple_parallel(message_to_request(mes),8)),res_list.size(), - // PRINT_BENCH_SEARCH_PAR_NORPC) - - // BENCHMARK_Q((server_->search_simple_parallel(message_to_request(mes), - // post_callback, std::thread::hardware_concurrency())), - // PRINT_BENCH_SEARCH_PAR_RPC) - - - // BENCHMARK_Q((server_->search_parallel_callback(message_to_request(mes), - // post_callback, std::thread::hardware_concurrency(), - // 8,1)),res_size, PRINT_BENCH_SEARCH_PAR_RPC) - // // - // BENCHMARK_Q((server_->search_parallel_light_callback(message_to_request(mes), - // post_callback, - // std::thread::hardware_concurrency())),res_size, - // PRINT_BENCH_SEARCH_PAR_RPC) - // // - // BENCHMARK_Q((server_->search_parallel_light_callback(message_to_request(mes), - // post_callback, 10)),res_size, - // PRINT_BENCH_SEARCH_PAR_RPC) - } else if (mes->add_count() >= 2) { - // BENCHMARK_Q((server_->search_parallel(message_to_request(mes), - // post_callback, 8, 8)),res_size, - // PRINT_BENCH_SEARCH_PAR_RPC) - - BENCHMARK_Q( - (server_->search_simple_parallel( - req, post_callback, std::thread::hardware_concurrency())), - res_size, - PRINT_BENCH_SEARCH_PAR_RPC) - - // BENCHMARK_Q((server_->search_parallel_light_callback(message_to_request(mes), - // post_callback, - // std::thread::hardware_concurrency())),res_size, - // PRINT_BENCH_SEARCH_PAR_RPC) - } else { - BENCHMARK_Q((server_->search(req, post_callback)), - res_size, - PRINT_BENCH_SEARCH_PAR_RPC) - } + { + SearchBenchmark bench("Diana asynchronous search"); + + if (mes->add_count() >= 40) { // run the search algorithm in parallel + // only if there are more than 2 results + + server_->search_simple_parallel( + req, post_callback, std::thread::hardware_concurrency()); + + } else if (mes->add_count() >= 2) { + server_->search_simple_parallel( + req, post_callback, std::thread::hardware_concurrency()); + + } else { + server_->search(req, post_callback); + } + bench.set_count(res_size); + } - logger::log(logger::LoggerSeverity::TRACE) << " done" << std::endl; + logger::logger()->trace("Done searching"); return grpc::Status::OK; @@ -346,11 +253,11 @@ grpc::Status DianaImpl::insert(__attribute__((unused)) "The server is not set up"); } - logger::log(logger::LoggerSeverity::TRACE) << "Updating ..." << std::endl; + logger::logger()->trace("Updating ..."); server_->insert(message_to_request(mes)); - logger::log(logger::LoggerSeverity::TRACE) << " done" << std::endl; + logger::logger()->trace("Update done"); return grpc::Status::OK; } @@ -366,8 +273,7 @@ grpc::Status DianaImpl::bulk_insert( "The server is not set up"); } - logger::log(logger::LoggerSeverity::TRACE) - << "Updating (bulk)..." << std::endl; + logger::logger()->trace("Updating (bulk)..."); UpdateRequestMessage mes; @@ -375,8 +281,7 @@ grpc::Status DianaImpl::bulk_insert( server_->insert(message_to_request(&mes)); } - logger::log(logger::LoggerSeverity::TRACE) - << "Updating (bulk)... done" << std::endl; + logger::logger()->trace("Updating (bulk)... done"); flush_server_storage(); @@ -398,13 +303,11 @@ void DianaImpl::set_search_asynchronously(bool flag) void DianaImpl::flush_server_storage() { if (server_) { - logger::log(logger::LoggerSeverity::TRACE) - << "Flush server storage..." << std::endl; + logger::logger()->trace("Flush server storage..."); server_->flush_edb(); - logger::log(logger::LoggerSeverity::TRACE) - << "Flush server storage... done" << std::endl; + logger::logger()->trace("Flush server storage... done"); } } diff --git a/lib/include/sse/runners/diana/client_runner.hpp b/lib/include/sse/runners/diana/client_runner.hpp index dc2800b..1368100 100644 --- a/lib/include/sse/runners/diana/client_runner.hpp +++ b/lib/include/sse/runners/diana/client_runner.hpp @@ -27,9 +27,8 @@ #include #include -#include - #include +#include #include #include #include diff --git a/lib/include/sse/runners/sophos/sophos_client_runner.hpp b/lib/include/sse/runners/sophos/sophos_client_runner.hpp index 856342f..44be8b2 100644 --- a/lib/include/sse/runners/sophos/sophos_client_runner.hpp +++ b/lib/include/sse/runners/sophos/sophos_client_runner.hpp @@ -27,9 +27,8 @@ #include #include -#include - #include +#include #include #include #include diff --git a/lib/include/sse/schemes/diana/diana_client.hpp b/lib/include/sse/schemes/diana/diana_client.hpp index 6e8e767..60990d0 100644 --- a/lib/include/sse/schemes/diana/diana_client.hpp +++ b/lib/include/sse/schemes/diana/diana_client.hpp @@ -144,11 +144,9 @@ SearchRequest DianaClient::search_request(const std::string& keyword, if (!found) { if (log_not_found) { - logger::log(logger::LoggerSeverity::INFO) - << "No matching counter found for keyword " - << utility::hex_string( - std::string(kw_index.begin(), kw_index.end())) - << std::endl; + logger::logger()->info("No matching counter found for keyword " + + utility::hex_string(std::string( + kw_index.begin(), kw_index.end()))); } } else { req.add_count = kw_counter + 1; @@ -191,21 +189,14 @@ UpdateRequest DianaClient::insertion_request(const std::string& keyword, st = TokenTree::derive_node(std::move(root), kw_counter, kTreeDepth); - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "New ST " << utility::hex_string(st) << std::endl; - } + logger::logger()->debug("New Search Token " + utility::hex_string(st)); gen_update_token_mask(st, req.token, mask); req.index = xor_mask(index, mask); - // if (logger::severity() <= logger::LoggerSeverity::DBG) { - // logger::log(logger::LoggerSeverity::DBG) << "Update - // Request: (" << utility::hex_string(ut) << ", " << std::hex - // << req.index << ")" << std::endl; - // } - + logger::logger()->debug("Update Request: (" + utility::hex_string(req.token) + + ", " + utility::hex_string(req.index) + ")"); return req; } @@ -239,10 +230,7 @@ std::list> DianaClient::bulk_insertion_request( st = TokenTree::derive_node(std::move(root), kw_counter, kTreeDepth); - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "New ST " << utility::hex_string(st) << std::endl; - } + logger::logger()->debug("New Search Token " + utility::hex_string(st)); gen_update_token_mask(st, req.token, mask); diff --git a/lib/include/sse/schemes/diana/diana_server.hpp b/lib/include/sse/schemes/diana/diana_server.hpp index d53fa98..9e5adcc 100644 --- a/lib/include/sse/schemes/diana/diana_server.hpp +++ b/lib/include/sse/schemes/diana/diana_server.hpp @@ -113,37 +113,28 @@ bool DianaServer::get_unmask(uint8_t* key, update_token_type ut; index_type mask; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Derived leaf token: " - << utility::hex_string(std::string( - reinterpret_cast(key), kSearchTokenKeySize)) - << std::endl; - } + logger::logger()->debug( + "Derived leaf token: " + + utility::hex_string(std::string(reinterpret_cast(key), + kSearchTokenKeySize))); gen_update_token_mask(key, ut, mask); - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Derived token : " << utility::hex_string(ut) << std::endl; - logger::log(logger::LoggerSeverity::DBG) - << "Mask : " << utility::hex_string(mask) << std::endl; - } + logger::logger()->debug("Derived token : " + utility::hex_string(ut) + + " Mask : " + utility::hex_string(mask)); bool found = retrieve_entry(ut, index, delete_key); if (found) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Found: " << utility::hex_string(index) << std::endl; - } + logger::logger()->debug("Found: " + utility::hex_string(index)); index = xor_mask(index, mask); } else { /* LCOV_EXCL_START */ - logger::log(logger::LoggerSeverity::ERROR) - << "We were supposed to find something!" << std::endl; + logger::logger()->error( + "We were supposed to find an entry. Accessed key: " + + utility::hex_string(ut)); /* LCOV_EXCL_STOP */ } @@ -170,12 +161,9 @@ void DianaServer::search( const std::function& post_callback, bool delete_results) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Expected matches: " << req.add_count << std::endl; - logger::log(logger::LoggerSeverity::DBG) - << "Number of search nodes: " << req.token_list.size() << std::endl; - } + logger::logger()->debug("Search: {} expected matches and {} search tokens", + req.add_count, + req.token_list.size()); crypto::Prf derivation_prf( crypto::Key(req.kw_token.data())); @@ -189,14 +177,10 @@ void DianaServer::search( }; for (auto& it_token : req.token_list) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Search token key: " << utility::hex_string(it_token.first) - << std::endl; - logger::log(logger::LoggerSeverity::DBG) - << "Search token depth: " << std::dec - << static_cast(it_token.second) << std::endl; - } + logger::logger()->debug( + "Search token key: " + utility::hex_string(it_token.first) + + "; Token depth: " + + std::to_string(static_cast(it_token.second))); TokenTree::derive_all_leaves( it_token.first, it_token.second, get_callback); @@ -211,25 +195,19 @@ void DianaServer::search_simple( { index_type r; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Expected matches: " << req.add_count << std::endl; - logger::log(logger::LoggerSeverity::DBG) - << "Number of search nodes: " << req.token_list.size() << std::endl; - } + logger::logger()->debug("Search: {} expected matches and {} search tokens", + req.add_count, + req.token_list.size()); crypto::Prf derivation_prf( crypto::Key(req.kw_token.data())); for (auto& it_token : req.token_list) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Search token key: " << utility::hex_string(it_token.first) - << std::endl; - logger::log(logger::LoggerSeverity::DBG) - << "Search token depth: " << std::dec - << static_cast(it_token.second) << std::endl; - } + logger::logger()->debug( + "Search token key: " + utility::hex_string(it_token.first) + + "; Token depth: " + + std::to_string(static_cast(it_token.second))); + // for now we implement the search algorithm in a naive way: // the tokens are iteratively generated using the derive_node function @@ -250,45 +228,31 @@ void DianaServer::search_simple( i, it_token.second); - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Derived leaf token: " << utility::hex_string(t) - << std::endl; - } + logger::logger()->debug("Derived leaf token: " + + utility::hex_string(t)); + update_token_type ut; index_type mask; gen_update_token_mask(t, ut, mask); - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Derived token : " << utility::hex_string(ut) - << std::endl; - logger::log(logger::LoggerSeverity::DBG) - << "Mask : " << std::hex << mask << std::endl; - } + logger::logger()->debug("Derived token : " + utility::hex_string(ut) + + "; Mask : " + utility::hex_string(mask)); bool found = retrieve_entry(ut, r, delete_results); if (found) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Found: " << std::hex << r << std::endl; - } + logger::logger()->debug("Found: " + utility::hex_string(r)); r ^= mask; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Unmasked: " << std::hex << r << std::endl; - } + logger::logger()->debug("Unmasked: " + utility::hex_string(r)); post_callback(r); } else { /* LCOV_EXCL_START */ - logger::log(logger::LoggerSeverity::ERROR) - << "We were supposed to find something!" << std::endl; + logger::logger()->error("We were supposed to find something!"); /* LCOV_EXCL_STOP */ } } @@ -376,6 +340,7 @@ void DianaServer::search_simple_parallel( const size_t max_index) { auto get_callback // cppcheck-suppress variableScope + // cppcheck-suppress shadowVar = [this, t_id, &post_callback, delete_results](uint8_t* key) { index_type index; if (get_unmask(key, index, delete_results)) { @@ -473,11 +438,9 @@ void DianaServer::search_simple_parallel( template void DianaServer::insert(const UpdateRequest& req) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Update: (" << utility::hex_string(req.token) << ", " - << utility::hex_string(req.index) << ")" << std::endl; - } + logger::logger()->debug("Received update: (" + + utility::hex_string(req.token) + ", " + + utility::hex_string(req.index) + ")"); edb_.put(req.token, req.index); } diff --git a/lib/include/sse/schemes/utils/logger.hpp b/lib/include/sse/schemes/utils/logger.hpp index c77e1d0..c85f59b 100644 --- a/lib/include/sse/schemes/utils/logger.hpp +++ b/lib/include/sse/schemes/utils/logger.hpp @@ -21,63 +21,58 @@ #pragma once +#include + #include +#include #include +#include #include #include #include namespace sse { namespace logger { -enum class LoggerSeverity : uint8_t -{ - DBG = 00, - TRACE = 10, - INFO = 20, - WARNING = 30, - ERROR = 40, - CRITICAL = 50 -}; - -std::ostream* logger_stream(); -void set_logger_stream(std::ostream* stream); -LoggerSeverity severity(); -void set_severity(LoggerSeverity s); -std::ostream& log(LoggerSeverity s); +std::shared_ptr logger(); +void set_logger(const std::shared_ptr& logger); -bool set_benchmark_file(const std::string& path); -std::ostream& log_benchmark(); +void set_logging_level(spdlog::level::level_enum log_level); -std::string severity_string(LoggerSeverity s); } // namespace logger -} // namespace sse - -#ifdef BENCHMARK - -#define BENCHMARK_SIMPLE(comment, block) \ - { \ - auto begin = std::chrono::high_resolution_clock::now(); \ - block; \ - auto end = std::chrono::high_resolution_clock::now(); \ - std::chrono::duration time_ms = end - begin; \ - sse::logger::log_benchmark() \ - << (comment) << " " << time_ms.count() << " ms" << std::endl; \ - } -#define BENCHMARK_Q(block, quotient, comment_f) \ - { \ - auto begin = std::chrono::high_resolution_clock::now(); \ - block; \ - auto end = std::chrono::high_resolution_clock::now(); \ - std::chrono::duration time_ms = end - begin; \ - { \ - sse::logger::log_benchmark() \ - << comment_f(time_ms.count(), quotient) << std::endl; \ - } \ +class Benchmark +{ +public: + static void set_benchmark_file(const std::string& path); + + explicit Benchmark(std::string format); + Benchmark() = delete; + + void stop(); + void stop(size_t count); + + inline void set_count(size_t c) + { + count_ = c; } -#else -#define BENCHMARK_SIMPLE(comment, block) block; -#define BENCHMARK_Q(block, quotient, comment_f) block; -#endif \ No newline at end of file + virtual ~Benchmark(); + +private: + static std::shared_ptr benchmark_logger_; + + std::string format_; + size_t count_; + bool stopped_; + std::chrono::high_resolution_clock::time_point begin_; + std::chrono::high_resolution_clock::time_point end_; +}; + +class SearchBenchmark : public Benchmark +{ +public: + explicit SearchBenchmark(std::string message); +}; + +} // namespace sse \ No newline at end of file diff --git a/lib/include/sse/schemes/utils/rocksdb_wrapper.hpp b/lib/include/sse/schemes/utils/rocksdb_wrapper.hpp index 9fbd3fb..043f878 100644 --- a/lib/include/sse/schemes/utils/rocksdb_wrapper.hpp +++ b/lib/include/sse/schemes/utils/rocksdb_wrapper.hpp @@ -123,10 +123,12 @@ RockDBWrapper::RockDBWrapper(const std::string& path) : db_(nullptr) /* LCOV_EXCL_START */ if (!status.ok()) { - logger::log(logger::LoggerSeverity::CRITICAL) - << "Unable to open the database: " << status.ToString() - << std::endl; + logger::logger()->critical("Unable to open the database:\n " + + status.ToString()); db_ = nullptr; + + throw std::runtime_error("Unable to open the database located at " + + path); } /* LCOV_EXCL_STOP */ } @@ -188,12 +190,10 @@ bool RockDBWrapper::put(const std::array& key, const V& data) /* LCOV_EXCL_START */ if (!s.ok()) { - logger::log(logger::LoggerSeverity::ERROR) - << "Unable to insert pair in the database: " << s.ToString() - << std::endl; - logger::log(logger::LoggerSeverity::ERROR) - << "Failed on pair: key=" << utility::hex_string(key) - << ", data=" << utility::hex_string(data) << std::endl; + logger::logger()->error( + std::string("Unable to insert pair in the database\nkey=") + + utility::hex_string(key) + "\ndata=" + utility::hex_string(data) + + "\nRocksdb status: " + s.ToString()); } /* LCOV_EXCL_STOP */ @@ -229,8 +229,7 @@ void RockDBWrapper::flush(bool blocking) /* LCOV_EXCL_START */ if (!s.ok()) { - logger::log(logger::LoggerSeverity::ERROR) - << "DB Flush failed: " << s.ToString() << std::endl; + logger::logger()->error("DB Flush failed: " + s.ToString()); } /* LCOV_EXCL_STOP */ } @@ -398,10 +397,12 @@ RockDBListStore::RockDBListStore(const std::string& path) /* LCOV_EXCL_START */ if (!status.ok()) { - logger::log(logger::LoggerSeverity::CRITICAL) - << "Unable to open the database: " << status.ToString() - << std::endl; + logger::logger()->critical("Unable to open the database:\n " + + status.ToString()); db_ = nullptr; + + throw std::runtime_error("Unable to open the database located at " + + path); } /* LCOV_EXCL_STOP */ } @@ -484,12 +485,11 @@ bool RockDBListStore::put(const std::array& key, /* LCOV_EXCL_START */ if (!s.ok()) { - logger::log(logger::LoggerSeverity::ERROR) - << "Unable to insert key in the database: " << s.ToString() - << std::endl; - // logger::log(logger::LoggerSeverity::ERROR) << "Failed on - // pair: key=" << utility::hex_string(key) << ", data=" << - // utility::hex_string(data) << std::endl; + logger::logger()->error( + std::string("Unable to insert pair in the database\nkey=") + + utility::hex_string(key) + + "\ndata=" + utility::hex_string(serialized_list) + + "\nRocksdb status: " + s.ToString()); } /* LCOV_EXCL_STOP */ @@ -508,8 +508,7 @@ void RockDBListStore::flush(bool blocking) /* LCOV_EXCL_START */ if (!s.ok()) { - logger::log(logger::LoggerSeverity::ERROR) - << "DB Flush failed: " << s.ToString() << std::endl; + logger::logger()->error("DB Flush failed: " + s.ToString()); } /* LCOV_EXCL_STOP */ } diff --git a/lib/include/sse/schemes/utils/thread_pool.hpp b/lib/include/sse/schemes/utils/thread_pool.hpp index 7575980..c7fab6a 100644 --- a/lib/include/sse/schemes/utils/thread_pool.hpp +++ b/lib/include/sse/schemes/utils/thread_pool.hpp @@ -23,7 +23,6 @@ #define THREAD_POOL_H #include - #include #include #include diff --git a/lib/janus/janus_client.cpp b/lib/janus/janus_client.cpp index 94630b4..1d62045 100644 --- a/lib/janus/janus_client.cpp +++ b/lib/janus/janus_client.cpp @@ -104,15 +104,6 @@ SearchRequest JanusClient::search_request(const std::string& keyword) .add_count); // the add_count for the deletion scheme is actually // the number of deleted entries - /* - if (req.insertion_search_request.add_count < - req.deletion_search_request.add_count) { logger::log(logger::ERROR) << - "Keyword " << keyword << " was inserted " << - req.insertion_search_request.add_count << " times and deleted " << - req.deletion_search_request.add_count << " times" << std::endl; - } - */ - // increment the search counter only if there were some insertions or some // deletions diff --git a/lib/janus/janus_server.cpp b/lib/janus/janus_server.cpp index 9154323..8e28630 100644 --- a/lib/janus/janus_server.cpp +++ b/lib/janus/janus_server.cpp @@ -18,9 +18,9 @@ struct serialization { std::string serialize(const janus::JanusServer::cached_result_type& elt) { - logger::log(logger::LoggerSeverity::DBG) - << "Serializing pair (" << utility::hex_string(elt.first) << ", " - << utility::hex_string(elt.second) << ")\n"; + logger::logger()->debug("Serializing pair (" + + utility::hex_string(elt.first) + ", " + + utility::hex_string(elt.second) + ")"); return std::string(reinterpret_cast(&(elt.first)), sizeof(janus::index_type)) @@ -34,19 +34,16 @@ struct serialization if (end < begin + sizeof(janus::index_type) + sizeof(crypto::punct::kTagSize)) { if (end != begin) { - logger::log(logger::LoggerSeverity::ERROR) - << "Unable to deserialize" << std::endl; + logger::logger()->error("Error when deserializing"); } return false; } - logger::log(logger::LoggerSeverity::DBG) - << "Deserialized string: " - << utility::hex_string( - std::string(begin, - begin + sizeof(janus::index_type) - + sizeof(crypto::punct::kTagSize))) - << "\n"; + logger::logger()->debug("Deserialized string: " + + utility::hex_string(std::string( + begin, + begin + sizeof(janus::index_type) + + sizeof(crypto::punct::kTagSize)))); janus::index_type ind; crypto::punct::tag_type tag; @@ -62,9 +59,9 @@ struct serialization out = std::make_pair(ind, tag); - logger::log(logger::LoggerSeverity::DBG) - << "Deserializing pair (" << utility::hex_string(out.first) << ", " - << utility::hex_string(out.second) << ")\n"; + logger::logger()->debug("Deserializing pair (" + + utility::hex_string(out.first) + ", " + + utility::hex_string(out.second) + ")"); return true; } @@ -119,8 +116,7 @@ std::list JanusServer::search(SearchRequest& req) ++sk_it; // skip the first element for (; sk_it != key_shares.end(); ++sk_it) { auto tag = crypto::punct::extract_tag(*sk_it); - logger::log(logger::LoggerSeverity::DBG) - << "tag " << utility::hex_string(tag) << " is removed" << std::endl; + logger::logger()->debug("Tag " + utility::hex_string(tag) + " removed"); removed_tags.insert(tag); } @@ -247,9 +243,8 @@ void JanusServer::search_parallel( ++sk_it; // skip the first element for (; sk_it != key_shares.end(); ++sk_it) { auto tag = crypto::punct::extract_tag(*sk_it); - logger::log(logger::LoggerSeverity::DBG) - << "tag " << utility::hex_string(tag) << " is removed" - << std::endl; + logger::logger()->debug("Tag " + utility::hex_string(tag) + + " removed"); removed_tags.insert(tag); } diff --git a/lib/sophos/sophos_client.cpp b/lib/sophos/sophos_client.cpp index f7162eb..2008bd0 100644 --- a/lib/sophos/sophos_client.cpp +++ b/lib/sophos/sophos_client.cpp @@ -92,9 +92,9 @@ SearchRequest SophosClient::search_request(const std::string& keyword) const found = counter_map_.get(keyword, kw_counter); if (!found) { - logger::log(logger::LoggerSeverity::INFO) - << "No matching counter found for keyword " << keyword << " (index " - << utility::hex_string(seed) << ")" << std::endl; + logger::logger()->info("No matching counter found for keyword " + + keyword + " (index " + + utility::hex_string(seed) + ")"); } else { // Now derive the original search token from the kw_index (as seed) req.token = inverse_tdp().generate_array(rsa_prg_, seed); @@ -103,9 +103,8 @@ SearchRequest SophosClient::search_request(const std::string& keyword) const req.derivation_key = derivation_prf().prf( reinterpret_cast(seed.data()), kKeywordIndexSize); - logger::log(logger::LoggerSeverity::DBG) - << "Sent derivation key: " - << utility::hex_string(req.derivation_key) << std::endl; + logger::logger()->debug("Sent derivation key: " + + utility::hex_string(req.derivation_key)); req.add_count = kw_counter + 1; } @@ -133,26 +132,21 @@ UpdateRequest SophosClient::insertion_request(const std::string& keyword, st = inverse_tdp().generate_array(rsa_prg_, seed); if (kw_counter == 0) { - logger::log(logger::LoggerSeverity::DBG) - << "ST0 " << utility::hex_string(st) << std::endl; + logger::logger()->debug("Newly generated ST0: " + + utility::hex_string(st)); } else { st = inverse_tdp().invert_mult(st, kw_counter); - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "New ST " << utility::hex_string(st) << std::endl; - } + logger::logger()->debug("New ST: " + utility::hex_string(st)); } auto deriv_key = derivation_prf().prf( reinterpret_cast(seed.data()), kKeywordIndexSize); - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Derivation key: " << utility::hex_string(deriv_key) - << std::endl; - } + logger::logger()->debug("Derivation key: " + + utility::hex_string(deriv_key)); + std::array mask; @@ -163,11 +157,9 @@ UpdateRequest SophosClient::insertion_request(const std::string& keyword, mask); req.index = utility::xor_mask(index, mask); - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Update token: (" << utility::hex_string(req.token) << ", " - << std::hex << req.index << ")" << std::endl; - } + logger::logger()->debug("Update token: (" + utility::hex_string(req.token) + + ", " + utility::hex_string(req.index) + ")"); + return req; } diff --git a/lib/sophos/sophos_client_runner.cpp b/lib/sophos/sophos_client_runner.cpp index 8bb2acb..adb5bac 100644 --- a/lib/sophos/sophos_client_runner.cpp +++ b/lib/sophos/sophos_client_runner.cpp @@ -37,7 +37,6 @@ #include #include - #include #include #include @@ -245,13 +244,10 @@ bool SophosClientRunner::send_setup() const grpc::Status status = stub_->setup(&context, message, &e); if (status.ok()) { - logger::log(logger::LoggerSeverity::TRACE) - << "Setup succeeded." << std::endl; + logger::logger()->info("Server setup succeeded."); } else { - logger::log(logger::LoggerSeverity::ERROR) - << "Setup failed: " << std::endl; - logger::log(logger::LoggerSeverity::ERROR) - << status.error_message() << std::endl; + logger::logger()->error("Server setup failed: " + + status.error_message()); return false; } @@ -271,8 +267,7 @@ std::list SophosClientRunner::search( const std::string& keyword, const std::function& receive_callback) const { - logger::log(logger::LoggerSeverity::TRACE) - << "Search " << keyword << std::endl; + logger::logger()->trace("Search keyword: " + keyword); grpc::ClientContext context; sophos::SearchRequestMessage message; @@ -286,9 +281,6 @@ std::list SophosClientRunner::search( while (reader->Read(&reply)) { - // logger::log(logger::LoggerSeverity::TRACE) << "New result - // received: " - // << std::dec << reply.result() << std::endl; results.push_back(reply.result()); if (receive_callback != nullptr) { @@ -297,13 +289,9 @@ std::list SophosClientRunner::search( } grpc::Status status = reader->Finish(); if (status.ok()) { - logger::log(logger::LoggerSeverity::TRACE) - << "Search succeeded." << std::endl; + logger::logger()->trace("Search succeeded"); } else { - logger::log(logger::LoggerSeverity::ERROR) - << "Search failed:" << std::endl; - logger::log(logger::LoggerSeverity::ERROR) - << status.error_message() << std::endl; + logger::logger()->error("Search failed: " + status.error_message()); } return results; @@ -325,13 +313,9 @@ void SophosClientRunner::insert(const std::string& keyword, uint64_t index) grpc::Status status = stub_->insert(&context, message, &e); if (status.ok()) { - logger::log(logger::LoggerSeverity::TRACE) - << "Update succeeded." << std::endl; + logger::logger()->trace("Update succeeded."); } else { - logger::log(logger::LoggerSeverity::ERROR) - << "Update failed:" << std::endl; - logger::log(logger::LoggerSeverity::ERROR) - << status.error_message() << std::endl; + logger::logger()->error("Update failed: " + status.error_message()); } } } @@ -348,8 +332,7 @@ void SophosClientRunner::insert_in_session(const std::string& keyword, bulk_update_state_.mtx.lock(); if (!bulk_update_state_.writer->Write(message)) { - logger::log(logger::LoggerSeverity::ERROR) - << "Update session: broken stream." << std::endl; + logger::logger()->error("Update session: broken stream."); } bulk_update_state_.mtx.unlock(); } @@ -357,9 +340,8 @@ void SophosClientRunner::insert_in_session(const std::string& keyword, void SophosClientRunner::start_update_session() { if (bulk_update_state_.writer) { - logger::log(logger::LoggerSeverity::WARNING) - << "Invalid client state: the bulk update session is already up" - << std::endl; + logger::logger()->warn( + "Invalid client state: the bulk update session is already up"); return; } @@ -368,16 +350,14 @@ void SophosClientRunner::start_update_session() bulk_update_state_.context.get(), &(bulk_update_state_.response)); bulk_update_state_.is_up = true; - logger::log(logger::LoggerSeverity::TRACE) - << "Update session started." << std::endl; + logger::logger()->trace("Update session started."); } void SophosClientRunner::end_update_session() { if (!bulk_update_state_.writer) { - logger::log(logger::LoggerSeverity::WARNING) - << "Invalid client state: the bulk update session is not up" - << std::endl; + logger::logger()->warn( + "Invalid client state: the bulk update session is not up"); return; } @@ -385,17 +365,15 @@ void SophosClientRunner::end_update_session() ::grpc::Status status = bulk_update_state_.writer->Finish(); if (!status.ok()) { - logger::log(logger::LoggerSeverity::ERROR) - << "Status not OK at the end of update sessions. Status: " - << status.error_message() << std::endl; + logger::logger()->error("Status not OK at the end of update sessions:\n" + + status.error_message()); } bulk_update_state_.is_up = false; bulk_update_state_.context.reset(); bulk_update_state_.writer.reset(); - logger::log(logger::LoggerSeverity::TRACE) - << "Update session terminated." << std::endl; + logger::logger()->trace("Update session terminated."); } @@ -407,25 +385,23 @@ bool SophosClientRunner::load_inverted_index(const std::string& path) std::atomic_size_t counter(0); - auto add_list_callback - = [this, &pool, &counter](const std::string kw, - const std::list docs) { - auto work - = [this, &counter](const std::string& keyword, + auto add_list_callback = [this, &pool, &counter]( + const std::string kw, + const std::list docs) { + auto work = [this, &counter](const std::string& keyword, const std::list& documents) { - for (unsigned doc : documents) { - this->insert_in_session(keyword, doc); - } - counter++; + for (unsigned doc : documents) { + this->insert_in_session(keyword, doc); + } + counter++; - if ((counter % 100) == 0) { - logger::log(sse::logger::LoggerSeverity::INFO) - << "\rLoading: " << counter - << " keywords processed" << std::flush; - } - }; - pool.enqueue(work, kw, docs); - }; + if ((counter % 100) == 0) { + logger::logger()->info("Loading: {} keywords processed", + counter); + } + }; + pool.enqueue(work, kw, docs); + }; parser.addCallbackList(add_list_callback); @@ -437,17 +413,14 @@ bool SophosClientRunner::load_inverted_index(const std::string& path) parser.parse(); pool.join(); - logger::log(sse::logger::LoggerSeverity::INFO) - << "\rLoading: " << counter << " keywords processed" << std::endl; - + logger::logger()->info("Loading: {} keywords processed", counter); end_update_session(); return true; } catch (std::exception& e) { - logger::log(logger::LoggerSeverity::ERROR) - << "\nFailed to load file " << path << " : " << e.what() - << std::endl; + logger::logger()->error("Failed to load file " + path + ": " + + e.what()); return false; } return false; diff --git a/lib/sophos/sophos_server.cpp b/lib/sophos/sophos_server.cpp index 1091c47..ed84462 100644 --- a/lib/sophos/sophos_server.cpp +++ b/lib/sophos/sophos_server.cpp @@ -49,14 +49,10 @@ std::list SophosServer::search(SearchRequest& req) search_token_type st = req.token; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Search token: " << utility::hex_string(req.token) << std::endl; + logger::logger()->debug("Search token: " + utility::hex_string(req.token) + + "\nDerivation key: " + + utility::hex_string(req.derivation_key)); - logger::log(logger::LoggerSeverity::DBG) - << "Derivation key: " << utility::hex_string(req.derivation_key) - << std::endl; - } crypto::Prf derivation_prf( crypto::Key(req.derivation_key.data())); @@ -67,29 +63,22 @@ std::list SophosServer::search(SearchRequest& req) std::array mask; gen_update_token_masks(derivation_prf, st.data(), ut, mask); - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "ST" << std::to_string(req.add_count - i - 1) << ": " - << utility::hex_string(st) << std::endl; + logger::logger()->debug("Search token: (" + + std::to_string(req.add_count - i - 1) + ", " + + utility::hex_string(st) + ")\nDerived token: " + + utility::hex_string(ut)); - logger::log(logger::LoggerSeverity::DBG) - << "Derived token: " << utility::hex_string(ut) << std::endl; - } bool found = edb_.get(ut, r); if (found) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Found: " << std::hex << r << std::endl; - } + logger::logger()->debug("Found: " + utility::hex_string(r)); r = utility::xor_mask(r, mask); results.push_back(r); } else { /* LCOV_EXCL_START */ - logger::log(logger::LoggerSeverity::ERROR) - << "We were supposed to find something!" << std::endl; + logger::logger()->error("We were supposed to find something!"); /* LCOV_EXCL_STOP */ } @@ -97,7 +86,7 @@ std::list SophosServer::search(SearchRequest& req) } return results; -} +} // namespace sophos void SophosServer::search_callback( SearchRequest& req, @@ -106,14 +95,9 @@ void SophosServer::search_callback( search_token_type st = req.token; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Search token: " << utility::hex_string(req.token) << std::endl; - - logger::log(logger::LoggerSeverity::DBG) - << "Derivation key: " << utility::hex_string(req.derivation_key) - << std::endl; - } + logger::logger()->debug("Search token: " + utility::hex_string(req.token) + + "\nDerivation key: " + + utility::hex_string(req.derivation_key)); crypto::Prf derivation_prf( crypto::Key(req.derivation_key.data())); @@ -124,25 +108,17 @@ void SophosServer::search_callback( std::array mask; gen_update_token_masks(derivation_prf, st.data(), ut, mask); - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Derived token: " << utility::hex_string(ut) << std::endl; - } + logger::logger()->debug("Derived token: " + utility::hex_string(ut)); bool found = edb_.get(ut, r); if (found) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Found: " << std::hex << r << std::endl; - } - + logger::logger()->debug("Found: " + utility::hex_string(r)); r = utility::xor_mask(r, mask); post_callback(r); } else { /* LCOV_EXCL_START */ - logger::log(logger::LoggerSeverity::ERROR) - << "We were supposed to find something!" << std::endl; + logger::logger()->error("We were supposed to find something!"); /* LCOV_EXCL_STOP */ } @@ -158,14 +134,10 @@ std::list SophosServer::search_parallel(SearchRequest& req, search_token_type st = req.token; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Search token: " << utility::hex_string(req.token) << std::endl; + logger::logger()->debug("Search token: " + utility::hex_string(req.token) + + "\nDerivation key: " + + utility::hex_string(req.derivation_key)); - logger::log(logger::LoggerSeverity::DBG) - << "Derivation key: " << utility::hex_string(req.derivation_key) - << std::endl; - } crypto::Prf derivation_prf( crypto::Key(req.derivation_key.data())); @@ -184,22 +156,15 @@ std::list SophosServer::search_parallel(SearchRequest& req, index_type r; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Derived token: " << utility::hex_string(token) << std::endl; - } + logger::logger()->debug("Derived token: " + utility::hex_string(token)); bool found = edb_.get(token, r); if (found) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Found: " << std::hex << r << std::endl; - } + logger::logger()->debug("Found: " + utility::hex_string(r)); } else { /* LCOV_EXCL_START */ - logger::log(logger::LoggerSeverity::ERROR) - << "We were supposed to find something!" << std::endl; + logger::logger()->error("We were supposed to find something!"); return; /* LCOV_EXCL_STOP */ } @@ -264,14 +229,9 @@ std::list SophosServer::search_parallel_light(SearchRequest& req, std::list results; std::mutex res_mutex; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Search token: " << utility::hex_string(req.token) << std::endl; - - logger::log(logger::LoggerSeverity::DBG) - << "Derivation key: " << utility::hex_string(req.derivation_key) - << std::endl; - } + logger::logger()->debug("Search token: " + utility::hex_string(req.token) + + "\nDerivation key: " + + utility::hex_string(req.derivation_key)); crypto::Prf derivation_prf( crypto::Key(req.derivation_key.data())); @@ -285,18 +245,12 @@ std::list SophosServer::search_parallel_light(SearchRequest& req, index_type r; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Derived token: " << utility::hex_string(token) << std::endl; - } + logger::logger()->debug("Derived token: " + utility::hex_string(token)); bool found = edb_.get(token, r); if (found) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Found: " << std::hex << r << std::endl; - } + logger::logger()->debug("Found: " + utility::hex_string(r)); index_type v = utility::xor_mask(r, mask); @@ -306,12 +260,11 @@ std::list SophosServer::search_parallel_light(SearchRequest& req, } else { /* LCOV_EXCL_START */ - logger::log(logger::LoggerSeverity::ERROR) - << "We were supposed to find a value mapped to key " - << utility::hex_string(token); - logger::log(logger::LoggerSeverity::ERROR) - << " (" << i << "-th derived key from search token " - << utility::hex_string(st) << ")" << std::endl; + logger::logger()->error( + "We were supposed to find a value mapped to key " + + utility::hex_string(token) + " (" + std::to_string(i) + + "-th derived key from search token " + utility::hex_string(st) + + ")"); /* LCOV_EXCL_STOP */ } }; @@ -366,14 +319,9 @@ void SophosServer::search_parallel_callback( search_token_type st = req.token; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Search token: " << utility::hex_string(req.token) << std::endl; - - logger::log(logger::LoggerSeverity::DBG) - << "Derivation key: " << utility::hex_string(req.derivation_key) - << std::endl; - } + logger::logger()->debug("Search token: " + utility::hex_string(req.token) + + "\nDerivation key: " + + utility::hex_string(req.derivation_key)); crypto::Prf derivation_prf( crypto::Key(req.derivation_key.data())); @@ -389,18 +337,12 @@ void SophosServer::search_parallel_callback( index_type r; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Derived token: " << utility::hex_string(token) << std::endl; - } + logger::logger()->debug("Derived token: " + utility::hex_string(token)); bool found = edb_.get(token, r); if (found) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Found: " << std::hex << r << std::endl; - } + logger::logger()->debug("Found: " + utility::hex_string(r)); index_type v = utility::xor_mask(r, mask); @@ -408,12 +350,11 @@ void SophosServer::search_parallel_callback( } else { /* LCOV_EXCL_START */ - logger::log(logger::LoggerSeverity::ERROR) - << "We were supposed to find a value mapped to key " - << utility::hex_string(token); - logger::log(logger::LoggerSeverity::ERROR) - << " (" << i << "-th derived key from search token " - << utility::hex_string(st) << ")" << std::endl; + logger::logger()->error( + "We were supposed to find a value mapped to key " + + utility::hex_string(token) + " (" + std::to_string(i) + + "-th derived key from search token " + utility::hex_string(st) + + ")"); /* LCOV_EXCL_STOP */ } }; @@ -465,14 +406,9 @@ void SophosServer::search_parallel_light_callback( { search_token_type st = req.token; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Search token: " << utility::hex_string(req.token) << std::endl; - - logger::log(logger::LoggerSeverity::DBG) - << "Derivation key: " << utility::hex_string(req.derivation_key) - << std::endl; - } + logger::logger()->debug("Search token: " + utility::hex_string(req.token) + + "\nDerivation key: " + + utility::hex_string(req.derivation_key)); crypto::Prf derivation_prf( crypto::Key(req.derivation_key.data())); @@ -485,18 +421,12 @@ void SophosServer::search_parallel_light_callback( index_type r; - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Derived token: " << utility::hex_string(token) << std::endl; - } + logger::logger()->debug("Derived token: " + utility::hex_string(token)); bool found = edb_.get(token, r); if (found) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Found: " << std::hex << r << std::endl; - } + logger::logger()->debug("Found: " + utility::hex_string(r)); index_type v = utility::xor_mask(r, mask); @@ -504,12 +434,11 @@ void SophosServer::search_parallel_light_callback( } else { /* LCOV_EXCL_START */ - logger::log(logger::LoggerSeverity::ERROR) - << "We were supposed to find a value mapped to key " - << utility::hex_string(token); - logger::log(logger::LoggerSeverity::ERROR) - << " (" << i << "-th derived key from search token " - << utility::hex_string(st) << ")" << std::endl; + logger::logger()->error( + "We were supposed to find a value mapped to key " + + utility::hex_string(token) + " (" + std::to_string(i) + + "-th derived key from search token " + utility::hex_string(st) + + ")"); /* LCOV_EXCL_STOP */ } }; @@ -554,11 +483,8 @@ void SophosServer::search_parallel_light_callback( void SophosServer::insert(const UpdateRequest& req) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Update: (" << utility::hex_string(req.token) << ", " << std::hex - << req.index << ")" << std::endl; - } + logger::logger()->debug("Update: (" + utility::hex_string(req.token) + ", " + + utility::hex_string(req.index) + ")"); // edb_.add(req.token, req.index); edb_.put(req.token, req.index); diff --git a/lib/sophos/sophos_server_runner.cpp b/lib/sophos/sophos_server_runner.cpp index bf93b85..6804b2d 100644 --- a/lib/sophos/sophos_server_runner.cpp +++ b/lib/sophos/sophos_server_runner.cpp @@ -81,13 +81,12 @@ grpc::Status SophosImpl::setup(__attribute__((unused)) __attribute__((unused)) google::protobuf::Empty* e) { - logger::log(logger::LoggerSeverity::TRACE) << "Setup!" << std::endl; + logger::logger()->trace("Setup started"); if (server_) { // problem, the server is already set up - logger::log(logger::LoggerSeverity::ERROR) - << "Info: server received a setup message but is already set up" - << std::endl; + logger::logger()->error( + "Info: server received a setup message but is already set up"); return grpc::Status(grpc::FAILED_PRECONDITION, "The server was already set up"); @@ -97,18 +96,16 @@ grpc::Status SophosImpl::setup(__attribute__((unused)) // there if (utility::exists(storage_path_)) { - logger::log(logger::LoggerSeverity::ERROR) - << "Error: Unable to create the server's content directory" - << std::endl; + logger::logger()->error( + "Error: Unable to create the server's content directory"); return grpc::Status(grpc::ALREADY_EXISTS, "Unable to create the server's content directory"); } if (!utility::create_directory(storage_path_, static_cast(0700))) { - logger::log(logger::LoggerSeverity::ERROR) - << "Error: Unable to create the server's content directory" - << std::endl; + logger::logger()->error( + "Error: Unable to create the server's content directory"); return grpc::Status(grpc::PERMISSION_DENIED, "Unable to create the server's content directory"); @@ -121,16 +118,16 @@ grpc::Status SophosImpl::setup(__attribute__((unused)) std::string pairs_map_path = storage_path_ + "/" + pairs_map_file; try { - logger::log(logger::LoggerSeverity::INFO) - << "Seting up server" << std::endl; + logger::logger()->info("Setting up server"); server_.reset(new SophosServer(pairs_map_path, message->public_key())); } catch (std::exception& e) { - logger::log(logger::LoggerSeverity::ERROR) - << "Error when setting up the server's core" << std::endl; + logger::logger()->error("Error when setting up the server's core:\n" + + std::string(e.what())); server_.reset(); return grpc::Status(grpc::FAILED_PRECONDITION, - "Unable to create the server's core."); + "Unable to create the server's core. Exception: " + + std::string(e.what())); } // write the public key in a file @@ -140,8 +137,7 @@ grpc::Status SophosImpl::setup(__attribute__((unused)) if (!pk_out.is_open()) { // error - logger::log(logger::LoggerSeverity::ERROR) - << "Error when writing the public key" << std::endl; + logger::logger()->error("Error when writing the public key"); return grpc::Status(grpc::PERMISSION_DENIED, "Unable to write the public key to disk"); @@ -149,46 +145,11 @@ grpc::Status SophosImpl::setup(__attribute__((unused)) pk_out << message->public_key(); pk_out.close(); - logger::log(logger::LoggerSeverity::TRACE) - << "Successful setup" << std::endl; + logger::logger()->trace("Successful setup"); return grpc::Status::OK; } -#define PRINT_BENCH_SEARCH(t, c) \ - ("SEARCH: " \ - + (((c) != 0) ? std::to_string((t) / (c)) + " ms/pair, " \ - + std::to_string((c)) + " pairs" \ - : std::to_string((t)) + " ms, no pair found")) - -//#define PRINT_BENCH_SEARCH_PAR_RPC(t,c) \ -//"Search: " + (((c) != 0) ? std::to_string((t)/(c)) + " ms/pair (with RPC), " + std::to_string((c)) + " pairs" : \ -//std::to_string((t)) + " ms, no pair found" ) -// -//#define PRINT_BENCH_SEARCH_PAR_NORPC(t,c) \ -//"Search: " + (((c) != 0) ? std::to_string((t)/(c)) + " ms/pair (without RPC), -//" + std::to_string((c)) + " pairs" : \ std::to_string((t)) + " ms, no pair -// found" ) -// - -//#define PRINT_BENCH_SEARCH_PAR_RPC(t,c) \ -//"Search (with PRC): " + std::to_string((c)) + " " + (((c) != 0) ? std::to_string((t)/(c)) + " ms/pair" : \ -//std::to_string((t)) + " ms, no pair found" ) -// -//#define PRINT_BENCH_SEARCH_PAR_NORPC(t,c) \ -//"Search: " + (((c) != 0) ? std::to_string((t)/(c)) + " ms/pair (without RPC), -//" + std::to_string((c)) + " pairs" : \ std::to_string((t)) + " ms, no pair -// found" ) - -#define PRINT_BENCH_SEARCH_PAR_RPC(t, c) \ - std::to_string((c)) + " \t\t " \ - + (((c) != 0) ? std::to_string((t) / (c)) : std::to_string((t))) - -#define PRINT_BENCH_SEARCH_PAR_NORPC(t, c) \ - std::to_string((c)) + " \t\t " \ - + (((c) != 0) ? std::to_string((t) / (c)) : std::to_string((t))) - - grpc::Status SophosImpl::search(grpc::ServerContext* context, const sophos::SearchRequestMessage* mes, grpc::ServerWriter* writer) @@ -210,23 +171,17 @@ grpc::Status SophosImpl::sync_search( "The server is not set up"); } - logger::log(logger::LoggerSeverity::TRACE) << "Searching ..."; + logger::logger()->trace("Start synchronous search..."); std::list res_list; auto req = message_to_request(mes); - // BENCHMARK_Q((res_list = server_->search(req)),res_list.size(), - // PRINT_BENCH_SEARCH_PAR_NORPC) BENCHMARK_Q((res_list = - // server_->search_parallel(req)),res_list.size(), - // PRINT_BENCH_SEARCH_PAR_NORPC) BENCHMARK_Q((res_list = - // server_->search_parallel_light(req,1)),res_list.size(), - // PRINT_BENCH_SEARCH_PAR_NORPC) - BENCHMARK_Q((res_list = server_->search_parallel(req, 2)), - res_list.size(), - PRINT_BENCH_SEARCH_PAR_NORPC) - // BENCHMARK_Q((res_list = - // server_->search_parallel_light(req,3)),res_list.size(), - // PRINT_BENCH_SEARCH_PAR_NORPC) BENCHMARK_SIMPLE("\n\n",{;}) + { + SearchBenchmark bench("Sophos synchronous search"); + + res_list = server_->search_parallel(req, 2); + bench.set_count(res_list.size()); + } for (auto& i : res_list) { sophos::SearchReply reply; @@ -235,8 +190,7 @@ grpc::Status SophosImpl::sync_search( writer->Write(reply); } - logger::log(logger::LoggerSeverity::TRACE) << " done" << std::endl; - + logger::logger()->trace("Synchronous search done"); return grpc::Status::OK; } @@ -253,7 +207,7 @@ grpc::Status SophosImpl::async_search( "The server is not set up"); } - logger::log(logger::LoggerSeverity::TRACE) << "Searching ..."; + logger::logger()->trace("Start asynchronous search..."); auto req = message_to_request(mes); std::atomic_uint res_size(0); @@ -271,32 +225,23 @@ grpc::Status SophosImpl::async_search( res_size++; }; - if (mes->add_count() >= 40) { // run the search algorithm in parallel only - // if there are more than 2 results - BENCHMARK_Q( - (server_->search_parallel_callback( - req, post_callback, std::thread::hardware_concurrency(), 8, 1)), - res_size, - PRINT_BENCH_SEARCH_PAR_RPC) - // BENCHMARK_Q((server_->search_parallel_light_callback(message_to_request(mes), - // post_callback, std::thread::hardware_concurrency())),res_size, - // PRINT_BENCH_SEARCH_PAR_RPC) - // BENCHMARK_Q((server_->search_parallel_light_callback(message_to_request(mes), - // post_callback, 10)),res_size, PRINT_BENCH_SEARCH_PAR_RPC) - } else if (mes->add_count() >= 2) { - BENCHMARK_Q( - (server_->search_parallel_light_callback( - req, post_callback, std::thread::hardware_concurrency())), - res_size, - PRINT_BENCH_SEARCH_PAR_RPC) - } else { - BENCHMARK_Q((server_->search_callback(req, post_callback)), - res_size, - PRINT_BENCH_SEARCH_PAR_RPC) + { + SearchBenchmark bench("Sophos asynchronous search"); + + if (mes->add_count() >= 40) { // run the search algorithm in parallel + // only if there are more than 2 results + server_->search_parallel_callback( + req, post_callback, std::thread::hardware_concurrency(), 8, 1); + } else if (mes->add_count() >= 2) { + server_->search_parallel_light_callback( + req, post_callback, std::thread::hardware_concurrency()); + } else { + server_->search_callback(req, post_callback); + } + bench.set_count(res_size); } - - logger::log(logger::LoggerSeverity::TRACE) << " done" << std::endl; + logger::logger()->trace("Asynchronous search done"); return grpc::Status::OK; @@ -317,12 +262,11 @@ grpc::Status SophosImpl::insert(__attribute__((unused)) "The server is not set up"); } - logger::log(logger::LoggerSeverity::TRACE) << "Updating ..." << std::endl; + logger::logger()->trace("Start updating"); server_->insert(message_to_request(mes)); - logger::log(logger::LoggerSeverity::TRACE) << " done" << std::endl; - + logger::logger()->trace("Update completed"); return grpc::Status::OK; } @@ -337,8 +281,7 @@ grpc::Status SophosImpl::bulk_insert( "The server is not set up"); } - logger::log(logger::LoggerSeverity::TRACE) - << "Updating (bulk)..." << std::endl; + logger::logger()->trace("Start updating (bulk)..."); sophos::UpdateRequestMessage mes; @@ -346,8 +289,7 @@ grpc::Status SophosImpl::bulk_insert( server_->insert(message_to_request(&mes)); } - logger::log(logger::LoggerSeverity::TRACE) - << "Updating (bulk)... done" << std::endl; + logger::logger()->trace("Updating (bulk)... done"); return grpc::Status::OK; diff --git a/lib/utils/db_generator.cpp b/lib/utils/db_generator.cpp index bd35762..b97c658 100644 --- a/lib/utils/db_generator.cpp +++ b/lib/utils/db_generator.cpp @@ -199,11 +199,9 @@ static void generation_job( std::to_string(counter_10_1)); if ((i + 1) % 10 == 0) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Random DB generation: completed keyword: " - << kw_10_1 << std::endl; - } + logger::logger()->debug( + "Random DB generation: completed keyword " + kw_10_1); + counter_10_1++; } } @@ -213,11 +211,8 @@ static void generation_job( std::to_string(counter_20)); if ((i + 1) % 20 == 0) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Random DB generation: completed keyword: " << kw_20 - << std::endl; - } + logger::logger()->debug( + "Random DB generation: completed keyword " + kw_20); counter_20++; } } @@ -227,11 +222,8 @@ static void generation_job( std::to_string(counter_30)); if ((i + 1) % 30 == 0) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Random DB generation: completed keyword: " << kw_30 - << std::endl; - } + logger::logger()->debug( + "Random DB generation: completed keyword " + kw_30); counter_30++; } } @@ -241,11 +233,8 @@ static void generation_job( std::to_string(counter_60)); if ((i + 1) % 60 == 0) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Random DB generation: completed keyword: " << kw_60 - << std::endl; - } + logger::logger()->debug( + "Random DB generation: completed keyword " + kw_60); counter_60++; } } @@ -255,11 +244,8 @@ static void generation_job( std::to_string(counter_10_2)); if ((i + 1) % 100 == 0) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Random DB generation: completed keyword: " - << kw_10_2 << std::endl; - } + logger::logger()->debug( + "Random DB generation: completed keyword " + kw_10_2); counter_10_2++; } @@ -281,11 +267,8 @@ static void generation_job( std::to_string(counter_10_3)); if ((i + 1) % (static_cast(1e3)) == 0) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Random DB generation: completed keyword: " - << kw_10_3 << std::endl; - } + logger::logger()->debug( + "Random DB generation: completed keyword " + kw_10_3); counter_10_3++; } @@ -306,11 +289,8 @@ static void generation_job( std::to_string(counter_10_4)); if ((i + 1) % (static_cast(1e4)) == 0) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Random DB generation: completed keyword: " - << kw_10_4 << std::endl; - } + logger::logger()->debug( + "Random DB generation: completed keyword " + kw_10_4); counter_10_4++; } if (use_rnd_group_4 && w_d < r_threshold_4) { @@ -330,11 +310,8 @@ static void generation_job( std::to_string(counter_10_5)); if ((i + 1) % (static_cast(1e5)) == 0) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Random DB generation: completed keyword: " - << kw_10_5 << std::endl; - } + logger::logger()->debug( + "Random DB generation: completed keyword " + kw_10_5); counter_10_5++; } @@ -356,11 +333,8 @@ static void generation_job( std::to_string(counter_10_6)); if ((i + 1) % (static_cast(1e6)) == 0) { - if (logger::severity() <= logger::LoggerSeverity::DBG) { - logger::log(logger::LoggerSeverity::DBG) - << "Random DB generation: completed keyword: " - << kw_10_6 << std::endl; - } + logger::logger()->debug( + "Random DB generation: completed keyword " + kw_10_6); counter_10_6++; } @@ -379,10 +353,10 @@ static void generation_job( (*docs_counter)++; if (((*docs_counter) % 1000) == 0) { - logger::log(sse::logger::LoggerSeverity::INFO) - << "Random DB generation: " << (*docs_counter) - << " documents generated (" << (*entries_counter) - << " entries)\r" << std::flush; + logger::logger()->info( + "Random DB generation : documents generated ( entries)", + *docs_counter, + *entries_counter); } @@ -511,7 +485,7 @@ static void generation_job( } log += ")"; - logger::log(logger::LoggerSeverity::INFO) << log << std::endl; + logger::logger()->info(log); } @@ -543,7 +517,7 @@ void gen_db(size_t N_entries, + " new documents generated, representing " + std::to_string(entries_counter.load()) + " entries"; - logger::log(logger::LoggerSeverity::INFO) << log << std::endl; + logger::logger()->info(log); } } // namespace sophos diff --git a/lib/utils/logger.cpp b/lib/utils/logger.cpp index dfdfdb3..87b3016 100644 --- a/lib/utils/logger.cpp +++ b/lib/utils/logger.cpp @@ -18,111 +18,104 @@ // along with Sophos. If not, see . // - #include +#include +#include +#include +#include + #include #include #include namespace sse { namespace logger { -LoggerSeverity severity__ = LoggerSeverity::INFO; -// NOLINTNEXTLINE(cert-err58-cpp) -std::ostream null_stream__(nullptr); -std::unique_ptr benchmark_stream__; -std::ostream* log_stream__ = &std::cout; +std::shared_ptr shared_logger_(nullptr); -std::ostream* logger_stream() +std::shared_ptr logger() { - return log_stream__; + if (!shared_logger_) { + // initialize the logger + shared_logger_ = spdlog::stderr_color_mt("console"); + } + return shared_logger_; } -void set_logger_stream(std::ostream* stream) +void set_logger(const std::shared_ptr& logger) { - log_stream__ = stream; + if (logger) { + shared_logger_ = logger; + } else { + shared_logger_ + = spdlog::create("null_logger"); + } } -LoggerSeverity severity() +void set_logging_level(spdlog::level::level_enum log_level) { - return severity__; + logger()->set_level(log_level); } +} // namespace logger -void set_severity(LoggerSeverity s) -{ - severity__ = s; -} +std::shared_ptr Benchmark::benchmark_logger_(nullptr); -bool set_benchmark_file(const std::string& path) +void Benchmark::set_benchmark_file(const std::string& path) { - if (benchmark_stream__) { - benchmark_stream__->close(); - } - - std::unique_ptr stream_ptr(new std::ofstream(path)); + benchmark_logger_ + = spdlog::basic_logger_mt("benchmark", path); + benchmark_logger_->set_level(spdlog::level::trace); - if (!stream_ptr->is_open()) { - benchmark_stream__.reset(); - - logger::log(logger::LoggerSeverity::ERROR) - << "Failed to set benchmark file: " << path << std::endl; - - return false; - } - benchmark_stream__ = std::move(stream_ptr); + benchmark_logger_->set_pattern("[%Y-%m-%d %T.%e] %v"); +} - return true; +Benchmark::Benchmark(std::string format) + : format_(std::move(format)), count_(0), stopped_(false), + begin_(std::chrono::high_resolution_clock::now()) +{ } -std::ostream& log(LoggerSeverity s) +void Benchmark::stop() { - if (s >= severity__) { - return ((*log_stream__) << severity_string(s)); + if (!stopped_) { + end_ = std::chrono::high_resolution_clock::now(); } - return null_stream__; } -std::ostream& log_benchmark() +void Benchmark::stop(size_t count) { - if (benchmark_stream__) { - return *benchmark_stream__; + if (!stopped_) { + end_ = std::chrono::high_resolution_clock::now(); + count_ = count; } - return (*log_stream__); } -std::string severity_string(LoggerSeverity s) +Benchmark::~Benchmark() { - switch (s) { - case LoggerSeverity::DBG: - return "[DEBUG] - "; - break; - - case LoggerSeverity::TRACE: - return "[TRACE] - "; - break; - - case LoggerSeverity::INFO: - return "[INFO] - "; - break; - - case LoggerSeverity::WARNING: - return "[WARNING] - "; - break; - - case LoggerSeverity::ERROR: - return "[ERROR] - "; - break; - - case LoggerSeverity::CRITICAL: - return "[CRITICAL] - "; - break; - - default: - return "[??] - "; - break; + stop(); + + std::chrono::duration time_ms = end_ - begin_; + + auto time_per_item = time_ms; + + if (count_ > 1) { + time_per_item /= count_; + } + + if (benchmark_logger_) { + benchmark_logger_->trace( + format_.c_str(), count_, time_ms.count(), time_per_item.count()); } } -} // namespace logger +constexpr auto search_JSON_begin + = R"({{ "message" : ")"; // double { to escape it in fmt +constexpr auto search_JSON_end + = R"(", "items" : {0}, "time" : {1}, "time/item" : {2} }})"; + +SearchBenchmark::SearchBenchmark(std::string message) + : Benchmark(search_JSON_begin + std::move(message) + search_JSON_end) +{ +} } // namespace sse \ No newline at end of file diff --git a/lib/utils/rocksdb_wrapper.cpp b/lib/utils/rocksdb_wrapper.cpp index 2b1cb24..8661718 100644 --- a/lib/utils/rocksdb_wrapper.cpp +++ b/lib/utils/rocksdb_wrapper.cpp @@ -72,10 +72,12 @@ RocksDBCounter::RocksDBCounter(const std::string& path) : db_(nullptr) rocksdb::Status status = rocksdb::DB::Open(options, path, &db_); /* LCOV_EXCL_START */ if (!status.ok()) { - logger::log(logger::LoggerSeverity::CRITICAL) - << "Unable to open the database: " << status.ToString() - << std::endl; + logger::logger()->critical("Unable to open the database:\n " + + status.ToString()); db_ = nullptr; + + throw std::runtime_error("Unable to open the database located at " + + path); } /* LCOV_EXCL_STOP */ } @@ -86,8 +88,8 @@ bool RocksDBCounter::get(const std::string& key, uint32_t& val) const rocksdb::Status s = db_->Get(rocksdb::ReadOptions(), key, &data); - logger::log(logger::LoggerSeverity::DBG) - << "Get: " << key << " Status: " << s.ToString() << std::endl; + logger::logger()->debug("Get: " + utility::hex_string(key) + + "\nStatus: " + s.ToString()); if (s.ok()) { ::memcpy(&val, data.data(), sizeof(uint32_t)); @@ -102,8 +104,8 @@ bool RocksDBCounter::get_and_increment(const std::string& key, uint32_t& val) rocksdb::Status s = db_->Get(rocksdb::ReadOptions(), key, &data); - logger::log(logger::LoggerSeverity::DBG) - << "Get and inc: " << key << " Status: " << s.ToString() << std::endl; + logger::logger()->debug("Get and increment: " + utility::hex_string(key) + + "\nStatus: " + s.ToString()); if (s.ok()) { ::memcpy(&val, data.data(), sizeof(uint32_t)); @@ -119,12 +121,10 @@ bool RocksDBCounter::get_and_increment(const std::string& key, uint32_t& val) /* LCOV_EXCL_START */ if (!s.ok()) { - logger::log(logger::LoggerSeverity::ERROR) - << "Unable to insert pair in the database: " << s.ToString() - << std::endl; - logger::log(logger::LoggerSeverity::ERROR) - << "Failed on pair: key=" << utility::hex_string(key) - << ", value=" << val << std::endl; + logger::logger()->error("Unable to insert pair in the database\nkey=" + + utility::hex_string(key) + + "\nvalue=" + std::to_string(val) + + "\nRocksdb status: " + s.ToString()); } /* LCOV_EXCL_STOP */ @@ -138,9 +138,6 @@ bool RocksDBCounter::increment(const std::string& key, uint32_t default_value) rocksdb::Status s = db_->Get(rocksdb::ReadOptions(), key, &data); - // logger::log(logger::LoggerSeverity::DBG) << "Get and inc: " << - // key << " Status: " << s.ToString() << std::endl; - if (s.ok()) { // the key has been found ::memcpy(&val, data.data(), sizeof(uint32_t)); @@ -156,12 +153,10 @@ bool RocksDBCounter::increment(const std::string& key, uint32_t default_value) /* LCOV_EXCL_START */ if (!s.ok()) { - logger::log(logger::LoggerSeverity::ERROR) - << "Unable to increment value in the database: " << s.ToString() - << std::endl; - logger::log(logger::LoggerSeverity::ERROR) - << "Failed on pair: key=" << utility::hex_string(key) - << ", value=" << val << std::endl; + logger::logger()->error( + "Unable to increment value in the database\nkey=" + + utility::hex_string(key) + "\nvalue=" + std::to_string(val) + + "\nRocksdb status: " + s.ToString()); } /* LCOV_EXCL_STOP */ @@ -176,12 +171,10 @@ bool RocksDBCounter::set(const std::string& key, uint32_t val) /* LCOV_EXCL_START */ if (!s.ok()) { - logger::log(logger::LoggerSeverity::ERROR) - << "Unable to insert pair in the database: " << s.ToString() - << std::endl; - logger::log(logger::LoggerSeverity::ERROR) - << "Failed on pair: key=" << utility::hex_string(key) - << ", value=" << val << std::endl; + logger::logger()->error( + std::string("Unable to insert pair in the counter database\nkey=") + + utility::hex_string(key) + "\nvalue=" + std::to_string(val) + + "\nRocksdb status: " + s.ToString()); } /* LCOV_EXCL_STOP */ @@ -206,8 +199,7 @@ void RocksDBCounter::flush(bool blocking) /* LCOV_EXCL_START */ if (!s.ok()) { - logger::log(logger::LoggerSeverity::ERROR) - << "DB Flush failed: " << s.ToString() << std::endl; + logger::logger()->error("DB Flush failed: " + s.ToString()); } /* LCOV_EXCL_STOP */ } diff --git a/src/diana_client.cpp b/src/diana_client.cpp index 109dc99..2644606 100644 --- a/src/diana_client.cpp +++ b/src/diana_client.cpp @@ -25,8 +25,8 @@ __thread std::list>* buffer_list__ = nullptr; int main(int argc, char** argv) { - sse::logger::set_severity(sse::logger::LoggerSeverity::INFO); - sse::logger::set_benchmark_file("benchmark_diana_client.out"); + sse::logger::set_logging_level(spdlog::level::info); + sse::Benchmark::set_benchmark_file("benchmark_diana_client.out"); sse::crypto::init_crypto_lib(); @@ -82,14 +82,12 @@ int main(int argc, char** argv) } if (client_db.empty()) { - sse::logger::log(sse::logger::LoggerSeverity::WARNING) - << "Client database not specified" << std::endl; - sse::logger::log(sse::logger::LoggerSeverity::WARNING) - << "Using \'test.dcdb\' by default" << std::endl; + sse::logger::logger()->warn( + "Client database not specified. Using \'test.dcdb\' by default"); client_db = "test.dcdb"; } else { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Running client with database " << client_db << std::endl; + sse::logger::logger()->info("Running client with database " + + client_db); } std::unique_ptr client_runner; @@ -99,17 +97,14 @@ int main(int argc, char** argv) client_runner.reset(new sse::diana::DianaClientRunner(channel, client_db)); for (std::string& path : input_files) { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Load file " << path << std::endl; + sse::logger::logger()->info("Load file " + path); client_runner->load_inverted_index(path); - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Done loading file " << path << std::endl; + sse::logger::logger()->info("Done loading file " + path); } if (rnd_entries_count > 0) { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Randomly generating database with " << rnd_entries_count - << " docs" << std::endl; + sse::logger::logger()->info("Randomly generating database with {} docs", + rnd_entries_count); std::mutex buffer_mtx; @@ -135,31 +130,28 @@ int main(int argc, char** argv) for (std::string& kw : keywords) { std::cout << "-------------- Search --------------" << std::endl; - std::mutex logger_mtx; - std::ostream& log_stream - = sse::logger::log(sse::logger::LoggerSeverity::INFO); - bool first = true; + std::mutex out_mtx; + bool first = true; - auto print_callback - = [&logger_mtx, &log_stream, &first, print_results](uint64_t res) { - if (print_results) { - logger_mtx.lock(); + auto print_callback = [&out_mtx, &first, print_results](uint64_t res) { + if (print_results) { + out_mtx.lock(); - if (!first) { - log_stream << ", "; - } - first = false; - log_stream << res; + if (!first) { + std::cout << ", "; + } + first = false; + std::cout << res; - logger_mtx.unlock(); - } - }; + out_mtx.unlock(); + } + }; - log_stream << "Search results: \n{"; + std::cout << "Search results: \n{"; auto res = client_runner->search(kw, print_callback); - log_stream << "}" << std::endl; + std::cout << "}" << std::endl; } client_runner.reset(); diff --git a/src/diana_server.cpp b/src/diana_server.cpp index 6f6d13b..a7c3a3a 100644 --- a/src/diana_server.cpp +++ b/src/diana_server.cpp @@ -21,8 +21,7 @@ sse::diana::DianaServerRunner* server_ptr__ = nullptr; void exit_handler(__attribute__((unused)) int signal) { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "\nExiting ... " << std::endl; + sse::logger::logger()->info("Exiting ... "); if (server_ptr__ != nullptr) { server_ptr__->shutdown(); @@ -32,8 +31,8 @@ void exit_handler(__attribute__((unused)) int signal) int main(int argc, char** argv) { - sse::logger::set_severity(sse::logger::LoggerSeverity::INFO); - sse::logger::set_benchmark_file("benchmark_diana_server.out"); + sse::logger::set_logging_level(spdlog::level::info); + sse::Benchmark::set_benchmark_file("benchmark_diana_server.out"); std::signal(SIGTERM, exit_handler); std::signal(SIGINT, exit_handler); @@ -71,22 +70,18 @@ int main(int argc, char** argv) } if (async_search) { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Asynchronous searches" << std::endl; + sse::logger::logger()->info("Use asynchronous searches"); } else { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Synchronous searches" << std::endl; + sse::logger::logger()->info("Use synchronous searches"); } if (server_db.empty()) { - sse::logger::log(sse::logger::LoggerSeverity::WARNING) - << "Server database not specified" << std::endl; - sse::logger::log(sse::logger::LoggerSeverity::WARNING) - << "Using \'test.dsdb\' by default" << std::endl; + sse::logger::logger()->warn( + "Server database not specified. Using \'test.dsdb\' by default"); server_db = "test.dsdb"; } else { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Running client with database " << server_db << std::endl; + sse::logger::logger()->info("Running server with database " + + server_db); } server_ptr__ = new sse::diana::DianaServerRunner("0.0.0.0:4241", server_db); server_ptr__->set_async_search(async_search); @@ -95,7 +90,7 @@ int main(int argc, char** argv) sse::crypto::cleanup_crypto_lib(); - sse::logger::log(sse::logger::LoggerSeverity::INFO) << "Done" << std::endl; + sse::logger::logger()->info("Diana exited"); return 0; } diff --git a/src/sophos_client.cpp b/src/sophos_client.cpp index bc4a994..fba08cb 100644 --- a/src/sophos_client.cpp +++ b/src/sophos_client.cpp @@ -21,8 +21,8 @@ int main(int argc, char** argv) { - sse::logger::set_severity(sse::logger::LoggerSeverity::INFO); - sse::logger::set_benchmark_file("benchmark_sophos_client.out"); + sse::logger::set_logging_level(spdlog::level::info); + sse::Benchmark::set_benchmark_file("benchmark_sophos_client.out"); sse::crypto::init_crypto_lib(); @@ -73,14 +73,12 @@ int main(int argc, char** argv) } if (client_db.empty()) { - sse::logger::log(sse::logger::LoggerSeverity::WARNING) - << "Client database not specified" << std::endl; - sse::logger::log(sse::logger::LoggerSeverity::WARNING) - << "Using \'test.csdb\' by default" << std::endl; + sse::logger::logger()->warn( + "Client database not specified. Using \'test.csdb\' by default"); client_db = "test.csdb"; } else { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Running client with database " << client_db << std::endl; + sse::logger::logger()->info("Running client with database " + + client_db); } std::unique_ptr client_runner; @@ -91,20 +89,14 @@ int main(int argc, char** argv) new sse::sophos::SophosClientRunner(channel, client_db)); for (std::string& path : input_files) { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Load file " << path << std::endl; + sse::logger::logger()->info("Load file " + path); client_runner->load_inverted_index(path); - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Done loading file " << path << std::endl; + sse::logger::logger()->info("Done loading file " + path); } if (rnd_entries_count > 0) { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Randomly generating database with " << rnd_entries_count - << " docs" << std::endl; - - // auto post_callback = [&writer, &res_size, - // &writer_lock](index_type i) + sse::logger::logger()->info("Randomly generating database with {} docs", + rnd_entries_count); auto gen_callback = [&client_runner](const std::string& s, size_t i) { client_runner->insert_in_session(s, i); @@ -118,28 +110,26 @@ int main(int argc, char** argv) for (std::string& kw : keywords) { std::cout << "-------------- Search --------------" << std::endl; - std::mutex logger_mtx; - std::ostream& log_stream - = sse::logger::log(sse::logger::LoggerSeverity::INFO); - bool first = true; + std::mutex out_mtx; + bool first = true; - auto print_callback = [&logger_mtx, &log_stream, &first](uint64_t res) { - logger_mtx.lock(); + auto print_callback = [&out_mtx, &first](uint64_t res) { + out_mtx.lock(); if (!first) { - log_stream << ", "; + std::cout << ", "; } first = false; - log_stream << res; + std::cout << res; - logger_mtx.unlock(); + out_mtx.unlock(); }; - log_stream << "Search results: \n{"; + std::cout << "Search results: \n{"; auto res = client_runner->search(kw, print_callback); - log_stream << "}" << std::endl; + std::cout << "}" << std::endl; } // if (bench_count > 0) { diff --git a/src/sophos_server.cpp b/src/sophos_server.cpp index cd084c5..3b1c104 100644 --- a/src/sophos_server.cpp +++ b/src/sophos_server.cpp @@ -19,8 +19,7 @@ sse::sophos::SophosServerRunner* server_ptr__ = nullptr; void exit_handler(__attribute__((unused)) int signal) { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "\nExiting ... " << std::endl; + sse::logger::logger()->info("Exiting... "); if (server_ptr__ != nullptr) { server_ptr__->shutdown(); @@ -30,8 +29,8 @@ void exit_handler(__attribute__((unused)) int signal) int main(int argc, char** argv) { - sse::logger::set_severity(sse::logger::LoggerSeverity::INFO); - sse::logger::set_benchmark_file("benchmark_sophos_server.out"); + sse::logger::set_logging_level(spdlog::level::info); + sse::Benchmark::set_benchmark_file("benchmark_sophos_server.out"); std::signal(SIGTERM, exit_handler); std::signal(SIGINT, exit_handler); @@ -69,22 +68,18 @@ int main(int argc, char** argv) } if (async_search) { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Asynchronous searches" << std::endl; + sse::logger::logger()->info("Use asynchronous searches"); } else { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Synchronous searches" << std::endl; + sse::logger::logger()->info("Use synchronous searches"); } if (server_db.empty()) { - sse::logger::log(sse::logger::LoggerSeverity::WARNING) - << "Server database not specified" << std::endl; - sse::logger::log(sse::logger::LoggerSeverity::WARNING) - << "Using \'test.ssdb\' by default" << std::endl; + sse::logger::logger()->warn( + "Server database not specified. Using \'test.ssdb\' by default"); server_db = "test.ssdb"; } else { - sse::logger::log(sse::logger::LoggerSeverity::INFO) - << "Running client with database " << server_db << std::endl; + sse::logger::logger()->info("Running client with database " + + server_db); } server_ptr__ @@ -97,7 +92,7 @@ int main(int argc, char** argv) sse::crypto::cleanup_crypto_lib(); - sse::logger::log(sse::logger::LoggerSeverity::INFO) << "Done" << std::endl; + sse::logger::logger()->info("Sophos exited"); return 0; } diff --git a/test/db_generator.cpp b/test/db_generator.cpp index e8df092..ea79d98 100644 --- a/test/db_generator.cpp +++ b/test/db_generator.cpp @@ -1,13 +1,13 @@ #include -#include - #include #include #include #include #include +#include + namespace sse { namespace test { diff --git a/test/debug_diana.cpp b/test/debug_diana.cpp index 8be1145..e0c41c9 100644 --- a/test/debug_diana.cpp +++ b/test/debug_diana.cpp @@ -22,7 +22,7 @@ using namespace std; void test_client_server() { - sse::logger::set_severity(sse::logger::LoggerSeverity::DBG); + sse::logger::set_logging_level(spdlog::level::debug); string client_master_key_path = "diana_derivation_master.key"; string client_kw_token_master_key_path = "diana_kw_token_master.key"; diff --git a/test/debug_janus.cpp b/test/debug_janus.cpp index cc969a8..0cb8c81 100644 --- a/test/debug_janus.cpp +++ b/test/debug_janus.cpp @@ -14,8 +14,8 @@ #include #include -#include +#include #include #include #include @@ -302,7 +302,7 @@ void benchmark_puncturable_encryption() void test_client_server() { - sse::logger::set_severity(sse::logger::LoggerSeverity::DBG); + sse::logger::set_logging_level(spdlog::level::debug); string client_master_key_path = "janus_master.key"; ifstream client_master_key_in(client_master_key_path.c_str()); diff --git a/test/debug_sophos.cpp b/test/debug_sophos.cpp index 1bc49a0..7a1ab50 100644 --- a/test/debug_sophos.cpp +++ b/test/debug_sophos.cpp @@ -21,7 +21,7 @@ using namespace std; void test_client_server() { - sse::logger::set_severity(sse::logger::LoggerSeverity::DBG); + sse::logger::set_logging_level(spdlog::level::debug); string client_sk_path = "sophos_client_test/tdp_sk.key"; string client_master_key_path = "sophos_client_test/derivation_master.key"; diff --git a/test/diana.cpp b/test/diana.cpp index eaed766..961c1a2 100644 --- a/test/diana.cpp +++ b/test/diana.cpp @@ -6,8 +6,6 @@ #include -#include - #include #include #include @@ -17,6 +15,8 @@ #include #include +#include + namespace sse { namespace diana { diff --git a/test/janus.cpp b/test/janus.cpp index 5bec5cc..0133b99 100644 --- a/test/janus.cpp +++ b/test/janus.cpp @@ -6,8 +6,6 @@ #include -#include - #include #include #include @@ -17,6 +15,8 @@ #include #include +#include + namespace sse { namespace janus { namespace test { diff --git a/test/rocksdb.cpp b/test/rocksdb.cpp index f5732d8..494d24d 100644 --- a/test/rocksdb.cpp +++ b/test/rocksdb.cpp @@ -3,11 +3,12 @@ #include #include -#include #include #include +#include + namespace sse { namespace test { diff --git a/test/runners.cpp b/test/runners.cpp index 2612715..ceb2ae8 100644 --- a/test/runners.cpp +++ b/test/runners.cpp @@ -12,10 +12,8 @@ #include #include -#include -#include - #include +#include #include #include #include @@ -24,6 +22,8 @@ #include #include +#include + namespace sse { namespace test { // The runners class should be as follows diff --git a/test/sophos.cpp b/test/sophos.cpp index 9653641..9159189 100644 --- a/test/sophos.cpp +++ b/test/sophos.cpp @@ -6,8 +6,6 @@ #include -#include - #include #include #include @@ -17,6 +15,8 @@ #include #include +#include + namespace sse { namespace sophos { namespace test { diff --git a/test/test.cpp b/test/test.cpp index b125c17..fc55180 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -19,14 +19,12 @@ int main(int argc, char* argv[]) { sse::crypto::init_crypto_lib(); - // Be sure to go through every branch of the logger, but still do not log - // anything - std::ostream null_stream(nullptr); - sse::logger::set_logger_stream(&null_stream); - sse::logger::set_severity(sse::logger::LoggerSeverity::DBG); + // sse::logger::set_logger(std::shared_ptr(nullptr)); + sse::logger::set_logging_level(spdlog::level::warn); ::testing::InitGoogleTest(&argc, argv); + sse::Benchmark::set_benchmark_file("benchmark.log"); // If there is one remaining argument, we use it as a pointer to the JSON // test library diff --git a/test/utility.cpp b/test/utility.cpp index a206f84..9c1679d 100644 --- a/test/utility.cpp +++ b/test/utility.cpp @@ -2,10 +2,10 @@ #include -#include - #include +#include + namespace sse { namespace test { void cleanup_directory(const std::string& path) diff --git a/test/utility.hpp b/test/utility.hpp index 52d6530..b1bbd47 100644 --- a/test/utility.hpp +++ b/test/utility.hpp @@ -1,7 +1,5 @@ #pragma once -#include - #include #include #include @@ -9,6 +7,8 @@ #include #include +#include + namespace sse { namespace test { void cleanup_directory(const std::string& path);