From 00863566ec4601c65c435b74e575d49546a1c707 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 7 Dec 2019 03:36:21 +0300 Subject: split server into multiple components In a vague attempt to make header files more readable, split server/ into a number of components. Also, refactor the unit tests to use the "Data-driven test cases" of Boost.Test. --- server/common/CMakeLists.txt | 6 ++++++ server/common/error.hpp | 15 ++++++++++++++ server/common/log.hpp | 49 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 server/common/CMakeLists.txt create mode 100644 server/common/error.hpp create mode 100644 server/common/log.hpp (limited to 'server/common') diff --git a/server/common/CMakeLists.txt b/server/common/CMakeLists.txt new file mode 100644 index 0000000..5655861 --- /dev/null +++ b/server/common/CMakeLists.txt @@ -0,0 +1,6 @@ +find_package(Boost REQUIRED) + +add_library(common INTERFACE) + +target_include_directories(common SYSTEM INTERFACE ${Boost_INCLUDE_DIRS}) +target_link_libraries(common INTERFACE ${Boost_LIBRARIES}) diff --git a/server/common/error.hpp b/server/common/error.hpp new file mode 100644 index 0000000..cbfbb1e --- /dev/null +++ b/server/common/error.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include +#include + +namespace math::server { + +class Error : public std::runtime_error { +public: + explicit Error(const std::string& what) + : std::runtime_error{"server error: " + what} + { } +}; + +} diff --git a/server/common/log.hpp b/server/common/log.hpp new file mode 100644 index 0000000..ca0fafd --- /dev/null +++ b/server/common/log.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace math::server::log { + +namespace details { + +inline std::thread::id get_tid() { return std::this_thread::get_id(); } + +inline std::string get_timestamp() { + const auto tt = std::time(nullptr); + std::ostringstream oss; + oss << std::put_time(std::gmtime(&tt), "%Y-%m-%d %H:%M:%S"); + return oss.str(); +} + +inline void log(const std::string& msg) { + std::clog << get_timestamp() << " | " << get_tid() << " | " << msg << '\n'; +} + +} + +template +inline void log(const std::string_view& fmt, Args&&... args) { + details::log(boost::str((boost::format(fmt.data()) % ... % args))); +} + +template +inline void error(const std::string_view& fmt, Args&&... args) { + details::log(boost::str((boost::format(fmt.data()) % ... % args))); +} + +inline void error(const boost::system::error_code& ec) { + details::log(ec.message()); +} + +} -- cgit v1.2.3