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;
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)
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.");
}