eis/eqpalg/threads/manager.h
Huamonarch 224c2c45c4 Remove irrelevant comments from eqpalg source files
Cleaned 66 files across all eqpalg subdirectories:
- Removed commented-out dead code
- Removed redundant Chinese inline comments that restate variable/function names
- Removed trailing ///< annotations on self-explanatory fields
- Removed namespace closing comments
- Preserved all file headers, Doxygen documentation, and logic explanations
- No code changes — only comment removal
2026-05-09 13:30:09 +08:00

174 lines
4.4 KiB
C++
Raw 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
/**
* @file manager.h
* @brief 线程管理
* @author your name (you@domain.com)
* @version 0.1
* @date 2024-03-28
*
* Copyright: Baosight Co. Ltd.
* DO NOT COPY/USE WITHOUT PERMISSION
*
*/
#include <eqpalg/build_algorithm.h>
#include <eqpalg/threads/handler_exec.h>
#include <eqpalg/utility/alarm_handler.hpp>
#include <memory>
#include <shared_mutex>
#include <string>
#include <thread>
#include <utility>
namespace threads {
/**
* @brief 线程句柄管理器
*/
class Manager {
public:
/**
* @brief Construct a new Manager object
*/
Manager();
/**
* @brief Destroy the Manager object
* 并销毁其所管理的每一个线程实例
*/
~Manager();
protected:
std::map<std::string, std::tuple<int, std::string, mix_cc::json, bool, double,
double, int>>
stored_cfg_data_;
std::vector<std::tuple<std::thread::id, std::string>>
tid_2_thread_name_;
bool is_running_;
bool is_start_;
std::unique_ptr<LOG> logger_;
std::unique_ptr<LOG> alarm_logger_;
map<string, string> rule_alg_id_mapping_;
std::shared_mutex handles_mutex;
map<std::string, std::unique_ptr<HandlerExec>>
handles_;
std::unique_ptr<std::thread> r_thread_;
std::unique_ptr<AlarmHandler> alarm_handler_ptr_;
int thread_num_ = 0;
public:
/**
* @brief 保持参数信息到数据集合中
* @param ruleId 规则id
* @param alg_id 算法id
* @param name 规则名
* @param rule_json 规则配置参数
* @param usable 规则启停标记
* @param padding_low 区间下 弃用
* @param padding_up 区间上 弃用
* @param task_seq 线程序号
* @return int 0-正常;其它-异常
*/
int storage(const string &ruleId, int alg_id, const string &name,
const mix_cc::json &rule_json, bool usable, double padding_low,
double padding_up, int task_seq);
/**
* @brief 程序启动时,载入数据所使用的方法
* @param ruleId 算法实例id
* @return int
*/
int load(const string &ruleId);
/**
* @brief 启动载入的算法所对应的线程 mon
* @return int
*/
int start();
/**
* @brief 在算法运行过程中,把对应的数据添加到具体线程中
* @param ruleId 算法实例id
* @return int
*/
int attach(const string &ruleId);
/**
* @brief 重置统计
* 主要用于 6-累计时间
* 7-出现次数
* @param ruleId My Param doc
* @return int
*/
int reset(const string &ruleId);
/**
* @brief 取消对应规则
* @param ruleId 要取消的算法实例id
* @return int
*/
int detach(const string &ruleId);
/**
* @brief 单次执行
* @param ruleId 算法实例规则id
* @param time_start 单次执行的开始时间
* @param time_end 单次执行的结束时间
* @return int
*/
int exec_task(std::string ruleId, TimePoint time_start, TimePoint time_end);
/**
* @brief 启用算法/停用算法
* 应该考虑两个方面1.当前运行线程中的算法启停用2.stored_cfg_data_的维护以便停机开机后保持算法的启停用状态
* @param ruleId 算法id
* @param usable 是否停用/启用
* @return int
*/
int enable(std::string ruleId, bool usable);
/**
* @brief 删除存储的算法实例信息
* @param ruleId My Param doc
* @return int
*/
int delete_instance(std::string ruleId);
protected:
/**
* @brief 把数据实例化成算法指针,并完善对应关系
* @param ruleId 算法实例id
* @return int
*/
int build_alg_to_handle(const string &ruleId);
/**
* @brief 完全抹除某个算法线程
* @param alg_thread_name 算法线程名
* @return int
*/
int detach_full_alg(std::string alg_thread_name);
public:
/**
* @brief
* @param ruleid 规则信息
* @param lb 下限
* @param ub 上限
* @param va 当前值
* @param stime 开始时间
* @param etime 结束时间
*/
void update_limit_alarm(std::string ruleid, double lb, double ub, double va,
int64_t stime, int64_t etime);
/**
* @brief Get the thread size object
* @return int
*/
int get_thread_size();
};
}