]> granicus.if.org Git - icinga2/commitdiff
Implement ScheduledDowntime::AllConfigIsLoaded()
authorAlexander A. Klimov <alexander.klimov@icinga.com>
Thu, 6 Dec 2018 11:41:49 +0000 (12:41 +0100)
committerAlexander A. Klimov <alexander.klimov@icinga.com>
Thu, 6 Dec 2018 14:44:51 +0000 (15:44 +0100)
refs #6542

lib/icinga/scheduleddowntime.cpp
lib/icinga/scheduleddowntime.hpp

index c092ca9f0d7f12f83bda08dd7bf3fd780325706e..054f63628bf0917f3665f68fa368aad19251d96d 100644 (file)
@@ -80,6 +80,8 @@ void ScheduledDowntime::OnAllConfigLoaded()
 
        if (!GetCheckable())
                BOOST_THROW_EXCEPTION(ScriptError("ScheduledDowntime '" + GetName() + "' references a host/service which doesn't exist.", GetDebugInfo()));
+
+       m_AllConfigLoaded.store(true);
 }
 
 void ScheduledDowntime::Start(bool runtimeCreated)
@@ -331,3 +333,10 @@ void ScheduledDowntime::ValidateChildOptions(const Lazy<Value>& lvalue, const Va
                BOOST_THROW_EXCEPTION(ValidationError(this, { "child_options" }, "Invalid child_options specified"));
        }
 }
+
+bool ScheduledDowntime::AllConfigIsLoaded()
+{
+       return m_AllConfigLoaded.load();
+}
+
+std::atomic<bool> ScheduledDowntime::m_AllConfigLoaded (false);
index 15834929119387de77ba77f6d019fa43aaba0aec..4322999b7d38abbf837a4960e2d303f5798c6dc2 100644 (file)
@@ -23,6 +23,7 @@
 #include "icinga/i2-icinga.hpp"
 #include "icinga/scheduleddowntime-ti.hpp"
 #include "icinga/checkable.hpp"
+#include <atomic>
 
 namespace icinga
 {
@@ -47,6 +48,7 @@ public:
 
        static void EvaluateApplyRules(const intrusive_ptr<Host>& host);
        static void EvaluateApplyRules(const intrusive_ptr<Service>& service);
+       static bool AllConfigIsLoaded();
 
        void ValidateRanges(const Lazy<Dictionary::Ptr>& lvalue, const ValidationUtils& utils) override;
        void ValidateChildOptions(const Lazy<Value>& lvalue, const ValidationUtils& utils) override;
@@ -62,6 +64,8 @@ private:
        std::pair<double, double> FindNextSegment();
        void CreateNextDowntime();
 
+       static std::atomic<bool> m_AllConfigLoaded;
+
        static bool EvaluateApplyRuleInstance(const Checkable::Ptr& checkable, const String& name, ScriptFrame& frame, const ApplyRule& rule);
        static bool EvaluateApplyRule(const Checkable::Ptr& checkable, const ApplyRule& rule);
 };