eis/eqpalg/utility/eqp_stat.cc
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

252 lines
8.0 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.

#include <eqpalg/table_struct/fv_result_latest.h>
#include <eqpalg/table_struct/t_rule_cfg.h>
#include <eqpalg/table_struct/t_rule_result.h>
#include <eqpalg/table_struct/t_rule_sample_1d.h>
#include <eqpalg/utility/eqp_stat.h>
#include <mix_cc/sql.h>
#include <mix_cc/sql/database/db2_t.h>
#include <mutex>
/*mapRuleStat 单例*/
namespace {
std::mutex up_mutex{};
RuleStatShm::MapRuleStat mapRuleStat;
RuleStatShm::RuleStat rule_stat;
};
EqpStat::EqpStat() {
logger_ = std::make_unique<LOG>("EqpStat");
logger_->Debug() << "EqpStat::EqpStat()" << endl;
}
EqpStat::~EqpStat() { logger_->Info() << "EqpStat::~EqpStat()" << std::endl; }
void EqpStat::get_cfg_rules() {
T_RULE_CFG t_rule_cfg;
auto sql_statement = select(t_rule_cfg.ruleId()).from(t_rule_cfg);
auto rule_list_maybe = mix_cc::sql::exec<db2_t, T_RULE_CFG>(sql_statement);
if (rule_list_maybe.is_just()) {
auto rule_list = rule_list_maybe.unsafe_get_just();
logger_->Debug() << "cfg_rules_ size:" << cfg_rules_.size() << endl;
cfg_rules_.clear();
if (!rule_list.empty()) {
int num = rule_list.size();
logger_->Debug() << "rules num:" << num << endl;
for (int i = 0; i < num; i++) {
cfg_rules_.push_back(rule_list[i].ruleId);
}
} else {
logger_->Info() << "no rule in database cfg!" << std::endl;
}
} else {
logger_->Error() << "EqpStat::get_cfg_rules()"
<< ", select查询异常" << std::endl;
}
auto res = this->stat_find_no_ruleid();
if (!res.empty()) {
for (auto item : res) {
this->delete_stat(item);
}
}
}
bool EqpStat::update_dynamic(std::string ruleid,
const RuleStatShm::RuleStat &rule_stat) {
try {
return mapRuleStat.update_dynamic(ruleid, rule_stat, true);
} catch (const std::exception &e) {
logger_->Error() << "ruleid:" << ruleid << "EqpStat::update_dynamic ERROR!"
<< e.what() << std::endl;
return false;
}
}
bool EqpStat::update_static(std::string ruleid, bool is_times) {
try {
std::lock_guard<std::mutex> guard(up_mutex);
rule_stat.alarm_times = select_alarm_by_ruleid(ruleid);
rule_stat.dev_coder = select_dev_coder_by_ruleid(ruleid);
rule_stat.running_time = is_times ? select_running_by_ruleid(ruleid) : 0;
rule_stat.shear_times = is_times ? select_times_by_ruleid(ruleid) : 0;
rule_stat.last_alarm_time = select_latest_alarm_by_ruleid(ruleid);
mapRuleStat.update_dynamic(ruleid, rule_stat, false);
return true;
} catch (const std::exception &e) {
logger_->Error() << "EqpStat::update_static() ERROR!" << e.what()
<< std::endl;
return false;
}
}
bool EqpStat::update_static() {
try {
bool res = true;
for (auto ruleid : cfg_rules_) {
res = res & this->update_static(ruleid, true);
}
return res;
} catch (const std::exception &e) {
logger_->Error() << "EqpStat::update_static() ERROR!" << e.what()
<< std::endl;
return false;
}
}
bool EqpStat::update_stat(std::string ruleid,
const RuleStatShm::RuleStat &rule_stat) {
try {
return mapRuleStat.update(ruleid, rule_stat);
} catch (const std::exception &e) {
logger_->Error() << "ruleid:" << ruleid << "EqpStat::update_stat ERROR!"
<< e.what() << std::endl;
return false;
}
}
bool EqpStat::add_stat_values(std::string ruleid, const double &rule_stat) {
try {
return mapRuleStat.add_stat_value(ruleid, rule_stat);
} catch (const std::exception &e) {
logger_->Error() << "ruleid:" << ruleid << "EqpStat::add_stat_values ERROR!"
<< e.what() << std::endl;
return false;
}
}
bool EqpStat::get_stat_values(std::string ruleid,
RuleStatShm::RuleStat &rule_stat) {
try {
return mapRuleStat.get_stat_value(ruleid, rule_stat);
} catch (const std::exception &e) {
logger_->Error() << "ruleid:" << ruleid << "EqpStat::get_stat_values ERROR!"
<< e.what() << std::endl;
return false;
}
}
bool EqpStat::delete_stat(std::string ruleid) {
try {
return mapRuleStat.delete_data(ruleid);
} catch (const std::exception &e) {
logger_->Error() << "ruleid:" << ruleid << "EqpStat::delete_stat ERROR!"
<< e.what() << std::endl;
return false;
}
}
std::string EqpStat::get_stat_json() { return mapRuleStat.GetDataJson(); }
std::vector<std::string> EqpStat::stat_find_no_ruleid() {
std::vector<std::string> res{};
res = mapRuleStat.find_no_rule_id(cfg_rules_);
return res;
}
int EqpStat::get_stat_size() { return mapRuleStat.size(); }
double EqpStat::select_running_by_ruleid(string ruleid) {
T_RULE_SAMPLE_1D trs1a;
auto query_list_maybe = exec<db2_t, T_RULE_SAMPLE_1D>(
select(trs1a.X1()).from(trs1a).where(trs1a.RuleId() == ruleid));
if (query_list_maybe.is_just()) {
auto &query_list = query_list_maybe.unsafe_get_just();
if (query_list.empty()) {
return 0;
}
return query_list[0].X1;
} else {
this->logger_->Debug() << "!query_list_maybe.is_just() ruleid:" << ruleid
<< endl;
return 0;
}
}
unsigned long EqpStat::select_times_by_ruleid(string ruleid) {
T_RULE_SAMPLE_1D trs1a;
auto query_list_maybe = exec<db2_t, T_RULE_SAMPLE_1D>(
select(trs1a.Count()).from(trs1a).where(trs1a.RuleId() == ruleid));
if (query_list_maybe.is_just()) {
auto &query_list = query_list_maybe.unsafe_get_just();
if (query_list.empty()) {
return 0;
}
return query_list[0].Count;
} else {
return 0;
}
}
string EqpStat::get_ruleid_json() {
mix_cc::json js1;
js1["ruleid"] = this->cfg_rules_;
return js1.dump();
}
int EqpStat::select_alarm_by_ruleid(string ruleid) {
T_RULE_RESULT trr;
auto query_list_maybe = exec<db2_t, T_RULE_CFG>(
select(trr.ruleId())
.from(trr)
.where(trr.ruleId() == ruleid, trr.dealResult() == 0));
if (query_list_maybe.is_just()) {
auto &query_list = query_list_maybe.unsafe_get_just();
return query_list.size();
} else {
logger_->Error() << "ruleid:" << ruleid << "select_alarm_by_ruleid ERROR!"
<< ",location:" << BOOST_CURRENT_LOCATION << endl;
return 0;
}
}
std::string EqpStat::select_dev_coder_by_ruleid(string ruleid) {
T_RULE_CFG t_rule_cfg;
auto sql_statement = select(t_rule_cfg.eqpid())
.from(t_rule_cfg)
.where(t_rule_cfg.ruleId() == ruleid);
auto query_list_maybe = mix_cc::sql::exec<db2_t, T_RULE_CFG>(sql_statement);
if (query_list_maybe.is_just()) {
auto &query_list = query_list_maybe.unsafe_get_just();
return query_list[0].eqpid;
} else {
logger_->Error() << "规则:" << ruleid << ",九位码查询异常!" << std::endl;
return "";
}
}
string EqpStat::select_latest_alarm_by_ruleid(string ruleid) {
try {
FV_RESULT_LATEST fvrl;
auto query_list_maybe = exec<db2_t, FV_RESULT_LATEST>(
select(fvrl.alarmtime())
.from(fvrl)
.where(fvrl.ruleId() == ruleid, fvrl.rank() == 1));
if (query_list_maybe.is_just()) {
auto &query_list = query_list_maybe.unsafe_get_just();
if (query_list.size() == 0) {
return "无报警";
}
string quered_time =
mix_cc::mix_time_t(query_list[0].alarmtime).to_formatted_time();
return quered_time;
} else {
return "无报警";
}
} catch (std::exception &e) {
this->logger_->Error() << "查询最新报警时间,规则:" << ruleid << e.what()
<< std::endl;
}
return "无报警";
}
void EqpStat::init() {
if (!this->cfg_flag) {
get_cfg_rules();
logger_->Debug() << "EqpStat::init()---get_cfg_rules()---" << endl;
update_static();
logger_->Debug() << "EqpStat::init()---update_static()---" << endl;
this->cfg_flag = true;
last_update_static_time_ = chrono::system_clock::now();
}
if (chrono::system_clock::now() - last_update_static_time_ >
chrono::minutes(5)) {
this->cfg_flag = false;
}
}