#include "disinfection_logs_manager.hpp" #include #include #include "iflytop/core/components/fileutils.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()) { m_logfile.close(); } } void DisinfectionLogger::initialize(string log_file_name) { // logger->info("create loggers:{}", log_file_name); m_logfile.open(log_file_name, ios::out | ios::binary | ios::trunc); if (!m_logfile.is_open()) { logger->error("create loggers:{} failed", log_file_name); } } void DisinfectionLogger::write(string log) { m_logfile.write(log.c_str(), log.size()); if (m_logfile.fail()) { logger->error("write log failed:{}", strerror(errno)); } m_logfile.flush(); } DisinfectionLogsManager::DisinfectionLogsManager(/* args */) {} DisinfectionLogsManager::~DisinfectionLogsManager() {} shared_ptr DisinfectionLogsManager::createNewLogger(string log_file_name) { system(fmt::format("mkdir -p {}", LOG_STORGE_PATH).c_str()); shared_ptr logger = make_shared(); logger->initialize(fmt::format("{}{}.csv", LOG_STORGE_PATH, log_file_name)); return logger; } static void split(const string& s, vector& sv, const char delim = ' ') { sv.clear(); istringstream iss(s); string temp; while (getline(iss, temp, delim)) { sv.push_back(temp); } return; } void DisinfectionLogsManager::list_dir_csvfile(string path, vector& sv) { sv.clear(); DIR* dir; struct dirent* ptr; if ((dir = opendir(path.c_str())) == NULL) { logger->error("Open dir {} error...", path); return; } 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) { sv.push_back(filename); } } } closedir(dir); return; } nlohmann::json DisinfectionLogsManager::getlogger(string log_file_name) { string content = FileUtils().readFileAsString(fmt::format("{}{}.csv", LOG_STORGE_PATH, log_file_name)); nlohmann::json csvcontent; vector lines; split(content, lines, '\n'); for (auto& line : lines) { csvcontent["content"].push_back(line); } return csvcontent; } nlohmann::json DisinfectionLogsManager::getLoggerList() { // // 1. get all files in LOG_STORGE_PATH vector files; list_dir_csvfile(LOG_STORGE_PATH, files); nlohmann::json loggerlist; for (auto& file : files) { // 获取文件名去掉.csv file = file.substr(0, file.find(".csv")); loggerlist.push_back(file); } return loggerlist; }