]> granicus.if.org Git - icinga2/commitdiff
Distinguish between 'dependencies' (reachability) and 'hostchecks' (host status).
authorGunnar Beutner <gunnar.beutner@netways.de>
Mon, 9 Jul 2012 08:28:49 +0000 (10:28 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Mon, 9 Jul 2012 08:28:49 +0000 (10:28 +0200)
components/compat/compatcomponent.cpp
components/convenience/conveniencecomponent.cpp

index 42502593e4d9218f4ad3c4be0e81617d3dd24763..327d0ef30ae96e7a0a8cb1a64477ff63e05cd145 100644 (file)
@@ -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;
index 40046f11829f4b5f574a4de0209bd523530df02f..d4cd726d8a7563a732b5547d838a14499ab9b1e0 100644 (file)
@@ -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.");
                        }