eis/eqpalg/.do_not_use/otheralg/meter_bound.cpp

90 lines
3.3 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.

#include <eqpalg/algs/meter_bound.h>
#include <eqpalg/exp_macro/get_macro_replaced_exp.h>
#include <eqpalg/utility/build_alarm_info.h>
#include <sstream>
MeterBound::MeterBound(const string& name, const mix_cc::json& rule_json,
const string& ruleId, size_t dims)
: Exp(name, rule_json, ruleId, dims) {
logger_.reset(new LOG("MeterBound:" + rule_name_, AUTO_CATCH_PID));
}
MeterBound::~MeterBound() {}
/**
* @brief 重写 init
*
* @return int
*/
int MeterBound::init() {
int ret = 0;
try {
AlgBase::init();
reload_config();
} catch (const std::exception& e) {
std::throw_with_nested(
mix_cc::Exception(-1, "load error", BOOST_CURRENT_LOCATION));
}
return ret;
}
int MeterBound::reload_config() {
string tmp_exp =
rule_json_.at("alarm_option").at("value").at(1).get<std::string>();
exp_str_ = get_macro_replaced_exp(tmp_exp);
error_up_ = rule_json_.at("alarm_option").at("error_up").at(1).get<double>();
error_down_ =
rule_json_.at("alarm_option").at("error_down").at(1).get<double>();
error_str_ = rule_json_.at("interval").at("error").at(1).get<std::string>();
if (exp_act_ == nullptr && exp_str_ != "") {
exp_act_ =
std::make_unique<mix_cc::matheval::Expression>(exp_str_, &mm_vars);
}
return 0;
}
AlarmInfo MeterBound::mon_proc() {
this->value_ = this->exp_act_->evaluate();
if (this->value_ > this->error_up_) {
//报警时间 依赖query_time_range_ 设置
this->query_time_range_.set_left(this->query_time_range_.get_right() -
this->delay_time_);
std::stringstream ss1;
std::stringstream ss2;
ss1 << fixed << setprecision(2) << this->value_;
ss2 << fixed << setprecision(2) << this->error_up_;
string msg = this->rule_name_ + " " + this->error_str_ + ":" + ss1.str() +
"大于" + ss2.str();
this->logger_->Debug() << msg << std::endl;
return utility::build_alarm_info(MsgLevel::ERROR, rule_id_, rule_name_,
"MeterBound", msg, query_time_range_);
} else if (this->value_ < this->error_down_) {
//报警时间 依赖query_time_range_ 设置
this->query_time_range_.set_left(this->query_time_range_.get_right() -
this->delay_time_);
std::stringstream ss1;
std::stringstream ss2;
ss1 << fixed << setprecision(2) << this->value_;
ss2 << fixed << setprecision(2) << this->error_down_;
string msg = this->rule_name_ + " " + this->error_str_ + ":" + ss1.str() +
"小于" + ss2.str();
this->logger_->Debug() << msg << std::endl;
return utility::build_alarm_info(MsgLevel::ERROR, rule_id_, rule_name_,
"MeterBound", msg, query_time_range_);
}
return AlarmInfo{};
}
mix_cc::json MeterBound::exec_cron() {}
AlarmInfo MeterBound::cron_proc() {}
void MeterBound::reset_dev_data() {
auto reSult = m_memclient.Insert(this->Jkey_.c_str(), this->Jvalue_.c_str());
auto reSult2 = m_memclient.Insert(string(this->Jkey_ + "_id").c_str(),
this->rule_id_.c_str());
if (1 != reSult || 1 != reSult2) {
this->logger_->Debug() << "m_memclient.Insert异常[0,set data "
"fail;-1,key=null or value=null] Insert1:"
<< reSult << " Insert2:" << reSult2 << endl;
}
}