mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-25 22:54:57 +02:00
T::EvaluateApplyRule(): K. I. S. S. while iterating over a dict
to also save locks and malloc().
This commit is contained in:
parent
8c6bb1f46c
commit
957be31cd7
@ -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));
|
BOOST_THROW_EXCEPTION(ScriptError("Array iterator requires value to be an array.", di));
|
||||||
|
|
||||||
Dictionary::Ptr dict = vinstances;
|
Dictionary::Ptr dict = vinstances;
|
||||||
|
ObjectLock olock (dict);
|
||||||
|
|
||||||
for (const String& key : dict->GetKeys()) {
|
for (auto& kv : dict) {
|
||||||
frame.Locals->Set(rule.GetFKVar(), key);
|
frame.Locals->Set(rule.GetFKVar(), kv.first);
|
||||||
frame.Locals->Set(rule.GetFVVar(), dict->Get(key));
|
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;
|
match = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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));
|
BOOST_THROW_EXCEPTION(ScriptError("Array iterator requires value to be an array.", di));
|
||||||
|
|
||||||
Dictionary::Ptr dict = vinstances;
|
Dictionary::Ptr dict = vinstances;
|
||||||
|
ObjectLock olock (dict);
|
||||||
|
|
||||||
for (const String& key : dict->GetKeys()) {
|
for (auto& kv : dict) {
|
||||||
frame.Locals->Set(rule.GetFKVar(), key);
|
frame.Locals->Set(rule.GetFKVar(), kv.first);
|
||||||
frame.Locals->Set(rule.GetFVVar(), dict->Get(key));
|
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;
|
match = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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));
|
BOOST_THROW_EXCEPTION(ScriptError("Array iterator requires value to be an array.", di));
|
||||||
|
|
||||||
Dictionary::Ptr dict = vinstances;
|
Dictionary::Ptr dict = vinstances;
|
||||||
|
ObjectLock olock (dict);
|
||||||
|
|
||||||
for (const String& key : dict->GetKeys()) {
|
for (auto& kv : dict) {
|
||||||
frame.Locals->Set(rule.GetFKVar(), key);
|
frame.Locals->Set(rule.GetFKVar(), kv.first);
|
||||||
frame.Locals->Set(rule.GetFVVar(), dict->Get(key));
|
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;
|
match = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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));
|
BOOST_THROW_EXCEPTION(ScriptError("Array iterator requires value to be an array.", di));
|
||||||
|
|
||||||
Dictionary::Ptr dict = vinstances;
|
Dictionary::Ptr dict = vinstances;
|
||||||
|
ObjectLock olock (dict);
|
||||||
|
|
||||||
for (const String& key : dict->GetKeys()) {
|
for (auto& kv : dict) {
|
||||||
frame.Locals->Set(rule.GetFKVar(), key);
|
frame.Locals->Set(rule.GetFKVar(), kv.first);
|
||||||
frame.Locals->Set(rule.GetFVVar(), dict->Get(key));
|
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;
|
match = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user