diff --git a/src/alarm/alarm_service.cc b/src/alarm/alarm_service.cc index 95353e1..6a8d018 100644 --- a/src/alarm/alarm_service.cc +++ b/src/alarm/alarm_service.cc @@ -138,12 +138,25 @@ void AlarmService::check_rule_against_value(AlarmRule& rule, double value, const default: break; } - AlarmState& state = m_alarm_states.at(rule.rule_id); + +auto it = m_alarm_states.find(rule.rule_id); + +if (it == m_alarm_states.end()) { + spdlog::warn("AlarmState for rule '{}' was missing. Creating it on-the-fly.", rule.rule_id); + + auto result = m_alarm_states.emplace( + std::piecewise_construct, + std::forward_as_tuple(rule.rule_id), + std::forward_as_tuple(m_io_context) + ); + it = result.first; // 'it' 现在指向新创建的元素 +} + +AlarmState& state = it->second; if (condition_met) { // 条件满足 if (state.current_state == AlarmStateType::NORMAL) { - // 状态:NORMAL -> PENDING state.current_state = AlarmStateType::PENDING; if (rule.debounce_seconds <= 0) {