From 6c24a2cdb92c18a3ccb1845d0ca969e77d012758 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 13 Aug 2024 15:04:57 +0800 Subject: [PATCH] update --- app_protocols/apperrorcode/apperrorcode.hpp | 2 + appsrc/baseservice/baseservice.hpp | 5 +- appsrc/baseservice/udisk_mgr_service.cpp | 39 ++++++++++++ appsrc/baseservice/udisk_mgr_service.hpp | 42 +++++++++++++ appsrc/service/audit_mgr_service.cpp | 94 ++++++++++++++++++++++++++++ appsrc/service/audit_mgr_service.hpp | 30 +++++++++ appsrc/service/disinfection_logs_service.hpp | 1 - appsrc/service/main_control_service.cpp | 4 +- appsrc/service/udisk_mgr_service.cpp | 39 ------------ appsrc/service/udisk_mgr_service.hpp | 42 ------------- 10 files changed, 213 insertions(+), 85 deletions(-) create mode 100644 appsrc/baseservice/udisk_mgr_service.cpp create mode 100644 appsrc/baseservice/udisk_mgr_service.hpp create mode 100644 appsrc/service/audit_mgr_service.cpp create mode 100644 appsrc/service/audit_mgr_service.hpp delete mode 100644 appsrc/service/udisk_mgr_service.cpp delete mode 100644 appsrc/service/udisk_mgr_service.hpp diff --git a/app_protocols/apperrorcode/apperrorcode.hpp b/app_protocols/apperrorcode/apperrorcode.hpp index 4eba810..1c5dc7a 100644 --- a/app_protocols/apperrorcode/apperrorcode.hpp +++ b/app_protocols/apperrorcode/apperrorcode.hpp @@ -56,6 +56,8 @@ typedef enum { kappe_not_detect_udisk = 10013, // U盘读写错误 kappe_udisk_wr_fail = 10014, + // + kappe_file_operate_error = 10015, } apperror_t; } diff --git a/appsrc/baseservice/baseservice.hpp b/appsrc/baseservice/baseservice.hpp index ef90c7d..5355883 100644 --- a/appsrc/baseservice/baseservice.hpp +++ b/appsrc/baseservice/baseservice.hpp @@ -1,9 +1,10 @@ #pragma once #include "appbase/dep.hpp" // +#include "appcomponents/app_errorcode_mgr/app_errorcode_mgr.hpp" +#include "appcomponents/canchannel/transmit_disinfection_can_master.hpp" #include "db/db_service.hpp" #include "devicestate/device_state_service.hpp" #include "front_msg_processer/front_msg_processer.hpp" #include "iflytop_front_end_service/iflytop_front_end_service.hpp" -#include "appcomponents/app_errorcode_mgr/app_errorcode_mgr.hpp" -#include "appcomponents/canchannel/transmit_disinfection_can_master.hpp" +#include "udisk_mgr_service.hpp" diff --git a/appsrc/baseservice/udisk_mgr_service.cpp b/appsrc/baseservice/udisk_mgr_service.cpp new file mode 100644 index 0000000..d78bb8e --- /dev/null +++ b/appsrc/baseservice/udisk_mgr_service.cpp @@ -0,0 +1,39 @@ +#include "udisk_mgr_service.hpp" +using namespace iflytop; +#define IF_ERROR_RETURN(x) \ + if (!x) { \ + return err::kappe_udisk_wr_fail; \ + } +void UDiskMgrService::initialize() {} + +bool UDiskMgrService::isDetectedUDisk(string& diskpath) { + /** + * @brief 检查/dev/sda是否存在 + */ + // 检查 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh 是否存在 + for (int i = 0; i < 8; i++) { + string dev = fmt::format("/dev/sd{}", (char)('a' + i)); + logger->info("check dev: {}", dev); + if (access(dev.c_str(), F_OK) == 0) { + string subdev = fmt::format("/dev/sd{}1", (char)('a' + i)); + if (access(subdev.c_str(), F_OK) == 0) { + diskpath = subdev; + } else { + diskpath = dev; + } + m_ismounted = true; + return true; + } + } + return false; +} +bool UDiskMgrService::dosystem(string cmd) { + logger->info("do cmd: {}", cmd); + int ret = system(cmd.c_str()); + if (ret == 0) { + return true; + } else { + logger->error("do cmd: {} failed,{}", cmd, ret); + return false; + } +} diff --git a/appsrc/baseservice/udisk_mgr_service.hpp b/appsrc/baseservice/udisk_mgr_service.hpp new file mode 100644 index 0000000..eb03e0c --- /dev/null +++ b/appsrc/baseservice/udisk_mgr_service.hpp @@ -0,0 +1,42 @@ +// +// Created by zwsd +// + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "appbase/dep.hpp" + +namespace iflytop { + +class UDiskMgrService { + ENABLE_LOGGER(UDiskMgrService); + + private: + bool m_ismounted = false; + + unique_ptr m_thread; + + mutex lock_; + + public: + UDiskMgrService() {}; + ~UDiskMgrService() {}; + + bool isDetectedUDisk(string& diskpath); + void initialize(); + + private: + bool dosystem(string cmd); +}; + +}; // namespace iflytop \ No newline at end of file diff --git a/appsrc/service/audit_mgr_service.cpp b/appsrc/service/audit_mgr_service.cpp new file mode 100644 index 0000000..4257687 --- /dev/null +++ b/appsrc/service/audit_mgr_service.cpp @@ -0,0 +1,94 @@ +#include "audit_mgr_service.hpp" +using namespace iflytop; + +#define EXPORT_PATH "/mnt/exportdata/Transmit/" +#define IF_ERROR_RETURN(x) \ + if (!x) { \ + return err::kappe_udisk_wr_fail; \ + } + +static string getTime() { + struct tm tm = {0}; + + time_t t = ::time(nullptr); + struct tm* tmp = localtime_r(&t, &tm); + return fmt::format("{:0>4}{:0>2}{:0>2}{:0>2}{:0>2}{:0>2}", tm.tm_year + 1900, // + tm.tm_mon + 1, // + tm.tm_mday, // + tm.tm_hour, // + tm.tm_min, tm.tm_sec); +} + +void AuditMgrService::initialize() { + GET_TO_SERVICE(m_db); + GET_TO_SERVICE(m_udiskMgr); + + REGFN(AuditMgrService, exportData); +} +int AuditMgrService::callExportData() { + string diskpath; + if (!m_udiskMgr->isDetectedUDisk(diskpath)) { + logger->error("no disk detected"); + return err::kappe_not_detect_udisk; + } + + logger->info("diskpath: {}", diskpath); + + /** + * @brief 创建导出文件csv + */ + + auto records = m_db->getAllUserBehaviorRecord(); + string filename = fmt::format("/tmp/AUDIT{}.csv", getTime()); + + ofstream ofs(filename); + if (!ofs.is_open()) { + logger->error("open file {} failed", filename); + // return err::ksys_open_file_error; + return err::kappe_file_operate_error; + } + + ofs << "date,uid,operation" << endl; + for (auto& record : records) { + ofs << fmt::format("{},{},\"{}{}\"", record->date, record->uid, db::user_behavior_to_str((user_behavior_t)record->behavior), record->behaviorinfo) << endl; + } + ofs.close(); + // 文件编码转换 + IF_ERROR_RETURN(dosystem(fmt::format("iconv -f UTF-8 -tgb18030 {} -o {}", filename, filename + ".1"))); + dosystem(fmt::format("mv {} {}", filename + ".1", filename)); + + /** + * @brief 拷贝文件到U盘 + */ + // 创建目录 + IF_ERROR_RETURN(dosystem(fmt::format("rm -rf /mnt/exportdata"))); + IF_ERROR_RETURN(dosystem(fmt::format("mkdir -p /mnt/exportdata"))); + // 挂载目录 + IF_ERROR_RETURN(dosystem(fmt::format("mount {} /mnt/exportdata", diskpath))); + // 拷贝文件 + IF_ERROR_RETURN(dosystem(fmt::format("mkdir -p /mnt/exportdata/Transmit/"))); + IF_ERROR_RETURN(dosystem(fmt::format("cp -rf {} /mnt/exportdata/Transmit/", filename))); + // 卸载目录 + IF_ERROR_RETURN(dosystem(fmt::format("umount /mnt/exportdata"))); + // 删除目录 + IF_ERROR_RETURN(dosystem(fmt::format("rm -rf /mnt/exportdata"))); + return err::ksucc; +} + +void AuditMgrService::exportData(shared_ptr cxt) { + int ret = callExportData(); + if (ret != err::ksucc) { + cxt->ackcode = ret; + } +} + +bool AuditMgrService::dosystem(string cmd) { + logger->info("do cmd: {}", cmd); + int ret = system(cmd.c_str()); + if (ret == 0) { + return true; + } else { + logger->error("do cmd: {} failed,{}", cmd, ret); + return false; + } +} diff --git a/appsrc/service/audit_mgr_service.hpp b/appsrc/service/audit_mgr_service.hpp new file mode 100644 index 0000000..0deedfe --- /dev/null +++ b/appsrc/service/audit_mgr_service.hpp @@ -0,0 +1,30 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +// +#include "baseservice/baseservice.hpp" +namespace iflytop { +class AuditMgrService : public enable_shared_from_this { + ENABLE_LOGGER(AuditMgrService); + + shared_ptr m_db; + shared_ptr m_udiskMgr; + + public: + void initialize(); + + private: + void exportData(shared_ptr cxt); + int callExportData(); + + bool dosystem(string cmd); +}; + +} // namespace iflytop diff --git a/appsrc/service/disinfection_logs_service.hpp b/appsrc/service/disinfection_logs_service.hpp index cf7bbc3..e53e6a9 100644 --- a/appsrc/service/disinfection_logs_service.hpp +++ b/appsrc/service/disinfection_logs_service.hpp @@ -12,7 +12,6 @@ #include "appbase/dep.hpp" #include "baseservice/baseservice.hpp" #include "iflytop/core/components/zcsv/zcsv.hpp" -#include "udisk_mgr_service.hpp" namespace iflytop { diff --git a/appsrc/service/main_control_service.cpp b/appsrc/service/main_control_service.cpp index 8af0787..9bf2ae0 100644 --- a/appsrc/service/main_control_service.cpp +++ b/appsrc/service/main_control_service.cpp @@ -2,13 +2,13 @@ #include "appbase/project_setting_mgr.hpp" #include "baseservice/baseservice.hpp" +#include "service/audit_mgr_service.hpp" #include "service/device_info_mgr_service.hpp" #include "service/disinfection_logs_service.hpp" #include "service/os_mgr_service.hpp" #include "service/setting_mgr_service.hpp" #include "service/test_page_mgr_service.hpp" #include "service/user_mgr_service.hpp" -#include "udisk_mgr_service.hpp" using namespace iflytop; using namespace core; @@ -28,9 +28,11 @@ void MainControlService::initialize() { BUILD_AND_REG_SERRVICE(FrontMsgProcesser); BUILD_AND_REG_SERRVICE(DBService); BUILD_AND_REG_SERRVICE(DeviceStateService); + // BUILD_AND_REG_SERRVICE(UDiskMgrService); // + BUILD_AND_REG_SERRVICE(AuditMgrService); BUILD_AND_REG_SERRVICE(DisinfectionLogsService); // Device BUILD_AND_REG_SERRVICE(UartPrinter); diff --git a/appsrc/service/udisk_mgr_service.cpp b/appsrc/service/udisk_mgr_service.cpp deleted file mode 100644 index d78bb8e..0000000 --- a/appsrc/service/udisk_mgr_service.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "udisk_mgr_service.hpp" -using namespace iflytop; -#define IF_ERROR_RETURN(x) \ - if (!x) { \ - return err::kappe_udisk_wr_fail; \ - } -void UDiskMgrService::initialize() {} - -bool UDiskMgrService::isDetectedUDisk(string& diskpath) { - /** - * @brief 检查/dev/sda是否存在 - */ - // 检查 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh 是否存在 - for (int i = 0; i < 8; i++) { - string dev = fmt::format("/dev/sd{}", (char)('a' + i)); - logger->info("check dev: {}", dev); - if (access(dev.c_str(), F_OK) == 0) { - string subdev = fmt::format("/dev/sd{}1", (char)('a' + i)); - if (access(subdev.c_str(), F_OK) == 0) { - diskpath = subdev; - } else { - diskpath = dev; - } - m_ismounted = true; - return true; - } - } - return false; -} -bool UDiskMgrService::dosystem(string cmd) { - logger->info("do cmd: {}", cmd); - int ret = system(cmd.c_str()); - if (ret == 0) { - return true; - } else { - logger->error("do cmd: {} failed,{}", cmd, ret); - return false; - } -} diff --git a/appsrc/service/udisk_mgr_service.hpp b/appsrc/service/udisk_mgr_service.hpp deleted file mode 100644 index eb03e0c..0000000 --- a/appsrc/service/udisk_mgr_service.hpp +++ /dev/null @@ -1,42 +0,0 @@ -// -// Created by zwsd -// - -#pragma once -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "appbase/dep.hpp" - -namespace iflytop { - -class UDiskMgrService { - ENABLE_LOGGER(UDiskMgrService); - - private: - bool m_ismounted = false; - - unique_ptr m_thread; - - mutex lock_; - - public: - UDiskMgrService() {}; - ~UDiskMgrService() {}; - - bool isDetectedUDisk(string& diskpath); - void initialize(); - - private: - bool dosystem(string cmd); -}; - -}; // namespace iflytop \ No newline at end of file