|
@ -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<MsgProcessContext> 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; |
|
|
|
|
|
} |
|
|
|
|
|
} |