From: Gunnar Beutner Date: Mon, 9 Jul 2012 08:28:49 +0000 (+0200) Subject: Distinguish between 'dependencies' (reachability) and 'hostchecks' (host status). X-Git-Tag: v0.0.1~289 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=746d24c9a28e3a43616185d2ec74c6b8a8dee426;p=icinga2 Distinguish between 'dependencies' (reachability) and 'hostchecks' (host status). --- diff --git a/components/compat/compatcomponent.cpp b/components/compat/compatcomponent.cpp index 42502593e..327d0ef30 100644 --- a/components/compat/compatcomponent.cpp +++ b/components/compat/compatcomponent.cpp @@ -71,12 +71,22 @@ void CompatComponent::DumpHostStatus(ofstream& fp, Host host) for (it = dependencies->Begin(); it != dependencies->End(); it++) { Service service = Service::GetByName(it->second); - if (!service.IsReachable()) { + if (!service.IsReachable() || + (service.GetState() != StateOK && service.GetState() != StateWarning)) { std::cerr << service.GetName() << " is unreachable." << std::endl; state = 2; /* unreachable */ break; } + } + } + + Dictionary::Ptr hostchecks; + if (state == 0 && host.GetConfigObject()->GetProperty("hostchecks", &hostchecks)) { + hostchecks = Service::ResolveDependencies(host, hostchecks); + Dictionary::Iterator it; + for (it = hostchecks->Begin(); it != hostchecks->End(); it++) { + Service service = Service::GetByName(it->second); if (service.GetState() != StateOK && service.GetState() != StateWarning) { state = 1; /* down */ break; diff --git a/components/convenience/conveniencecomponent.cpp b/components/convenience/conveniencecomponent.cpp index 40046f118..d4cd726d8 100644 --- a/components/convenience/conveniencecomponent.cpp +++ b/components/convenience/conveniencecomponent.cpp @@ -75,6 +75,11 @@ void ConvenienceComponent::CopyServiceAttributes(const ConfigObject::Ptr& host, Dictionary::Ptr checkers; if (service->GetProperty("checkers", &checkers)) builder->AddExpression("checkers", OperatorSet, checkers); + + Dictionary::Ptr dependencies; + if (service->GetProperty("dependencies", &dependencies)) + builder->AddExpression("dependencies", OperatorPlus, + Service::ResolveDependencies(host, dependencies)); } void ConvenienceComponent::HostCommittedHandler(const ConfigItem::Ptr& item) @@ -130,11 +135,6 @@ void ConvenienceComponent::HostCommittedHandler(const ConfigItem::Ptr& item) builder->AddParent(parent); CopyServiceAttributes(host, service, builder); - - Dictionary::Ptr dependencies; - if (service->GetProperty("dependencies", &dependencies)) - builder->AddExpression("dependencies", OperatorPlus, - Service::ResolveDependencies(host, dependencies)); } else { throw invalid_argument("Service description must be either a string or a dictionary."); }