eis/eqpalg/utility/stat_collector.h
Huamonarch 4f8eecd828 refactor: 提取 StatCollector 统计学习组件
将 ExpBase::cron_proc() 中的 DAA::STA 统计学习逻辑提取到独立的
StatCollector 工具类,统一管理分布统计的生命周期(样本累积、分布
初始化、DB2 持久化、置信区间更新)。同时将 exec_task() 与
task_mon_pro() 中的任务相关 STA 操作也委托给 StatCollector。

新增:
- eqpalg/utility/stat_collector.h  -- StatCollector 接口
- eqpalg/utility/stat_collector.cpp -- StatCollector 实现

修改:
- eqpalg/algs/exp_base.h  -- 替换 sta_ptr_ 为 stat_collector_
- eqpalg/algs/exp_base.cpp -- cron_proc/reload_ci_dist/reset_dev_data/
                               exec_task/task_mon_pro 委托给 StatCollector
2026-05-15 14:21:36 +08:00

95 lines
2.7 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.

// 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;
};