|
|
@ -4,12 +4,14 @@ |
|
|
|
#include <errno.h>
|
|
|
|
|
|
|
|
#include "iflytop/core/components/fileutils.hpp"
|
|
|
|
#include "configs/project_setting.hpp"
|
|
|
|
using namespace iflytop; |
|
|
|
using namespace core; |
|
|
|
using namespace std; |
|
|
|
|
|
|
|
#define LOG_STORGE_PATH "./disinfection_logs/"
|
|
|
|
|
|
|
|
|
|
|
|
DisinfectionLogger::DisinfectionLogger() {} |
|
|
|
DisinfectionLogger::~DisinfectionLogger() { |
|
|
|
if (m_logfile.is_open()) { |
|
|
@ -37,9 +39,18 @@ DisinfectionLogsManager::~DisinfectionLogsManager() {} |
|
|
|
|
|
|
|
shared_ptr<DisinfectionLogger> DisinfectionLogsManager::createNewLogger(string log_file_name) { |
|
|
|
system(fmt::format("mkdir -p {}", LOG_STORGE_PATH).c_str()); |
|
|
|
shared_ptr<DisinfectionLogger> logger = make_shared<DisinfectionLogger>(); |
|
|
|
logger->initialize(fmt::format("{}{}.csv", LOG_STORGE_PATH, log_file_name)); |
|
|
|
return logger; |
|
|
|
shared_ptr<DisinfectionLogger> dslogger = make_shared<DisinfectionLogger>(); |
|
|
|
dslogger->initialize(fmt::format("{}{}.csv", LOG_STORGE_PATH, log_file_name)); |
|
|
|
|
|
|
|
vector<string> files; |
|
|
|
list_dir_csvfile(LOG_STORGE_PATH, files); |
|
|
|
|
|
|
|
if (files.size() > MAX_DISINFECTIONLOGGER_FILE_NUM) { |
|
|
|
logger->info("delete old loggers:{}", files.back()); |
|
|
|
deleteReport(files.back()); |
|
|
|
} |
|
|
|
|
|
|
|
return dslogger; |
|
|
|
} |
|
|
|
|
|
|
|
static void split(const string& s, vector<string>& sv, const char delim = ' ') { |
|
|
@ -54,6 +65,7 @@ static void split(const string& s, vector<string>& sv, const char delim = ' ') { |
|
|
|
} |
|
|
|
void DisinfectionLogsManager::list_dir_csvfile(string path, vector<string>& sv) { |
|
|
|
sv.clear(); |
|
|
|
#if 0
|
|
|
|
DIR* dir; |
|
|
|
struct dirent* ptr; |
|
|
|
if ((dir = opendir(path.c_str())) == NULL) { |
|
|
@ -70,6 +82,32 @@ void DisinfectionLogsManager::list_dir_csvfile(string path, vector<string>& sv) |
|
|
|
} |
|
|
|
} |
|
|
|
closedir(dir); |
|
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 读取文件夹下所有文件,并按照时间排序 |
|
|
|
*/ |
|
|
|
|
|
|
|
DIR* dir; |
|
|
|
struct dirent* ptr; |
|
|
|
if ((dir = opendir(path.c_str())) == NULL) { |
|
|
|
logger->error("Open dir {} error...", path); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
vector<string> files; |
|
|
|
while ((ptr = readdir(dir)) != NULL) { |
|
|
|
if (ptr->d_name[0] == '.') continue; |
|
|
|
if (ptr->d_type == 8) { |
|
|
|
string filename = ptr->d_name; |
|
|
|
if (filename.find(".csv") != string::npos) { |
|
|
|
files.push_back(filename); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
sort(files.begin(), files.end(), [](string a, string b) { return a > b; }); |
|
|
|
|
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
@ -96,4 +134,11 @@ nlohmann::json DisinfectionLogsManager::getLoggerList() { |
|
|
|
loggerlist.push_back(file); |
|
|
|
} |
|
|
|
return loggerlist; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void DisinfectionLogsManager::deleteReport(string log_file_name) { system(fmt::format("rm -f {}{}.csv", LOG_STORGE_PATH, log_file_name).c_str()); } |
|
|
|
void DisinfectionLogsManager::deleteReports(vector<string> log_file_names) { |
|
|
|
for (auto& log_file_name : log_file_names) { |
|
|
|
deleteReport(log_file_name); |
|
|
|
} |
|
|
|
} |