XNSim/XNMonitorServer/DataCollect.h

52 lines
1.4 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "DataMonitor.h"
class DataCollect
{
public:
DataCollect();
~DataCollect();
public:
bool Initialize(std::vector<MonitorDataInfo> collectDataInfos, std::string dcsFilePath);
void start();
void stop();
/**
* @brief 从CSV文件读取下一行数据并更新执行时间
* 如果文件读取完毕,将停止线程
*/
void updateData();
bool isRunning() const;
private:
/**
* @brief 线程执行函数
*/
void threadFunc();
void parseHeaderField(const std::string &headerField);
private:
std::string m_outputFileName;
std::ofstream m_outputFile;
std::vector<MonitorDataInfo> m_collectDataInfos;
std::vector<CSVHeaderField> m_headerFields;
std::thread m_thread; ///< 数据采集线程
std::atomic<bool> m_running; ///< 线程运行标志
std::mutex m_mutex; ///< 互斥锁
std::condition_variable m_cv; ///< 条件变量
std::unordered_map<std::string, DataMonitorBasePtr>
m_alreadyStartedMonitors; ///< 已经启动的数据监控器
std::unordered_map<std::string, DataMonitorBasePtr>
m_notStartedMonitors; ///< 未启动的数据监控器
std::unordered_map<std::string, std::unordered_map<std::string, std::string>>
m_data; ///< 采集到的数据
std::atomic<int64_t> m_nextExecuteTime; ///< 下一次执行的时间点
int m_collectDuration; ///< 采集时长(秒)
int m_collectFrequency; ///< 采集频率Hz
};