eis/eqpalg/utility/stat_collector.h

95 lines
2.7 KiB
C
Raw Normal View History

// eqpalg/utility/stat_collector.h
#pragma once
#include <chrono>
#include <memory>
#include <string>
#include <vector>
// 前向声明
namespace DAA { class STA; }
using TimePoint = std::chrono::system_clock::time_point;
/**
* @brief
*
* DAA::STA
* - dist_add
* - DB2
* -
*/
class StatCollector {
public:
StatCollector() = default;
~StatCollector();
/**
* @brief
* @param ruleId ID
* @param ruleName
* @param distMode 0=, 1=线, 2=线
* @param isLearning
*/
void configure(const std::string& ruleId, const std::string& ruleName,
int distMode, bool isLearning);
/**
* @brief cron
* @param statValues
* @param now
* @param cronDelayHours cron
* @param lastLoadTime [in/out]
* @return
*/
int processCron(const std::vector<double>& statValues,
TimePoint now, int cronDelayHours,
TimePoint& lastLoadTime);
/**
* @brief
* @param limitDown [out]
* @param limitUp [out]
* @param now
* @param lastLoadTime [out]
* @return true
*/
bool reloadCiDist(double& limitDown, double& limitUp,
TimePoint now, TimePoint& lastLoadTime);
/**
* @brief
*/
void reset(const std::string& ruleId);
bool isConfigured() const { return configured_; }
// ---- task 进程专用接口 ----
/** @brief 确保 STA 实例已初始化(惰性初始化) */
void ensureInitialized();
/** @brief 重置累积数据,供新 task 使用 */
void resetData();
/** @brief 向分布添加单个值 */
void distAdd(double value);
/** @brief 将 task 结果存储到 DB2 (T_SAMPLE_STAT) */
bool taskStoreDb2(const std::string& sampleId);
/** @brief 获取样本统计字符串,用于 T_SAMPLE_MAG */
std::string getSampleStatStr();
/** @brief 向运行统计中添加值 */
void runningStatAdd(double value);
private:
std::unique_ptr<DAA::STA> sta_ptr_;
std::string rule_id_;
std::string rule_name_;
int dist_mode_ = 0;
bool is_learning_ = true;
bool configured_ = false;
};