]> granicus.if.org Git - icinga2/commitdiff
Implement property change handler for next_check.
authorGunnar Beutner <gunnar.beutner@netways.de>
Tue, 22 Jan 2013 11:44:23 +0000 (12:44 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Tue, 22 Jan 2013 11:44:23 +0000 (12:44 +0100)
Fixes #3547

components/checker/checkercomponent.cpp
components/checker/checkercomponent.h
lib/icinga/service.cpp
lib/icinga/service.h

index 747da37f409b718a94b0c4d49154e39b21a9679c..98fc7f1f1b02dbe632f0f0b66c9356009d016278 100644 (file)
@@ -30,6 +30,7 @@ void CheckerComponent::Start(void)
        m_Endpoint->RegisterSubscription("checker");
 
        Service::OnCheckerChanged.connect(bind(&CheckerComponent::CheckerChangedHandler, this, _1));
+       Service::OnNextCheckChanged.connect(bind(&CheckerComponent::NextCheckChangedHandler, this, _1));
        DynamicObject::OnUnregistered.connect(bind(&CheckerComponent::ObjectRemovedHandler, this, _1));
 
        m_CheckTimer = boost::make_shared<Timer>();
@@ -144,6 +145,20 @@ void CheckerComponent::CheckerChangedHandler(const Service::Ptr& service)
        }
 }
 
+void CheckerComponent::NextCheckChangedHandler(const Service::Ptr& service)
+{
+       /* remove and re-insert the service from the set in order to force an index update */
+       typedef nth_index<ServiceSet, 0>::type ServiceView;
+       ServiceView& idx = boost::get<0>(m_IdleServices);
+
+       ServiceView::iterator it = idx.find(service);
+       if (it == idx.end())
+               return;
+
+       idx.erase(it);
+       idx.insert(service);
+}
+
 void CheckerComponent::ObjectRemovedHandler(const DynamicObject::Ptr& object)
 {
        Service::Ptr service = dynamic_pointer_cast<Service>(object);
index 698cfdb7217f0104ba8f59c2ed599e91a73e41e4..66cb9a2f25c98500e832dcb099c4737413cf48ed 100644 (file)
@@ -74,6 +74,7 @@ private:
        void AdjustCheckTimer(void);
 
        void CheckerChangedHandler(const Service::Ptr& service);
+       void NextCheckChangedHandler(const Service::Ptr& service);
        void ObjectRemovedHandler(const DynamicObject::Ptr& object);
 };
 
index 979dd2e5b998e88be7652ff789c318860a6ce879..704da8854f7ce2ea679c8a2eebdbfeaf5fd14717 100644 (file)
@@ -53,6 +53,7 @@ const int Service::CheckIntervalDivisor = 5;
 
 boost::signal<void (const Service::Ptr&, const CheckResultMessage&)> Service::OnCheckResultReceived;
 boost::signal<void (const Service::Ptr&, const String&)> Service::OnCheckerChanged;
+boost::signal<void (const Service::Ptr&, const Value&)> Service::OnNextCheckChanged;
 
 Service::Service(const Dictionary::Ptr& serializedObject)
        : DynamicObject(serializedObject)
@@ -479,6 +480,8 @@ void Service::OnAttributeChanged(const String& name, const Value& oldValue)
 {
        if (name == "checker")
                OnCheckerChanged(GetSelf(), oldValue);
+       else if (name == "next_check")
+               OnNextCheckChanged(GetSelf(), oldValue);
 }
 
 void Service::BeginExecuteCheck(const function<void (void)>& callback)
index 8fc19559dbf96cca06b9cb5a26aaa560796f3366..65331c289d94b077976f43e798fa40f92ab2a795 100644 (file)
@@ -131,6 +131,7 @@ public:
 
        static boost::signal<void (const Service::Ptr& service, const CheckResultMessage&)> OnCheckResultReceived;
        static boost::signal<void (const Service::Ptr&, const String&)> OnCheckerChanged;
+       static boost::signal<void (const Service::Ptr&, const Value&)> OnNextCheckChanged;
 
 protected:
        virtual void OnAttributeChanged(const String& name, const Value& oldValue);