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 8c6bb1f46c
commit 957be31cd7
4 changed files with 20 additions and 16 deletions

View File

@ -112,12 +112,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

@ -111,12 +111,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

@ -110,12 +110,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

@ -101,12 +101,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;
}
}