Skip to content

Commit

Permalink
Add SCHEDULE_AND_PROPAGATE{,_TRIGGERED}_HOST_DOWNTIME external commands
Browse files Browse the repository at this point in the history
refs #10896
refs #10897
  • Loading branch information
Michael Friedrich committed Oct 5, 2016
1 parent a7b0cb5 commit 50ee39b
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 2 deletions.
2 changes: 0 additions & 2 deletions doc/22-migrating-from-icinga-1x.md
Expand Up @@ -1137,8 +1137,6 @@ The following external commands are not supported:
ENABLE_SERVICE_FRESHNESS_CHECKS
READ_STATE_INFORMATION
SAVE_STATE_INFORMATION
SCHEDULE_AND_PROPAGATE_HOST_DOWNTIME
SCHEDULE_AND_PROPAGATE_TRIGGERED_HOST_DOWNTIME
SET_HOST_NOTIFICATION_NUMBER
SET_SVC_NOTIFICATION_NUMBER
START_ACCEPTING_PASSIVE_HOST_CHECKS
Expand Down
2 changes: 2 additions & 0 deletions doc/23-appendix.md
Expand Up @@ -47,6 +47,8 @@ Additional details can be found in the [Icinga 1.x Documentation](http://docs.ic
PROCESS_FILE | ;<file_name>;<delete> (2) | -
SCHEDULE_SVC_DOWNTIME | ;<host_name>;<service_name>;<start_time>;<end_time>;<fixed>;<trigger_id>;<duration>;<author>;<comment> (9) | -
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) | -
DEL_HOST_DOWNTIME | ;<downtime_id> (1) | -
DEL_DOWNTIME_BY_HOST_NAME | ;<host_name>[;<service_name;>[;<start_time;>[;<comment_text;>]]] (1) | -
Expand Down
74 changes: 74 additions & 0 deletions lib/icinga/externalcommandprocessor.cpp
Expand Up @@ -193,6 +193,8 @@ void ExternalCommandProcessor::StaticInitialize(void)
RegisterCommand("SCHEDULE_SVC_DOWNTIME", &ExternalCommandProcessor::ScheduleSvcDowntime, 9);
RegisterCommand("DEL_SVC_DOWNTIME", &ExternalCommandProcessor::DelSvcDowntime, 1);
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_DOWNTIME_BY_HOST_NAME", &ExternalCommandProcessor::DelDowntimeByHostName, 1, 4);
RegisterCommand("SCHEDULE_HOST_SVC_DOWNTIME", &ExternalCommandProcessor::ScheduleHostSvcDowntime, 8);
Expand Down Expand Up @@ -1001,6 +1003,78 @@ void ExternalCommandProcessor::ScheduleHostDowntime(double, const std::vector<St
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)
{
int id = Convert::ToLong(arguments[0]);
Expand Down
2 changes: 2 additions & 0 deletions lib/icinga/externalcommandprocessor.hpp
Expand Up @@ -82,6 +82,8 @@ class I2_ICINGA_API ExternalCommandProcessor {
static void ScheduleSvcDowntime(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 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 DelDowntimeByHostName(double, const std::vector<String>& arguments);
static void ScheduleHostSvcDowntime(double time, const std::vector<String>& arguments);
Expand Down

0 comments on commit 50ee39b

Please sign in to comment.