eis/eqpalg/threads/handler_exec.h

190 lines
4.9 KiB
C
Raw Normal View History

#pragma once
/**
* @file eqpalg/threads/handler_exec.h
* @brief
* @author Cat (null.null.null@qq.com)
* @version 0.1
* @date 2021-08-18
*
* Copyright: Baosight Co. Ltd.
* DO NOT COPY/USE WITHOUT PERMISSION
*
*/
#include <boost/utility.hpp>
#include <chrono>
#include <eqpalg/alg_base.h>
#include <eqpalg/define/public.h>
#include <eqpalg/gb_logger.h>
#include <map>
#include <memory>
#include <mutex>
#include <queue>
#include <string>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>
namespace threads {
using std::string;
using namespace baosight;
using namespace std::chrono;
/**
* @brief
* A
* 1.
* 2.
* 3.
* 使-
*
* B
*
* C
*/
class HandlerExec {
private:
static int extractCTaskNumberRegexGeneric(std::string input);
private:
std::unique_ptr<LOG> logger_;
std::unique_ptr<std::thread> r_thread_;
public:
/**
* @brief Construct a new Handler Exec object
* @param alg_name id
*/
HandlerExec(const string &alg_name);
/**
* @brief Destroy the Handler Exec object
*/
~HandlerExec();
public:
/**
* @brief -
*/
std::thread::id run_thread();
/**
* @brief
*/
int destroy() {
is_running_ = false;
return 0;
}
/**
* @brief Get the is running object
* @return true
* @return false
*/
bool get_is_running() { return is_running_; }
/**
* @brief id
* @return std::vector<std::string>
*/
std::vector<std::string> get_rule_ids();
/**
* @brief
* @param alg_pointer
* @return int
*/
int load(std::unique_ptr<AlgBase> &&pointer);
/**
* @brief
* @param alg_pointer
* @return int
*/
int attach(std::unique_ptr<AlgBase> &&alg_pointer);
/**
* @brief
* @param ruleId id
* @return int
*/
int detach(string ruleId);
/**
* @brief
* 6-
* 7-
* @param ruleId My Param doc
* @return int
*/
int reset(string ruleId);
/**
* @brief
* @param ruleId id
* @param usable
* @return int
*/
int set_usable(string ruleId, bool usable);
/**
* @brief
* @return int
*/
int submit(std::unique_ptr<AlgBase> &&instance_ptr, TimePoint begin_time,
TimePoint end_time);
/**
* @brief 线
* @return int
*/
int size() { return this->rule_pointers_.size(); }
private:
/**
* @brief 线线
* @return int
*/
int event_handler();
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);
private:
static int instanceCount; // 声明静态成员变量
private:
int alg_id_; ///< 算法id
bool is_running_; ///< 当前线程是否运行
string thread_name_; ///< 当前线程名称
// std::map<string, std::unique_ptr<AlgBase>>
// rule_pointers_; ///< 规则指针,同一个[algid+数据源]下的所有算法
std::unordered_map<string, std::unique_ptr<AlgBase>>
rule_pointers_; ///< 规则指针,同一个[algid+数据源]下的所有算法
std::map<string, mix_cc::time_range_t>
time_ranges_; ///< task保存的时间范围信息
std::mutex mutex_; ///< mutex
// 用来执行各种操作的的队列
std::queue<std::unique_ptr<AlgBase>> attach_queue_; ///< 新增算法的队列
std::queue<std::string> detach_queue_; ///< 删除算法的队列
std::queue<std::string> reset_queue_; ///< 重置统计数的算法的队列
std::queue<std::tuple<std::string, bool>>
usable_queue_; ///< 设置算法可用性的队列
std::queue<std::tuple<std::unique_ptr<AlgBase>, mix_cc::time_range_t>>
once_exec_queue_; ///< task单次执行的队列
TimePoint run_t1; //
TimePoint run_t2;
int64_t cost_time = 0;
};
} // namespace threads