T::EvaluateApplyRule(): K. I. S. S. while iterating over a dict

to also save locks and malloc().
This commit is contained in:
Alexander A. Klimov 2022-11-08 14:45:52 +01:00
parent ec704bcf18
commit b6f8f36b3a
4 changed files with 20 additions and 16 deletions

View File

@ -114,12 +114,13 @@ bool Dependency::EvaluateApplyRule(const Checkable::Ptr& checkable, const ApplyR
BOOST_THROW_EXCEPTION(ScriptError("Array iterator requires value to be an array.", di));
Dictionary::Ptr dict = vinstances;
ObjectLock olock (dict);
for (const String& key : dict->GetKeys()) {
frame.Locals->Set(rule.GetFKVar(), key);
frame.Locals->Set(rule.GetFVVar(), dict->Get(key));
for (auto& kv : dict) {
frame.Locals->Set(rule.GetFKVar(), kv.first);
frame.Locals->Set(rule.GetFVVar(), kv.second);
if (EvaluateApplyRuleInstance(checkable, rule.GetName() + key, frame, rule, skipFilter))
if (EvaluateApplyRuleInstance(checkable, rule.GetName() + kv.first, frame, rule, skipFilter))
match = true;
}
}

View File

@ -113,12 +113,13 @@ bool Notification::EvaluateApplyRule(const Checkable::Ptr& checkable, const Appl
BOOST_THROW_EXCEPTION(ScriptError("Array iterator requires value to be an array.", di));
Dictionary::Ptr dict = vinstances;
ObjectLock olock (dict);
for (const String& key : dict->GetKeys()) {
frame.Locals->Set(rule.GetFKVar(), key);
frame.Locals->Set(rule.GetFVVar(), dict->Get(key));
for (auto& kv : dict) {
frame.Locals->Set(rule.GetFKVar(), kv.first);
frame.Locals->Set(rule.GetFVVar(), kv.second);
if (EvaluateApplyRuleInstance(checkable, rule.GetName() + key, frame, rule, skipFilter))
if (EvaluateApplyRuleInstance(checkable, rule.GetName() + kv.first, frame, rule, skipFilter))
match = true;
}
}

View File

@ -112,12 +112,13 @@ bool ScheduledDowntime::EvaluateApplyRule(const Checkable::Ptr& checkable, const
BOOST_THROW_EXCEPTION(ScriptError("Array iterator requires value to be an array.", di));
Dictionary::Ptr dict = vinstances;
ObjectLock olock (dict);
for (const String& key : dict->GetKeys()) {
frame.Locals->Set(rule.GetFKVar(), key);
frame.Locals->Set(rule.GetFVVar(), dict->Get(key));
for (auto& kv : dict) {
frame.Locals->Set(rule.GetFKVar(), kv.first);
frame.Locals->Set(rule.GetFVVar(), kv.second);
if (EvaluateApplyRuleInstance(checkable, rule.GetName() + key, frame, rule, skipFilter))
if (EvaluateApplyRuleInstance(checkable, rule.GetName() + kv.first, frame, rule, skipFilter))
match = true;
}
}

View File

@ -103,12 +103,13 @@ bool Service::EvaluateApplyRule(const Host::Ptr& host, const ApplyRule& rule, bo
BOOST_THROW_EXCEPTION(ScriptError("Array iterator requires value to be an array.", di));
Dictionary::Ptr dict = vinstances;
ObjectLock olock (dict);
for (const String& key : dict->GetKeys()) {
frame.Locals->Set(rule.GetFKVar(), key);
frame.Locals->Set(rule.GetFVVar(), dict->Get(key));
for (auto& kv : dict) {
frame.Locals->Set(rule.GetFKVar(), kv.first);
frame.Locals->Set(rule.GetFVVar(), kv.second);
if (EvaluateApplyRuleInstance(host, rule.GetName() + key, frame, rule, skipFilter))
if (EvaluateApplyRuleInstance(host, rule.GetName() + kv.first, frame, rule, skipFilter))
match = true;
}
}