eis/eqpalg/threads/manager.h

174 lines
4.9 KiB
C
Raw Normal View History

#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_; ///< 进程id到进程名的关系
bool is_running_; ///< 是否正在运行
bool is_start_; ///< 是否调用了start
std::unique_ptr<LOG> logger_; ///< 本地logger
std::unique_ptr<LOG> alarm_logger_; ///< 本地alarm_logger_
map<string, string> rule_alg_id_mapping_; ///< id和规则的对应关系
std::shared_mutex handles_mutex; // 针对handles_的互斥锁
map<std::string, std::unique_ptr<HandlerExec>>
handles_; ///< 监控程序的handles每个alg_id_datasource_seq一个handle
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();
};
} // namespace threads