Add lag thresholds to cluster-zone check
authorMichael Friedrich <michael.friedrich@netways.de>
Fri, 24 Jun 2016 08:17:45 +0000 (10:17 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Fri, 24 Jun 2016 08:33:04 +0000 (10:33 +0200)
fixes #11772

doc/7-icinga-template-library.md
lib/methods/clusterzonechecktask.cpp

index 3f8f03628a27f3d9b0e23b4a1998646cd4d16d5e..a039c06dc850f9dbad1d534a9555427ba55d8dd6 100644 (file)
@@ -54,9 +54,11 @@ Check command for the built-in `cluster-zone` check.
 
 Custom attributes passed as [command parameters](3-monitoring-basics.md#command-passing-parameters):
 
-Name         | Description
--------------|---------------
-cluster_zone | **Optional.** The zone name. Defaults to "$host.name$".
+Name                 | Description
+---------------------|---------------
+cluster_zone         | **Required.** The zone name.
+cluster_lag_warning  | **Optional.** Warning threshold for log lag in seconds.
+cluster_lag_critical | **Optional.** Critical threshold for log lag in seconds.
 
 ### <a id="itl-icinga-ido"></a> ido
 
index 7c3676421463808f356b2110653d77063a6d08b7..03e33213159965bdc774074c0e59c3e467788804 100644 (file)
@@ -61,6 +61,15 @@ void ClusterZoneCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const Che
        String zoneName = MacroProcessor::ResolveMacros("$cluster_zone$", resolvers, checkable->GetLastCheckResult(),
            NULL, MacroProcessor::EscapeCallback(), resolvedMacros, useResolvedMacros);
 
+       String missingLagWarning;
+       String missingLagCritical;
+
+       double lagWarning = MacroProcessor::ResolveMacros("$cluster_lag_warning$", resolvers, checkable->GetLastCheckResult(),
+           &missingLagWarning, MacroProcessor::EscapeCallback(), resolvedMacros, useResolvedMacros);
+
+       double lagCritical = MacroProcessor::ResolveMacros("$cluster_lag_critical$", resolvers, checkable->GetLastCheckResult(),
+           &missingLagCritical, MacroProcessor::EscapeCallback(), resolvedMacros, useResolvedMacros);
+
        if (resolvedMacros && !useResolvedMacros)
                return;
 
@@ -101,8 +110,19 @@ void ClusterZoneCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const Che
                cr->SetOutput("Zone '" + zoneName + "' is connected. Log lag: " + Utility::FormatDuration(zoneLag));
        }
 
+       /* Check whether the thresholds have been resolved and compare them */
+       if (missingLagCritical.IsEmpty() && zoneLag > lagCritical) {
+               cr->SetState(ServiceCritical);
+               cr->SetOutput("Zone '" + zoneName + "' is connected. Log lag: " + Utility::FormatDuration(zoneLag)
+                   + " greater than critical threshold: " + Utility::FormatDuration(lagCritical));
+       } else if (missingLagWarning.IsEmpty() && zoneLag > lagWarning) {
+               cr->SetState(ServiceWarning);
+               cr->SetOutput("Zone '" + zoneName + "' is connected. Log lag: " + Utility::FormatDuration(zoneLag)
+                   + " greater than warning threshold: " + Utility::FormatDuration(lagWarning));
+       }
+
        Array::Ptr perfdata = new Array();
-       perfdata->Add(new PerfdataValue("slave_lag", zoneLag));
+       perfdata->Add(new PerfdataValue("slave_lag", zoneLag, false, "s", lagWarning, lagCritical));
        cr->SetPerformanceData(perfdata);
 
        checkable->ProcessCheckResult(cr);