From 746d24c9a28e3a43616185d2ec74c6b8a8dee426 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 9 Jul 2012 10:28:49 +0200 Subject: [PATCH] Distinguish between 'dependencies' (reachability) and 'hostchecks' (host status). --- components/compat/compatcomponent.cpp | 12 +++++++++++- components/convenience/conveniencecomponent.cpp | 10 +++++----- 2 files changed, 16 insertions(+), 6 deletions(-) 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."); } -- 2.50.1