Skip to content

Commit

Permalink
Updated wsjcpp-core to latest (v0.1.7)
Browse files Browse the repository at this point in the history
  • Loading branch information
sea-kg committed May 25, 2020
1 parent 883680c commit 32aef7a
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 86 deletions.
2 changes: 1 addition & 1 deletion src.wsjcpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
2 changes: 1 addition & 1 deletion src.wsjcpp/wsjcpp_core/wsjcpp.hold.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
117 changes: 49 additions & 68 deletions src.wsjcpp/wsjcpp_core/wsjcpp_core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -299,17 +299,19 @@ std::vector<std::string> 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;
}

Expand Down Expand Up @@ -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<std::string> * 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) {
Expand Down Expand Up @@ -819,89 +822,67 @@ void WsjcppLog::ok(const std::string &sTag, const std::string &sMessage) {
// ---------------------------------------------------------------------

std::vector<std::string> WsjcppLog::getLastLogMessages() {
WsjcppLog::initGlobalVariables();
std::lock_guard<std::mutex> lock(*WsjcppLog::g_WSJCPP_LOG_MUTEX);
std::lock_guard<std::mutex> lock(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logMutex);
std::vector<std::string> 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;
}

// ---------------------------------------------------------------------

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::string>();
// 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<std::mutex> lock(*WsjcppLog::g_WSJCPP_LOG_MUTEX);
std::lock_guard<std::mutex> 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;
Expand Down
26 changes: 15 additions & 11 deletions src.wsjcpp/wsjcpp_core/wsjcpp_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string> 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<std::string> * 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);
Expand All @@ -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);
Expand Down
5 changes: 2 additions & 3 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string> vArgs;
/*std::vector<std::string> vArgs;
for (int i = 0; i < argc; i++) {
vArgs.push_back(std::string(argv[i]));
}
}*/

// TODO example

Expand Down
2 changes: 1 addition & 1 deletion unit-tests.wsjcpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
2 changes: 1 addition & 1 deletion wsjcpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down

0 comments on commit 32aef7a

Please sign in to comment.