]> granicus.if.org Git - icinga2/commitdiff
Add 'ignore_soft_states' attribute to Dependency objects
authorMichael Friedrich <michael.friedrich@gmail.com>
Sat, 7 Feb 2015 23:30:58 +0000 (00:30 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Mon, 23 Feb 2015 09:13:20 +0000 (10:13 +0100)
fixes #7326

doc/3-monitoring-basics.md
doc/6-object-types.md
lib/icinga/dependency.cpp
lib/icinga/dependency.ti

index 5ee3107cd2a4fccac2491402caf36e4f5cabeb80..0306790e1f9c6d212976f98868fcf234e0dfc816 100644 (file)
@@ -1418,6 +1418,9 @@ You can control that option by defining the `disable_notifications` attribute.
 
     disable_notifications = false
 
+If the dependency should be triggered in the parent object's soft state, you
+need to set `ignore_soft_states` to `false`.
+
 The dependency state filter must be defined based on the parent object being
 either a host (`Up`, `Down`) or a service (`OK`, `Warning`, `Critical`, `Unknown`).
 
index 37e1872cc95125e708dd6366aff7cffb362b87cb..bf2e2d141f6fd41465ba9e8ab9f49dcf7b149a58 100644 (file)
@@ -686,6 +686,7 @@ Configuration Attributes:
   child_service_name    |**Optional.** The child service. If omitted this dependency object is treated as host dependency.
   disable_checks        |**Optional.** Whether to disable checks when this dependency fails. Defaults to false.
   disable_notifications |**Optional.** Whether to disable notifications when this dependency fails. Defaults to true.
+  ignore_soft_states    |**Optional.** Whether to ignore soft states for the reachability calculation. Defaults to true.
   period                |**Optional.** Time period during which this dependency is enabled.
   zone                 |**Optional.** The zone this object is a member of.
   states               |**Optional.** A list of state filters when this dependency should be OK. Defaults to [ OK, Warning ] for services and [ Up ] for hosts.
index 42ed41b2d61e99e08eadad6fb29073b92e511677..59aa76d5b28a0f8b0ff8dab57a25efe09fb6588a 100644 (file)
@@ -131,11 +131,16 @@ bool Dependency::IsAvailable(DependencyType dt) const
                return true;
        }
 
-       /* ignore soft states */
-       if (parent->GetStateType() == StateTypeSoft) {
+       if (GetIgnoreSoftStates()) {
+               /* ignore soft states */
+               if (parent->GetStateType() == StateTypeSoft) {
+                       Log(LogNotice, "Dependency")
+                           << "Dependency '" << GetName() << "' passed: " << (service ? "Service" : "Host") << " '" << parent->GetName() << "' is in a soft state.";
+                       return true;
+               }
+       } else {
                Log(LogNotice, "Dependency")
-                   << "Dependency '" << GetName() << "' passed: " << (service ? "Service" : "Host") << " '" << parent->GetName() << "' is in a soft state.";
-               return true;
+                   << "Dependency '" << GetName() << "' failed: " << (service ? "Service" : "Host") << " '" << parent->GetName() << "' is in a soft state.";
        }
 
        int state;
index 062f54b3d62831082e522e88a50b4e8c976c8cdc..244877c342122fb22b0e709b0b18ec106703f7b3 100644 (file)
@@ -44,6 +44,10 @@ class Dependency : CustomVarObject < DependencyNameComposer
        [config] Array::Ptr states;
        int state_filter_real (StateFilter);
 
+       [config] bool ignore_soft_states {
+               default {{{ return true; }}}
+       };
+
        [config] bool disable_checks;
        [config] bool disable_notifications {
                default {{{ return true; }}}