From 9a12bbb6f9103f22fd634b1a1fbeaf80c98df3be Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 15 Apr 2013 10:23:06 +0200 Subject: [PATCH] Implement host check commands Fixes #3674 --- lib/icinga/externalcommandprocessor.cpp | 196 ++++++++++++++++++++++++ lib/icinga/externalcommandprocessor.h | 8 + 2 files changed, 204 insertions(+) diff --git a/lib/icinga/externalcommandprocessor.cpp b/lib/icinga/externalcommandprocessor.cpp index 929e278d1..e5ce06d59 100644 --- a/lib/icinga/externalcommandprocessor.cpp +++ b/lib/icinga/externalcommandprocessor.cpp @@ -152,6 +152,14 @@ void ExternalCommandProcessor::Initialize(void) RegisterCommand("DISABLE_HOST_NOTIFICATIONS", &ExternalCommandProcessor::DisableHostNotifications); RegisterCommand("ENABLE_SVC_NOTIFICATIONS", &ExternalCommandProcessor::EnableSvcNotifications); RegisterCommand("DISABLE_SVC_NOTIFICATIONS", &ExternalCommandProcessor::DisableSvcNotifications); + RegisterCommand("DISABLE_HOSTGROUP_HOST_CHECKS", &ExternalCommandProcessor::DisableHostgroupHostChecks); + RegisterCommand("DISABLE_HOSTGROUP_PASSIVE_HOST_CHECKS", &ExternalCommandProcessor::DisableHostgroupPassiveHostChecks); + RegisterCommand("DISABLE_SERVICEGROUP_HOST_CHECKS", &ExternalCommandProcessor::DisableServicegroupHostChecks); + RegisterCommand("DISABLE_SERVICEGROUP_PASSIVE_HOST_CHECKS", &ExternalCommandProcessor::DisableServicegroupPassiveHostChecks); + RegisterCommand("ENABLE_HOSTGROUP_HOST_CHECKS", &ExternalCommandProcessor::EnableHostgroupHostChecks); + RegisterCommand("ENABLE_HOSTGROUP_PASSIVE_HOST_CHECKS", &ExternalCommandProcessor::EnableHostgroupPassiveHostChecks); + RegisterCommand("ENABLE_SERVICEGROUP_HOST_CHECKS", &ExternalCommandProcessor::EnableServicegroupHostChecks); + RegisterCommand("ENABLE_SERVICEGROUP_PASSIVE_HOST_CHECKS", &ExternalCommandProcessor::EnableServicegroupPassiveHostChecks); } void ExternalCommandProcessor::RegisterCommand(const String& command, const ExternalCommandProcessor::Callback& callback) @@ -1233,3 +1241,191 @@ void ExternalCommandProcessor::DisableSvcNotifications(double, const std::vector service->SetEnableNotifications(false); } } + +void ExternalCommandProcessor::DisableHostgroupHostChecks(double, const std::vector& arguments) +{ + if (arguments.size() < 1) + BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 1 arguments.")); + + HostGroup::Ptr hg = HostGroup::GetByName(arguments[0]); + + BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) { + Service::Ptr hc = host->GetHostCheckService(); + + if (!hc) + continue; + + Log(LogInformation, "icinga", "Disabling active checks for host '" + host->GetName() + "'"); + + { + ObjectLock olock(hc); + + hc->SetEnableActiveChecks(false); + } + } +} + +void ExternalCommandProcessor::DisableHostgroupPassiveHostChecks(double, const std::vector& arguments) +{ + if (arguments.size() < 1) + BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 1 arguments.")); + + HostGroup::Ptr hg = HostGroup::GetByName(arguments[0]); + + BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) { + Service::Ptr hc = host->GetHostCheckService(); + + if (!hc) + continue; + + Log(LogInformation, "icinga", "Disabling active checks for host '" + host->GetName() + "'"); + + { + ObjectLock olock(hc); + + hc->SetEnablePassiveChecks(false); + } + } +} + +void ExternalCommandProcessor::DisableServicegroupHostChecks(double, const std::vector& arguments) +{ + if (arguments.size() < 1) + BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 1 arguments.")); + + ServiceGroup::Ptr sg = ServiceGroup::GetByName(arguments[0]); + + BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) { + Host::Ptr host = service->GetHost(); + + if (!host) + continue; + + Service::Ptr hc = host->GetHostCheckService(); + + if (!hc) + continue; + + Log(LogInformation, "icinga", "Disabling active checks for host '" + host->GetName() + "'"); + + { + ObjectLock olock(hc); + + hc->SetEnableActiveChecks(false); + } + } +} + +void ExternalCommandProcessor::DisableServicegroupPassiveHostChecks(double, const std::vector& arguments) +{ + if (arguments.size() < 1) + BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 1 arguments.")); + + ServiceGroup::Ptr sg = ServiceGroup::GetByName(arguments[0]); + + BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) { + Host::Ptr host = service->GetHost(); + + if (!host) + continue; + + Service::Ptr hc = host->GetHostCheckService(); + + if (!hc) + continue; + + Log(LogInformation, "icinga", "Disabling active checks for host '" + host->GetName() + "'"); + + { + ObjectLock olock(hc); + + hc->SetEnablePassiveChecks(false); + } + } +} + +void ExternalCommandProcessor::EnableHostgroupHostChecks(double, const std::vector& arguments) +{ + if (arguments.size() < 1) + BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 1 arguments.")); + + HostGroup::Ptr hg = HostGroup::GetByName(arguments[0]); + + BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) { + Service::Ptr hc = host->GetHostCheckService(); + + if (!hc) + continue; + + Log(LogInformation, "icinga", "Enabling active checks for host '" + host->GetName() + "'"); + + { + ObjectLock olock(hc); + + hc->SetEnableActiveChecks(true); + } + } +} + +void ExternalCommandProcessor::EnableHostgroupPassiveHostChecks(double, const std::vector& arguments) +{ + if (arguments.size() < 1) + BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 1 arguments.")); + +} + +void ExternalCommandProcessor::EnableServicegroupHostChecks(double, const std::vector& arguments) +{ + if (arguments.size() < 1) + BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 1 arguments.")); + + ServiceGroup::Ptr sg = ServiceGroup::GetByName(arguments[0]); + + BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) { + Host::Ptr host = service->GetHost(); + + if (!host) + continue; + + Service::Ptr hc = host->GetHostCheckService(); + + if (!hc) + continue; + + Log(LogInformation, "icinga", "Enabling active checks for host '" + host->GetName() + "'"); + + { + ObjectLock olock(hc); + + hc->SetEnableActiveChecks(true); + } + } +} + +void ExternalCommandProcessor::EnableServicegroupPassiveHostChecks(double, const std::vector& arguments) +{ + if (arguments.size() < 1) + BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 1 arguments.")); + + ServiceGroup::Ptr sg = ServiceGroup::GetByName(arguments[0]); + + BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) { + Host::Ptr host = service->GetHost(); + + if (!host) + continue; + + Service::Ptr hc = host->GetHostCheckService(); + + if (!hc) + continue; + + Log(LogInformation, "icinga", "Enabling active checks for host '" + host->GetName() + "'"); + + { + ObjectLock olock(hc); + + hc->SetEnablePassiveChecks(false); + } + } +} diff --git a/lib/icinga/externalcommandprocessor.h b/lib/icinga/externalcommandprocessor.h index e261ec7d6..ab77e480a 100644 --- a/lib/icinga/externalcommandprocessor.h +++ b/lib/icinga/externalcommandprocessor.h @@ -105,6 +105,14 @@ private: static void DisableHostNotifications(double time, const std::vector& arguments); static void EnableSvcNotifications(double time, const std::vector& arguments); static void DisableSvcNotifications(double time, const std::vector& arguments); + static void DisableHostgroupHostChecks(double, const std::vector& arguments); + static void DisableHostgroupPassiveHostChecks(double, const std::vector& arguments); + static void DisableServicegroupHostChecks(double, const std::vector& arguments); + static void DisableServicegroupPassiveHostChecks(double, const std::vector& arguments); + static void EnableHostgroupHostChecks(double, const std::vector& arguments); + static void EnableHostgroupPassiveHostChecks(double, const std::vector& arguments); + static void EnableServicegroupHostChecks(double, const std::vector& arguments); + static void EnableServicegroupPassiveHostChecks(double, const std::vector& arguments); }; }