diff --git a/lib/icinga/downtime.cpp b/lib/icinga/downtime.cpp index 3ec7e01d4..264382915 100644 --- a/lib/icinga/downtime.cpp +++ b/lib/icinga/downtime.cpp @@ -513,16 +513,17 @@ void Downtime::SetRemovalInfo(const String& removedBy, double removeTime, const OnRemovalInfoChanged(this, removedBy, removeTime, origin); } -String Downtime::GetDowntimeIDFromLegacyID(int id) +Downtime::Ptr Downtime::GetDowntimeFromLegacyID(int id) { std::unique_lock lock(l_DowntimeMutex); auto it = l_LegacyDowntimesCache.find(id); - if (it == l_LegacyDowntimesCache.end()) - return Empty; + if (it == l_LegacyDowntimesCache.end()) { + return nullptr; + } - return it->second->GetName(); + return it->second; } void Downtime::DowntimesStartTimerHandler() diff --git a/lib/icinga/downtime.hpp b/lib/icinga/downtime.hpp index 15aa0af5d..f8b64d142 100644 --- a/lib/icinga/downtime.hpp +++ b/lib/icinga/downtime.hpp @@ -64,7 +64,7 @@ public: void OnAllConfigLoaded() override; - static String GetDowntimeIDFromLegacyID(int id); + static Downtime::Ptr GetDowntimeFromLegacyID(int id); static DowntimeChildOptions ChildOptionsFromValue(const Value& options); diff --git a/lib/icinga/externalcommandprocessor.cpp b/lib/icinga/externalcommandprocessor.cpp index 9850da030..e9e975f80 100644 --- a/lib/icinga/externalcommandprocessor.cpp +++ b/lib/icinga/externalcommandprocessor.cpp @@ -970,8 +970,14 @@ void ExternalCommandProcessor::ScheduleSvcDowntime(double, const std::vectorGetName(); + } + } Log(LogNotice, "ExternalCommandProcessor") << "Creating downtime for service " << service->GetName(); @@ -983,7 +989,12 @@ void ExternalCommandProcessor::ScheduleSvcDowntime(double, const std::vector& arguments) { int id = Convert::ToLong(arguments[0]); - String rid = Downtime::GetDowntimeIDFromLegacyID(id); + String rid; + auto dt (Downtime::GetDowntimeFromLegacyID(id)); + + if (dt) { + rid = dt->GetName(); + } try { Downtime::RemoveDowntime(rid, false, true); @@ -1005,8 +1016,14 @@ void ExternalCommandProcessor::ScheduleHostDowntime(double, const std::vectorGetName(); + } + } Log(LogNotice, "ExternalCommandProcessor") << "Creating downtime for host " << host->GetName(); @@ -1026,8 +1043,14 @@ void ExternalCommandProcessor::ScheduleAndPropagateHostDowntime(double, const st String triggeredBy; int triggeredByLegacy = Convert::ToLong(arguments[4]); int is_fixed = Convert::ToLong(arguments[3]); - if (triggeredByLegacy != 0) - triggeredBy = Downtime::GetDowntimeIDFromLegacyID(triggeredByLegacy); + + if (triggeredByLegacy != 0) { + auto trigger (Downtime::GetDowntimeFromLegacyID(triggeredByLegacy)); + + if (trigger) { + triggeredBy = trigger->GetName(); + } + } Log(LogNotice, "ExternalCommandProcessor") << "Creating downtime for host " << host->GetName(); @@ -1062,8 +1085,14 @@ void ExternalCommandProcessor::ScheduleAndPropagateTriggeredHostDowntime(double, String triggeredBy; int triggeredByLegacy = Convert::ToLong(arguments[4]); int is_fixed = Convert::ToLong(arguments[3]); - if (triggeredByLegacy != 0) - triggeredBy = Downtime::GetDowntimeIDFromLegacyID(triggeredByLegacy); + + if (triggeredByLegacy != 0) { + auto trigger (Downtime::GetDowntimeFromLegacyID(triggeredByLegacy)); + + if (trigger) { + triggeredBy = trigger->GetName(); + } + } Log(LogNotice, "ExternalCommandProcessor") << "Creating downtime for host " << host->GetName(); @@ -1091,7 +1120,12 @@ void ExternalCommandProcessor::ScheduleAndPropagateTriggeredHostDowntime(double, void ExternalCommandProcessor::DelHostDowntime(double, const std::vector& arguments) { int id = Convert::ToLong(arguments[0]); - String rid = Downtime::GetDowntimeIDFromLegacyID(id); + String rid; + auto dt (Downtime::GetDowntimeFromLegacyID(id)); + + if (dt) { + rid = dt->GetName(); + } try { Downtime::RemoveDowntime(rid, false, true); @@ -1172,8 +1206,14 @@ void ExternalCommandProcessor::ScheduleHostSvcDowntime(double, const std::vector String triggeredBy; int triggeredByLegacy = Convert::ToLong(arguments[4]); int is_fixed = Convert::ToLong(arguments[3]); - if (triggeredByLegacy != 0) - triggeredBy = Downtime::GetDowntimeIDFromLegacyID(triggeredByLegacy); + + if (triggeredByLegacy != 0) { + auto trigger (Downtime::GetDowntimeFromLegacyID(triggeredByLegacy)); + + if (trigger) { + triggeredBy = trigger->GetName(); + } + } Log(LogNotice, "ExternalCommandProcessor") << "Creating downtime for host " << host->GetName(); @@ -1201,8 +1241,14 @@ void ExternalCommandProcessor::ScheduleHostgroupHostDowntime(double, const std:: String triggeredBy; int triggeredByLegacy = Convert::ToLong(arguments[4]); int is_fixed = Convert::ToLong(arguments[3]); - if (triggeredByLegacy != 0) - triggeredBy = Downtime::GetDowntimeIDFromLegacyID(triggeredByLegacy); + + if (triggeredByLegacy != 0) { + auto trigger (Downtime::GetDowntimeFromLegacyID(triggeredByLegacy)); + + if (trigger) { + triggeredBy = trigger->GetName(); + } + } for (const Host::Ptr& host : hg->GetMembers()) { Log(LogNotice, "ExternalCommandProcessor") @@ -1224,8 +1270,14 @@ void ExternalCommandProcessor::ScheduleHostgroupSvcDowntime(double, const std::v String triggeredBy; int triggeredByLegacy = Convert::ToLong(arguments[4]); int is_fixed = Convert::ToLong(arguments[3]); - if (triggeredByLegacy != 0) - triggeredBy = Downtime::GetDowntimeIDFromLegacyID(triggeredByLegacy); + + if (triggeredByLegacy != 0) { + auto trigger (Downtime::GetDowntimeFromLegacyID(triggeredByLegacy)); + + if (trigger) { + triggeredBy = trigger->GetName(); + } + } /* Note: we can't just directly create downtimes for all the services by iterating * over all hosts in the host group - otherwise we might end up creating multiple @@ -1258,8 +1310,14 @@ void ExternalCommandProcessor::ScheduleServicegroupHostDowntime(double, const st String triggeredBy; int triggeredByLegacy = Convert::ToLong(arguments[4]); int is_fixed = Convert::ToLong(arguments[3]); - if (triggeredByLegacy != 0) - triggeredBy = Downtime::GetDowntimeIDFromLegacyID(triggeredByLegacy); + + if (triggeredByLegacy != 0) { + auto trigger (Downtime::GetDowntimeFromLegacyID(triggeredByLegacy)); + + if (trigger) { + triggeredBy = trigger->GetName(); + } + } /* Note: we can't just directly create downtimes for all the hosts by iterating * over all services in the service group - otherwise we might end up creating multiple @@ -1291,8 +1349,14 @@ void ExternalCommandProcessor::ScheduleServicegroupSvcDowntime(double, const std String triggeredBy; int triggeredByLegacy = Convert::ToLong(arguments[4]); int is_fixed = Convert::ToLong(arguments[3]); - if (triggeredByLegacy != 0) - triggeredBy = Downtime::GetDowntimeIDFromLegacyID(triggeredByLegacy); + + if (triggeredByLegacy != 0) { + auto trigger (Downtime::GetDowntimeFromLegacyID(triggeredByLegacy)); + + if (trigger) { + triggeredBy = trigger->GetName(); + } + } for (const Service::Ptr& service : sg->GetMembers()) { Log(LogNotice, "ExternalCommandProcessor")