]> granicus.if.org Git - icinga2/blobdiff - components/perfdata/graphitewriter.cpp
Remove the HostUnreachable state.
[icinga2] / components / perfdata / graphitewriter.cpp
index a64df710893a5a0e946d8546cbb9505faba7c9ad..f81d4c76cdb168b491e75abec78631388efc3055 100644 (file)
@@ -94,44 +94,43 @@ void GraphiteWriter::ReconnectTimerHandler(void)
        m_Stream = make_shared<BufferedStream>(net_stream);
 }
 
-void GraphiteWriter::CheckResultHandler(const Service::Ptr& service, const CheckResult::Ptr& cr)
+void GraphiteWriter::CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr)
 {
-       if (!IcingaApplication::GetInstance()->GetEnablePerfdata() || !service->GetEnablePerfdata())
+       if (!IcingaApplication::GetInstance()->GetEnablePerfdata() || !checkable->GetEnablePerfdata())
                return;
 
-       Host::Ptr host = service->GetHost();
+       Service::Ptr service = dynamic_pointer_cast<Service>(checkable);
+       Host::Ptr host;
 
-       String hostName = host->GetName();
-       String serviceName = service->GetShortName();
+       if (service)
+               host = service->GetHost();
+       else
+               host = static_pointer_cast<Host>(checkable);
 
+       String hostName = host->GetName();
        SanitizeMetric(hostName);
-       SanitizeMetric(serviceName);
-
-       String prefix = "icinga." + hostName + "." + serviceName;
 
-       /* service metrics */
-       SendMetric(prefix, "current_attempt", service->GetCheckAttempt());
-       SendMetric(prefix, "max_check_attempts", service->GetMaxCheckAttempts());
-       SendMetric(prefix, "state_type", service->GetStateType());
-       SendMetric(prefix, "state", service->GetState());
-       SendMetric(prefix, "latency", Service::CalculateLatency(cr));
-       SendMetric(prefix, "execution_time", Service::CalculateExecutionTime(cr));
+       String prefix;
 
-       SendPerfdata(prefix, cr);
+       if (service) {
+               String serviceName = service->GetShortName();
+               SanitizeMetric(serviceName);
+               prefix = "icinga." + hostName + "." + serviceName;
 
-       if (service == host->GetCheckService()) {
-               prefix = "icinga." + hostName; // TODO works?
+               SendMetric(prefix, "state", service->GetState());
+       } else {
+               prefix = "icinga." + hostName;
 
-               /* host metrics */
-               SendMetric(prefix, "current_attempt", service->GetCheckAttempt());
-               SendMetric(prefix, "max_check_attempts", service->GetMaxCheckAttempts());
-               SendMetric(prefix, "state_type", host->GetStateType());
                SendMetric(prefix, "state", host->GetState());
-               SendMetric(prefix, "latency", Service::CalculateLatency(cr));
-               SendMetric(prefix, "execution_time", Service::CalculateExecutionTime(cr));
-
-               SendPerfdata(prefix, cr);
        }
+
+       SendMetric(prefix, "current_attempt", checkable->GetCheckAttempt());
+       SendMetric(prefix, "max_check_attempts", checkable->GetMaxCheckAttempts());
+       SendMetric(prefix, "state_type", checkable->GetStateType());
+       SendMetric(prefix, "reachable", checkable->IsReachable());
+       SendMetric(prefix, "latency", Service::CalculateLatency(cr));
+       SendMetric(prefix, "execution_time", Service::CalculateExecutionTime(cr));
+       SendPerfdata(prefix, cr);
 }
 
 void GraphiteWriter::SendPerfdata(const String& prefix, const CheckResult::Ptr& cr)