Add SCHEDULE_AND_PROPAGATE{,_TRIGGERED}_HOST_DOWNTIME external commands

refs #10896
refs #10897
This commit is contained in:
Michael Friedrich 2016-07-21 17:01:49 +02:00 committed by Gunnar Beutner
parent f48e99c710
commit 86f162af85
4 changed files with 78 additions and 2 deletions

View File

@ -1137,8 +1137,6 @@ The following external commands are not supported:
ENABLE_SERVICE_FRESHNESS_CHECKS ENABLE_SERVICE_FRESHNESS_CHECKS
READ_STATE_INFORMATION READ_STATE_INFORMATION
SAVE_STATE_INFORMATION SAVE_STATE_INFORMATION
SCHEDULE_AND_PROPAGATE_HOST_DOWNTIME
SCHEDULE_AND_PROPAGATE_TRIGGERED_HOST_DOWNTIME
SET_HOST_NOTIFICATION_NUMBER SET_HOST_NOTIFICATION_NUMBER
SET_SVC_NOTIFICATION_NUMBER SET_SVC_NOTIFICATION_NUMBER
START_ACCEPTING_PASSIVE_HOST_CHECKS START_ACCEPTING_PASSIVE_HOST_CHECKS

View File

@ -47,6 +47,8 @@ Additional details can be found in the [Icinga 1.x Documentation](http://docs.ic
PROCESS_FILE | ;<file_name>;<delete> (2) | - PROCESS_FILE | ;<file_name>;<delete> (2) | -
SCHEDULE_SVC_DOWNTIME | ;<host_name>;<service_name>;<start_time>;<end_time>;<fixed>;<trigger_id>;<duration>;<author>;<comment> (9) | - SCHEDULE_SVC_DOWNTIME | ;<host_name>;<service_name>;<start_time>;<end_time>;<fixed>;<trigger_id>;<duration>;<author>;<comment> (9) | -
DEL_SVC_DOWNTIME | ;<downtime_id> (1) | - DEL_SVC_DOWNTIME | ;<downtime_id> (1) | -
SCHEDULE_AND_PROPAGATE_HOST_DOWNTIME | ;<host_name>;<start_time>;<end_time>;<fixed>;<trigger_id>;<duration>;<author>;<comment> (8) | -
SCHEDULE_AND_PROPAGATE_TRIGGERED_HOST_DOWNTIME | ;<host_name>;<start_time>;<end_time>;<fixed>;<trigger_id>;<duration>;<author>;<comment> (8) | -
SCHEDULE_HOST_DOWNTIME | ;<host_name>;<start_time>;<end_time>;<fixed>;<trigger_id>;<duration>;<author>;<comment> (8) | - SCHEDULE_HOST_DOWNTIME | ;<host_name>;<start_time>;<end_time>;<fixed>;<trigger_id>;<duration>;<author>;<comment> (8) | -
DEL_HOST_DOWNTIME | ;<downtime_id> (1) | - DEL_HOST_DOWNTIME | ;<downtime_id> (1) | -
DEL_DOWNTIME_BY_HOST_NAME | ;<host_name>[;<service_name;>[;<start_time;>[;<comment_text;>]]] (1) | - DEL_DOWNTIME_BY_HOST_NAME | ;<host_name>[;<service_name;>[;<start_time;>[;<comment_text;>]]] (1) | -

View File

@ -193,6 +193,8 @@ void ExternalCommandProcessor::StaticInitialize(void)
RegisterCommand("SCHEDULE_SVC_DOWNTIME", &ExternalCommandProcessor::ScheduleSvcDowntime, 9); RegisterCommand("SCHEDULE_SVC_DOWNTIME", &ExternalCommandProcessor::ScheduleSvcDowntime, 9);
RegisterCommand("DEL_SVC_DOWNTIME", &ExternalCommandProcessor::DelSvcDowntime, 1); RegisterCommand("DEL_SVC_DOWNTIME", &ExternalCommandProcessor::DelSvcDowntime, 1);
RegisterCommand("SCHEDULE_HOST_DOWNTIME", &ExternalCommandProcessor::ScheduleHostDowntime, 8); RegisterCommand("SCHEDULE_HOST_DOWNTIME", &ExternalCommandProcessor::ScheduleHostDowntime, 8);
RegisterCommand("SCHEDULE_AND_PROPAGATE_HOST_DOWNTIME", &ExternalCommandProcessor::ScheduleAndPropagateHostDowntime, 8);
RegisterCommand("SCHEDULE_AND_PROPAGATE_TRIGGERED_HOST_DOWNTIME", &ExternalCommandProcessor::ScheduleAndPropagateTriggeredHostDowntime, 8);
RegisterCommand("DEL_HOST_DOWNTIME", &ExternalCommandProcessor::DelHostDowntime, 1); RegisterCommand("DEL_HOST_DOWNTIME", &ExternalCommandProcessor::DelHostDowntime, 1);
RegisterCommand("DEL_DOWNTIME_BY_HOST_NAME", &ExternalCommandProcessor::DelDowntimeByHostName, 1, 4); RegisterCommand("DEL_DOWNTIME_BY_HOST_NAME", &ExternalCommandProcessor::DelDowntimeByHostName, 1, 4);
RegisterCommand("SCHEDULE_HOST_SVC_DOWNTIME", &ExternalCommandProcessor::ScheduleHostSvcDowntime, 8); RegisterCommand("SCHEDULE_HOST_SVC_DOWNTIME", &ExternalCommandProcessor::ScheduleHostSvcDowntime, 8);
@ -1001,6 +1003,78 @@ void ExternalCommandProcessor::ScheduleHostDowntime(double, const std::vector<St
Convert::ToBool(is_fixed), triggeredBy, Convert::ToDouble(arguments[5])); Convert::ToBool(is_fixed), triggeredBy, Convert::ToDouble(arguments[5]));
} }
void ExternalCommandProcessor::ScheduleAndPropagateHostDowntime(double, const std::vector<String>& arguments)
{
Host::Ptr host = Host::GetByName(arguments[0]);
if (!host)
BOOST_THROW_EXCEPTION(std::invalid_argument("Cannot schedule and propagate host downtime for non-existent host '" + arguments[0] + "'"));
String triggeredBy;
int triggeredByLegacy = Convert::ToLong(arguments[4]);
int is_fixed = Convert::ToLong(arguments[3]);
if (triggeredByLegacy != 0)
triggeredBy = Downtime::GetDowntimeIDFromLegacyID(triggeredByLegacy);
Log(LogNotice, "ExternalCommandProcessor")
<< "Creating downtime for host " << host->GetName();
(void) Downtime::AddDowntime(host, arguments[6], arguments[7],
Convert::ToDouble(arguments[1]), Convert::ToDouble(arguments[2]),
Convert::ToBool(is_fixed), triggeredBy, Convert::ToDouble(arguments[5]));
/* Schedule downtime for all child hosts */
BOOST_FOREACH(const Checkable::Ptr& child, host->GetChildren()) {
Host::Ptr host;
Service::Ptr service;
tie(host, service) = GetHostService(child);
/* ignore all service children */
if (service)
continue;
(void) Downtime::AddDowntime(child, arguments[6], arguments[7],
Convert::ToDouble(arguments[1]), Convert::ToDouble(arguments[2]),
Convert::ToBool(is_fixed), triggeredBy, Convert::ToDouble(arguments[5]));
}
}
void ExternalCommandProcessor::ScheduleAndPropagateTriggeredHostDowntime(double, const std::vector<String>& arguments)
{
Host::Ptr host = Host::GetByName(arguments[0]);
if (!host)
BOOST_THROW_EXCEPTION(std::invalid_argument("Cannot schedule and propagate triggered host downtime for non-existent host '" + arguments[0] + "'"));
String triggeredBy;
int triggeredByLegacy = Convert::ToLong(arguments[4]);
int is_fixed = Convert::ToLong(arguments[3]);
if (triggeredByLegacy != 0)
triggeredBy = Downtime::GetDowntimeIDFromLegacyID(triggeredByLegacy);
Log(LogNotice, "ExternalCommandProcessor")
<< "Creating downtime for host " << host->GetName();
String parentDowntime = Downtime::AddDowntime(host, arguments[6], arguments[7],
Convert::ToDouble(arguments[1]), Convert::ToDouble(arguments[2]),
Convert::ToBool(is_fixed), triggeredBy, Convert::ToDouble(arguments[5]));
/* Schedule downtime for all child hosts and explicitely trigger them through the parent host's downtime */
BOOST_FOREACH(const Checkable::Ptr& child, host->GetChildren()) {
Host::Ptr host;
Service::Ptr service;
tie(host, service) = GetHostService(child);
/* ignore all service children */
if (service)
continue;
(void) Downtime::AddDowntime(child, arguments[6], arguments[7],
Convert::ToDouble(arguments[1]), Convert::ToDouble(arguments[2]),
Convert::ToBool(is_fixed), parentDowntime, Convert::ToDouble(arguments[5]));
}
}
void ExternalCommandProcessor::DelHostDowntime(double, const std::vector<String>& arguments) void ExternalCommandProcessor::DelHostDowntime(double, const std::vector<String>& arguments)
{ {
int id = Convert::ToLong(arguments[0]); int id = Convert::ToLong(arguments[0]);

View File

@ -82,6 +82,8 @@ private:
static void ScheduleSvcDowntime(double time, const std::vector<String>& arguments); static void ScheduleSvcDowntime(double time, const std::vector<String>& arguments);
static void DelSvcDowntime(double time, const std::vector<String>& arguments); static void DelSvcDowntime(double time, const std::vector<String>& arguments);
static void ScheduleHostDowntime(double time, const std::vector<String>& arguments); static void ScheduleHostDowntime(double time, const std::vector<String>& arguments);
static void ScheduleAndPropagateHostDowntime(double, const std::vector<String>& arguments);
static void ScheduleAndPropagateTriggeredHostDowntime(double, const std::vector<String>& arguments);
static void DelHostDowntime(double time, const std::vector<String>& arguments); static void DelHostDowntime(double time, const std::vector<String>& arguments);
static void DelDowntimeByHostName(double, const std::vector<String>& arguments); static void DelDowntimeByHostName(double, const std::vector<String>& arguments);
static void ScheduleHostSvcDowntime(double time, const std::vector<String>& arguments); static void ScheduleHostSvcDowntime(double time, const std::vector<String>& arguments);