Skip to content

Commit 2c1cb21

Browse files
authored
Merge pull request #13 from wsjcpp/version-0.1.7
Version 0.1.7
2 parents c168b40 + d269732 commit 2c1cb21

File tree

5 files changed

+68
-83
lines changed

5 files changed

+68
-83
lines changed

src.wsjcpp/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Automaticly generated by [email protected]
22
cmake_minimum_required(VERSION 3.0)
33

4-
add_definitions(-DWSJCPP_APP_VERSION="v0.1.6")
4+
add_definitions(-DWSJCPP_APP_VERSION="v0.1.7")
55
add_definitions(-DWSJCPP_APP_NAME="wsjcpp-core")
66

77
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

src/wsjcpp_core.cpp

+49-68
Original file line numberDiff line numberDiff line change
@@ -299,17 +299,19 @@ std::vector<std::string> WsjcppCore::getListOfFiles(const std::string &sDirname)
299299
return vFiles;
300300
}
301301
DIR *dir = opendir(sDirname.c_str());
302-
struct dirent *entry = readdir(dir);
303-
while (entry != NULL) {
304-
if (entry->d_type != DT_DIR) {
305-
std::string sDir(entry->d_name);
306-
if (sDir != "." && sDir != "..") {
307-
vFiles.push_back(sDir);
302+
if (dir != NULL) {
303+
struct dirent *entry = readdir(dir);
304+
while (entry != NULL) {
305+
if (entry->d_type != DT_DIR) {
306+
std::string sDir(entry->d_name);
307+
if (sDir != "." && sDir != "..") {
308+
vFiles.push_back(sDir);
309+
}
308310
}
311+
entry = readdir(dir);
309312
}
310-
entry = readdir(dir);
313+
closedir(dir);
311314
}
312-
closedir(dir);
313315
return vFiles;
314316
}
315317

@@ -756,30 +758,31 @@ bool WsjcppCore::recoursiveRemoveDir(const std::string& sDir) {
756758
// ---------------------------------------------------------------------
757759
// WsjcppLog
758760

759-
std::mutex * WsjcppLog::g_WSJCPP_LOG_MUTEX = nullptr;
760-
std::string WsjcppLog::g_WSJCPP_LOG_DIR = "./";
761-
std::string WsjcppLog::g_WSJCPP_LOG_FILE = "";
762-
std::string WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE = "";
763-
bool WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE = true;
764-
long WsjcppLog::g_WSJCPP_LOG_START_TIME = 0;
765-
long WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS = 51000;
766-
767-
// Last log messages
768-
std::deque<std::string> * WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES = nullptr;
761+
WsjcppLogGlobalConf::WsjcppLogGlobalConf() {
762+
//
763+
logDir = "./";
764+
logPrefixFile = "";
765+
logFile = "";
766+
enableLogFile = true;
767+
logStartTime = 0;
768+
logRotationPeriodInSeconds = 51000;
769+
}
769770

770771
// ---------------------------------------------------------------------
771772

772-
void WsjcppLog::doLogRotateUpdateFilename(bool bForce) {
773+
void WsjcppLogGlobalConf::doLogRotateUpdateFilename(bool bForce) {
773774
long t = WsjcppCore::currentTime_seconds();
774-
long nEverySeconds = WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS; // rotate log if started now or if time left more then 1 day
775-
if (g_WSJCPP_LOG_START_TIME == 0 || t - g_WSJCPP_LOG_START_TIME > nEverySeconds || bForce) {
776-
g_WSJCPP_LOG_START_TIME = t;
777-
g_WSJCPP_LOG_FILE = g_WSJCPP_LOG_DIR + "/"
778-
+ WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE + "_"
779-
+ WsjcppCore::formatTimeForFilename(g_WSJCPP_LOG_START_TIME) + ".log";
775+
long nEverySeconds = logRotationPeriodInSeconds; // rotate log if started now or if time left more then 1 day
776+
if (logStartTime == 0 || t - logStartTime > nEverySeconds || bForce) {
777+
logStartTime = t;
778+
logFile = logDir + "/"
779+
+ logPrefixFile + "_"
780+
+ WsjcppCore::formatTimeForFilename(logStartTime) + ".log";
780781
}
781782
}
782783

784+
WsjcppLogGlobalConf WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF;
785+
783786
// ---------------------------------------------------------------------
784787

785788
void WsjcppLog::info(const std::string & sTag, const std::string &sMessage) {
@@ -819,89 +822,67 @@ void WsjcppLog::ok(const std::string &sTag, const std::string &sMessage) {
819822
// ---------------------------------------------------------------------
820823

821824
std::vector<std::string> WsjcppLog::getLastLogMessages() {
822-
WsjcppLog::initGlobalVariables();
823-
std::lock_guard<std::mutex> lock(*WsjcppLog::g_WSJCPP_LOG_MUTEX);
825+
std::lock_guard<std::mutex> lock(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logMutex);
824826
std::vector<std::string> vRet;
825-
for (int i = 0; i < g_WSJCPP_LOG_LAST_MESSAGES->size(); i++) {
826-
vRet.push_back(g_WSJCPP_LOG_LAST_MESSAGES->at(i));
827+
for (int i = 0; i < WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.size(); i++) {
828+
vRet.push_back(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages[i]);
827829
}
828830
return vRet;
829831
}
830832

831833
// ---------------------------------------------------------------------
832834

833835
void WsjcppLog::setLogDirectory(const std::string &sDirectoryPath) {
834-
WsjcppLog::g_WSJCPP_LOG_DIR = sDirectoryPath;
835-
if (!WsjcppCore::dirExists(WsjcppLog::g_WSJCPP_LOG_DIR)) {
836-
if (!WsjcppCore::makeDir(WsjcppLog::g_WSJCPP_LOG_DIR)) {
836+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logDir = sDirectoryPath;
837+
if (!WsjcppCore::dirExists(sDirectoryPath)) {
838+
if (!WsjcppCore::makeDir(sDirectoryPath)) {
837839
WsjcppLog::err("setLogDirectory", "Could not create log directory '" + sDirectoryPath + "'");
838840
}
839841
}
840-
WsjcppLog::doLogRotateUpdateFilename(true);
842+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.doLogRotateUpdateFilename(true);
841843
}
842844

843845
// ---------------------------------------------------------------------
844846

845847
void WsjcppLog::setPrefixLogFile(const std::string &sPrefixLogFile) {
846-
WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE = sPrefixLogFile;
847-
WsjcppLog::doLogRotateUpdateFilename(true);
848+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logPrefixFile = sPrefixLogFile;
849+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.doLogRotateUpdateFilename(true);
848850
}
849851

850852
// ---------------------------------------------------------------------
851853

852854
void WsjcppLog::setEnableLogFile(bool bEnable) {
853-
WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE = bEnable;
855+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.enableLogFile = bEnable;
854856
}
855857

856858
// ---------------------------------------------------------------------
857859

858860
void WsjcppLog::setRotationPeriodInSec(long nRotationPeriodInSec) {
859-
WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS = nRotationPeriodInSec;
860-
}
861-
862-
// ---------------------------------------------------------------------
863-
864-
void WsjcppLog::initGlobalVariables() {
865-
// create deque if not created
866-
if (WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES == nullptr) {
867-
WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES = new std::deque<std::string>();
868-
// std::cout << WsjcppCore::currentTime_logformat() + ", " + WsjcppCore::threadId() + " Init last messages deque\r\n";
869-
}
870-
// create mutex if not created
871-
if (WsjcppLog::g_WSJCPP_LOG_MUTEX == nullptr) {
872-
WsjcppLog::g_WSJCPP_LOG_MUTEX = new std::mutex();
873-
// std::cout << WsjcppCore::currentTime_logformat() + ", " + WsjcppCore::threadId() + " Init mutex for log\r\n";
874-
}
875-
}
876-
877-
// ---------------------------------------------------------------------
878-
879-
void WsjcppLog::deinitGlobalVariables() {
880-
delete WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES;
881-
delete WsjcppLog::g_WSJCPP_LOG_MUTEX;
861+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logRotationPeriodInSeconds = nRotationPeriodInSec;
882862
}
883863

884864
// ---------------------------------------------------------------------
885865

886866
void WsjcppLog::add(WsjcppColorModifier &clr, const std::string &sType, const std::string &sTag, const std::string &sMessage) {
887-
WsjcppLog::initGlobalVariables();
888-
WsjcppLog::doLogRotateUpdateFilename();
867+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.doLogRotateUpdateFilename();
889868

890-
std::lock_guard<std::mutex> lock(*WsjcppLog::g_WSJCPP_LOG_MUTEX);
869+
std::lock_guard<std::mutex> lock(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logMutex);
891870
WsjcppColorModifier def(WsjcppColorCode::FG_DEFAULT);
892871

893872
std::string sLogMessage = WsjcppCore::currentTime_logformat() + ", " + WsjcppCore::threadId()
894873
+ " [" + sType + "] " + sTag + ": " + sMessage;
895874
std::cout << clr << sLogMessage << def << std::endl;
896875

897-
g_WSJCPP_LOG_LAST_MESSAGES->push_front(sLogMessage);
898-
while (g_WSJCPP_LOG_LAST_MESSAGES->size() > 50) {
899-
g_WSJCPP_LOG_LAST_MESSAGES->pop_back();
876+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.push_front(sLogMessage);
877+
878+
879+
while (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.size() > 50) {
880+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.pop_back();
900881
}
901882

902-
// log file
903-
if (WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE) {
904-
std::ofstream logFile(WsjcppLog::g_WSJCPP_LOG_FILE, std::ios::app);
883+
// log file
884+
if (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.enableLogFile) {
885+
std::ofstream logFile(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logFile, std::ios::app);
905886
if (!logFile) {
906887
std::cout << "Error Opening File" << std::endl;
907888
return;

src/wsjcpp_core.h

+15-11
Original file line numberDiff line numberDiff line change
@@ -102,17 +102,23 @@ class WsjcppColorModifier {
102102

103103
// ---------------------------------------------------------------------
104104

105+
class WsjcppLogGlobalConf {
106+
public:
107+
WsjcppLogGlobalConf();
108+
void doLogRotateUpdateFilename(bool bForce = false);
109+
std::mutex logMutex;
110+
std::string logDir;
111+
std::string logPrefixFile;
112+
std::string logFile;
113+
bool enableLogFile;
114+
long logStartTime;
115+
long logRotationPeriodInSeconds;
116+
std::deque<std::string> logLastMessages;
117+
};
118+
105119
class WsjcppLog {
106120
public:
107-
static std::string g_WSJCPP_LOG_DIR;
108-
static std::string g_WSJCPP_LOG_PREFIX_FILE;
109-
static std::string g_WSJCPP_LOG_FILE;
110-
static bool g_WSJCPP_ENABLE_LOG_FILE;
111-
static long g_WSJCPP_LOG_START_TIME;
112-
static long g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS;
113-
static std::mutex * g_WSJCPP_LOG_MUTEX;
114-
static std::deque<std::string> * g_WSJCPP_LOG_LAST_MESSAGES;
115-
static void doLogRotateUpdateFilename(bool bForce = false);
121+
static WsjcppLogGlobalConf g_WSJCPP_LOG_GLOBAL_CONF;
116122

117123
static void info(const std::string &sTag, const std::string &sMessage);
118124
static void err(const std::string &sTag, const std::string &sMessage);
@@ -124,8 +130,6 @@ class WsjcppLog {
124130
static void setPrefixLogFile(const std::string &sPrefixLogFile);
125131
static void setEnableLogFile(bool bEnable);
126132
static void setRotationPeriodInSec(long nRotationPeriodInSec);
127-
static void initGlobalVariables();
128-
static void deinitGlobalVariables();
129133

130134
private:
131135
static void add(WsjcppColorModifier &clr, const std::string &sType, const std::string &sTag, const std::string &sMessage);

unit-tests.wsjcpp/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
cmake_minimum_required(VERSION 3.0)
33

44
project(unit-tests C CXX)
5-
add_definitions(-DWSJCPP_APP_VERSION="ut-v0.1.6")
5+
add_definitions(-DWSJCPP_APP_VERSION="ut-v0.1.7")
66
add_definitions(-DWSJCPP_APP_NAME="unit-tests-wsjcpp-core")
77

88
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
@@ -19,7 +19,7 @@ set (WSJCPP_SOURCES "")
1919
find_package(Threads REQUIRED)
2020
list (APPEND WSJCPP_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
2121

22-
# wsjcpp-core:v0.1.6
22+
# wsjcpp-core:v0.1.7
2323
list (APPEND WSJCPP_INCLUDE_DIRS "../src")
2424
list (APPEND WSJCPP_SOURCES "../src/wsjcpp_core.cpp")
2525
list (APPEND WSJCPP_SOURCES "../src/wsjcpp_core.h")

wsjcpp.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ cmake_cxx_standard: 11
33
cmake_minimum_required: 3.0
44

55
name: wsjcpp-core
6-
version: v0.1.6
6+
version: v0.1.7
77
description: Basic Utils for wsjcpp
88
issues: https://github.com/wsjcpp/wsjcpp-core/issues
99
repositories:

0 commit comments

Comments
 (0)