From 32aef7a4d905b112867462c08bf2d8feed6eb60f Mon Sep 17 00:00:00 2001 From: Evgenii Sopov Date: Mon, 25 May 2020 09:15:08 +0700 Subject: [PATCH] Updated wsjcpp-core to latest (v0.1.7) --- src.wsjcpp/CMakeLists.txt | 2 +- src.wsjcpp/wsjcpp_core/wsjcpp.hold.yml | 2 +- src.wsjcpp/wsjcpp_core/wsjcpp_core.cpp | 117 +++++++++++-------------- src.wsjcpp/wsjcpp_core/wsjcpp_core.h | 26 +++--- src/main.cpp | 5 +- unit-tests.wsjcpp/CMakeLists.txt | 2 +- wsjcpp.yml | 2 +- 7 files changed, 70 insertions(+), 86 deletions(-) diff --git a/src.wsjcpp/CMakeLists.txt b/src.wsjcpp/CMakeLists.txt index f20aad4..a10b694 100644 --- a/src.wsjcpp/CMakeLists.txt +++ b/src.wsjcpp/CMakeLists.txt @@ -17,7 +17,7 @@ set (WSJCPP_SOURCES "") find_package(Threads REQUIRED) list (APPEND WSJCPP_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) -# wsjcpp-core:v0.1.6 +# wsjcpp-core:v0.1.7 list (APPEND WSJCPP_INCLUDE_DIRS "./src.wsjcpp/wsjcpp_core/") list (APPEND WSJCPP_SOURCES "./src.wsjcpp/wsjcpp_core/wsjcpp_core.cpp") list (APPEND WSJCPP_SOURCES "./src.wsjcpp/wsjcpp_core/wsjcpp_core.h") diff --git a/src.wsjcpp/wsjcpp_core/wsjcpp.hold.yml b/src.wsjcpp/wsjcpp_core/wsjcpp.hold.yml index f7eb752..32119e7 100644 --- a/src.wsjcpp/wsjcpp_core/wsjcpp.hold.yml +++ b/src.wsjcpp/wsjcpp_core/wsjcpp.hold.yml @@ -3,7 +3,7 @@ cmake_cxx_standard: 11 cmake_minimum_required: 3.0 name: wsjcpp-core -version: v0.1.6 +version: v0.1.7 description: Basic Utils for wsjcpp issues: https://github.com/wsjcpp/wsjcpp-core/issues repositories: diff --git a/src.wsjcpp/wsjcpp_core/wsjcpp_core.cpp b/src.wsjcpp/wsjcpp_core/wsjcpp_core.cpp index a2a4a84..188fda4 100644 --- a/src.wsjcpp/wsjcpp_core/wsjcpp_core.cpp +++ b/src.wsjcpp/wsjcpp_core/wsjcpp_core.cpp @@ -299,17 +299,19 @@ std::vector WsjcppCore::getListOfFiles(const std::string &sDirname) return vFiles; } DIR *dir = opendir(sDirname.c_str()); - struct dirent *entry = readdir(dir); - while (entry != NULL) { - if (entry->d_type != DT_DIR) { - std::string sDir(entry->d_name); - if (sDir != "." && sDir != "..") { - vFiles.push_back(sDir); + if (dir != NULL) { + struct dirent *entry = readdir(dir); + while (entry != NULL) { + if (entry->d_type != DT_DIR) { + std::string sDir(entry->d_name); + if (sDir != "." && sDir != "..") { + vFiles.push_back(sDir); + } } + entry = readdir(dir); } - entry = readdir(dir); + closedir(dir); } - closedir(dir); return vFiles; } @@ -756,30 +758,31 @@ bool WsjcppCore::recoursiveRemoveDir(const std::string& sDir) { // --------------------------------------------------------------------- // WsjcppLog -std::mutex * WsjcppLog::g_WSJCPP_LOG_MUTEX = nullptr; -std::string WsjcppLog::g_WSJCPP_LOG_DIR = "./"; -std::string WsjcppLog::g_WSJCPP_LOG_FILE = ""; -std::string WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE = ""; -bool WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE = true; -long WsjcppLog::g_WSJCPP_LOG_START_TIME = 0; -long WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS = 51000; - -// Last log messages -std::deque * WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES = nullptr; +WsjcppLogGlobalConf::WsjcppLogGlobalConf() { + // + logDir = "./"; + logPrefixFile = ""; + logFile = ""; + enableLogFile = true; + logStartTime = 0; + logRotationPeriodInSeconds = 51000; +} // --------------------------------------------------------------------- -void WsjcppLog::doLogRotateUpdateFilename(bool bForce) { +void WsjcppLogGlobalConf::doLogRotateUpdateFilename(bool bForce) { long t = WsjcppCore::currentTime_seconds(); - long nEverySeconds = WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS; // rotate log if started now or if time left more then 1 day - if (g_WSJCPP_LOG_START_TIME == 0 || t - g_WSJCPP_LOG_START_TIME > nEverySeconds || bForce) { - g_WSJCPP_LOG_START_TIME = t; - g_WSJCPP_LOG_FILE = g_WSJCPP_LOG_DIR + "/" - + WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE + "_" - + WsjcppCore::formatTimeForFilename(g_WSJCPP_LOG_START_TIME) + ".log"; + long nEverySeconds = logRotationPeriodInSeconds; // rotate log if started now or if time left more then 1 day + if (logStartTime == 0 || t - logStartTime > nEverySeconds || bForce) { + logStartTime = t; + logFile = logDir + "/" + + logPrefixFile + "_" + + WsjcppCore::formatTimeForFilename(logStartTime) + ".log"; } } +WsjcppLogGlobalConf WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF; + // --------------------------------------------------------------------- void WsjcppLog::info(const std::string & sTag, const std::string &sMessage) { @@ -819,11 +822,10 @@ void WsjcppLog::ok(const std::string &sTag, const std::string &sMessage) { // --------------------------------------------------------------------- std::vector WsjcppLog::getLastLogMessages() { - WsjcppLog::initGlobalVariables(); - std::lock_guard lock(*WsjcppLog::g_WSJCPP_LOG_MUTEX); + std::lock_guard lock(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logMutex); std::vector vRet; - for (int i = 0; i < g_WSJCPP_LOG_LAST_MESSAGES->size(); i++) { - vRet.push_back(g_WSJCPP_LOG_LAST_MESSAGES->at(i)); + for (int i = 0; i < WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.size(); i++) { + vRet.push_back(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages[i]); } return vRet; } @@ -831,77 +833,56 @@ std::vector WsjcppLog::getLastLogMessages() { // --------------------------------------------------------------------- void WsjcppLog::setLogDirectory(const std::string &sDirectoryPath) { - WsjcppLog::g_WSJCPP_LOG_DIR = sDirectoryPath; - if (!WsjcppCore::dirExists(WsjcppLog::g_WSJCPP_LOG_DIR)) { - if (!WsjcppCore::makeDir(WsjcppLog::g_WSJCPP_LOG_DIR)) { + WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logDir = sDirectoryPath; + if (!WsjcppCore::dirExists(sDirectoryPath)) { + if (!WsjcppCore::makeDir(sDirectoryPath)) { WsjcppLog::err("setLogDirectory", "Could not create log directory '" + sDirectoryPath + "'"); } } - WsjcppLog::doLogRotateUpdateFilename(true); + WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.doLogRotateUpdateFilename(true); } // --------------------------------------------------------------------- void WsjcppLog::setPrefixLogFile(const std::string &sPrefixLogFile) { - WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE = sPrefixLogFile; - WsjcppLog::doLogRotateUpdateFilename(true); + WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logPrefixFile = sPrefixLogFile; + WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.doLogRotateUpdateFilename(true); } // --------------------------------------------------------------------- void WsjcppLog::setEnableLogFile(bool bEnable) { - WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE = bEnable; + WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.enableLogFile = bEnable; } // --------------------------------------------------------------------- void WsjcppLog::setRotationPeriodInSec(long nRotationPeriodInSec) { - WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS = nRotationPeriodInSec; -} - -// --------------------------------------------------------------------- - -void WsjcppLog::initGlobalVariables() { - // create deque if not created - if (WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES == nullptr) { - WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES = new std::deque(); - // std::cout << WsjcppCore::currentTime_logformat() + ", " + WsjcppCore::threadId() + " Init last messages deque\r\n"; - } - // create mutex if not created - if (WsjcppLog::g_WSJCPP_LOG_MUTEX == nullptr) { - WsjcppLog::g_WSJCPP_LOG_MUTEX = new std::mutex(); - // std::cout << WsjcppCore::currentTime_logformat() + ", " + WsjcppCore::threadId() + " Init mutex for log\r\n"; - } -} - -// --------------------------------------------------------------------- - -void WsjcppLog::deinitGlobalVariables() { - delete WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES; - delete WsjcppLog::g_WSJCPP_LOG_MUTEX; + WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logRotationPeriodInSeconds = nRotationPeriodInSec; } // --------------------------------------------------------------------- void WsjcppLog::add(WsjcppColorModifier &clr, const std::string &sType, const std::string &sTag, const std::string &sMessage) { - WsjcppLog::initGlobalVariables(); - WsjcppLog::doLogRotateUpdateFilename(); + WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.doLogRotateUpdateFilename(); - std::lock_guard lock(*WsjcppLog::g_WSJCPP_LOG_MUTEX); + std::lock_guard lock(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logMutex); WsjcppColorModifier def(WsjcppColorCode::FG_DEFAULT); std::string sLogMessage = WsjcppCore::currentTime_logformat() + ", " + WsjcppCore::threadId() + " [" + sType + "] " + sTag + ": " + sMessage; std::cout << clr << sLogMessage << def << std::endl; - g_WSJCPP_LOG_LAST_MESSAGES->push_front(sLogMessage); - while (g_WSJCPP_LOG_LAST_MESSAGES->size() > 50) { - g_WSJCPP_LOG_LAST_MESSAGES->pop_back(); + WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.push_front(sLogMessage); + + + while (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.size() > 50) { + WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.pop_back(); } - // log file - if (WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE) { - std::ofstream logFile(WsjcppLog::g_WSJCPP_LOG_FILE, std::ios::app); + // log file + if (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.enableLogFile) { + std::ofstream logFile(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logFile, std::ios::app); if (!logFile) { std::cout << "Error Opening File" << std::endl; return; diff --git a/src.wsjcpp/wsjcpp_core/wsjcpp_core.h b/src.wsjcpp/wsjcpp_core/wsjcpp_core.h index ac8c12a..b990460 100644 --- a/src.wsjcpp/wsjcpp_core/wsjcpp_core.h +++ b/src.wsjcpp/wsjcpp_core/wsjcpp_core.h @@ -102,17 +102,23 @@ class WsjcppColorModifier { // --------------------------------------------------------------------- +class WsjcppLogGlobalConf { + public: + WsjcppLogGlobalConf(); + void doLogRotateUpdateFilename(bool bForce = false); + std::mutex logMutex; + std::string logDir; + std::string logPrefixFile; + std::string logFile; + bool enableLogFile; + long logStartTime; + long logRotationPeriodInSeconds; + std::deque logLastMessages; +}; + class WsjcppLog { public: - static std::string g_WSJCPP_LOG_DIR; - static std::string g_WSJCPP_LOG_PREFIX_FILE; - static std::string g_WSJCPP_LOG_FILE; - static bool g_WSJCPP_ENABLE_LOG_FILE; - static long g_WSJCPP_LOG_START_TIME; - static long g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS; - static std::mutex * g_WSJCPP_LOG_MUTEX; - static std::deque * g_WSJCPP_LOG_LAST_MESSAGES; - static void doLogRotateUpdateFilename(bool bForce = false); + static WsjcppLogGlobalConf g_WSJCPP_LOG_GLOBAL_CONF; static void info(const std::string &sTag, const std::string &sMessage); static void err(const std::string &sTag, const std::string &sMessage); @@ -124,8 +130,6 @@ class WsjcppLog { static void setPrefixLogFile(const std::string &sPrefixLogFile); static void setEnableLogFile(bool bEnable); static void setRotationPeriodInSec(long nRotationPeriodInSec); - static void initGlobalVariables(); - static void deinitGlobalVariables(); private: static void add(WsjcppColorModifier &clr, const std::string &sType, const std::string &sTag, const std::string &sMessage); diff --git a/src/main.cpp b/src/main.cpp index fbb3022..8d85d7c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,18 +10,17 @@ int main(int argc, const char* argv[]) { std::string appName = std::string(WSJCPP_APP_NAME); std::string appVersion = std::string(WSJCPP_APP_VERSION); - // TODO move to WsjcppCore::init if (!WsjcppCore::dirExists(".wsjcpp")) { WsjcppCore::makeDir(".wsjcpp"); } WsjcppLog::setPrefixLogFile("wsjcpp"); WsjcppLog::setLogDirectory(".wsjcpp/logs"); - std::vector vArgs; + /*std::vector vArgs; for (int i = 0; i < argc; i++) { vArgs.push_back(std::string(argv[i])); - } + }*/ // TODO example diff --git a/unit-tests.wsjcpp/CMakeLists.txt b/unit-tests.wsjcpp/CMakeLists.txt index 9d39415..f0100f4 100644 --- a/unit-tests.wsjcpp/CMakeLists.txt +++ b/unit-tests.wsjcpp/CMakeLists.txt @@ -19,7 +19,7 @@ set (WSJCPP_SOURCES "") find_package(Threads REQUIRED) list (APPEND WSJCPP_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) -# wsjcpp-core:v0.1.6 +# wsjcpp-core:v0.1.7 list (APPEND WSJCPP_INCLUDE_DIRS "../src.wsjcpp/wsjcpp_core/") list (APPEND WSJCPP_SOURCES "../src.wsjcpp/wsjcpp_core/wsjcpp_core.cpp") list (APPEND WSJCPP_SOURCES "../src.wsjcpp/wsjcpp_core/wsjcpp_core.h") diff --git a/wsjcpp.yml b/wsjcpp.yml index 656956d..9b78988 100644 --- a/wsjcpp.yml +++ b/wsjcpp.yml @@ -17,7 +17,7 @@ required-libraries: dependencies: - name: "wsjcpp-core" - version: "v0.1.6" + version: "v0.1.7" url: "https://github.com/wsjcpp/wsjcpp-core:master" origin: "https://github.com/" installation-dir: "./src.wsjcpp/wsjcpp_core"