]> granicus.if.org Git - icinga2/commitdiff
DB IDO: Send endpoint authority for status updates.
authorMichael Friedrich <michael.friedrich@netways.de>
Fri, 21 Feb 2014 16:26:56 +0000 (17:26 +0100)
committerMichael Friedrich <michael.friedrich@netways.de>
Thu, 20 Mar 2014 17:03:47 +0000 (18:03 +0100)
Refs #5636

components/db_ido_pgsql/schema/pgsql.sql
lib/base/dynamicobject.cpp
lib/base/dynamicobject.h
lib/db_ido/dbobject.cpp
lib/db_ido/dbobject.h
lib/icinga/service-check.cpp

index bd01157ac5d9bba510692ea58e4c7216f2df05ce..4cf055ec671b130e923dc2c056c4d391b75b9d73 100644 (file)
@@ -1420,7 +1420,6 @@ ALTER TABLE icinga_servicechecks ADD COLUMN endpoint_object_id bigint default NU
 ALTER TABLE icinga_statehistory ADD COLUMN endpoint_object_id bigint default NULL;
 ALTER TABLE icinga_systemcommands ADD COLUMN endpoint_object_id bigint default NULL;
 
-
 -- -----------------------------------------
 -- add index (delete)
 -- -----------------------------------------
index 65c831096e0df56aeedbdd713605180ee2f487a2..11be09821ccff299c5cc5e2311811f9e2cf76bc5 100644 (file)
@@ -44,7 +44,7 @@ INITIALIZE_ONCE(&DynamicObject::StaticInitialize);
 
 boost::signals2::signal<void (const DynamicObject::Ptr&)> DynamicObject::OnStarted;
 boost::signals2::signal<void (const DynamicObject::Ptr&)> DynamicObject::OnStopped;
-boost::signals2::signal<void (const DynamicObject::Ptr&)> DynamicObject::OnStateChanged;
+boost::signals2::signal<void (const DynamicObject::Ptr&, const String&)> DynamicObject::OnStateChanged;
 boost::signals2::signal<void (const DynamicObject::Ptr&, const String&, bool)> DynamicObject::OnAuthorityChanged;
 
 void DynamicObject::StaticInitialize(void)
index c2b4337973a8b59cdf2a8d886d318756f6c0058d..fa7e5761787042776cfa73fbc30030dcf4430c39 100644 (file)
@@ -56,7 +56,7 @@ public:
 
        static boost::signals2::signal<void (const DynamicObject::Ptr&)> OnStarted;
        static boost::signals2::signal<void (const DynamicObject::Ptr&)> OnStopped;
-       static boost::signals2::signal<void (const DynamicObject::Ptr&)> OnStateChanged;
+       static boost::signals2::signal<void (const DynamicObject::Ptr&, const String&)> OnStateChanged;
        static boost::signals2::signal<void (const DynamicObject::Ptr&, const String&, bool)> OnAuthorityChanged;
 
        Value InvokeMethod(const String& method, const std::vector<Value>& arguments);
index 89307a72cbb2da17d8b3ea64576ba3cd74717f4d..f20f731a3301490726094c334fe7698ca11fd747 100644 (file)
@@ -21,6 +21,7 @@
 #include "db_ido/dbtype.h"
 #include "db_ido/dbvalue.h"
 #include "icinga/service.h"
+#include "cluster/endpoint.h"
 #include "base/dynamictype.h"
 #include "base/objectlock.h"
 #include "base/utility.h"
@@ -41,7 +42,7 @@ DbObject::DbObject(const shared_ptr<DbType>& type, const String& name1, const St
 void DbObject::StaticInitialize(void)
 {
        /* triggered in ProcessCheckResult(), requires UpdateNextCheck() to be called before */
-       DynamicObject::OnStateChanged.connect(boost::bind(&DbObject::StateChangedHandler, _1));
+       DynamicObject::OnStateChanged.connect(boost::bind(&DbObject::StateChangedHandler, _1, _2));
 }
 
 void DbObject::SetObject(const DynamicObject::Ptr& object)
@@ -95,10 +96,12 @@ void DbObject::SendConfigUpdate(void)
        OnConfigUpdate();
 }
 
-void DbObject::SendStatusUpdate(void)
+void DbObject::SendStatusUpdate(const String& authority)
 {
        Dictionary::Ptr fields = GetStatusFields();
 
+       Endpoint::Ptr endpoint = Endpoint::GetByName(authority);
+
        if (!fields)
                return;
 
@@ -109,6 +112,10 @@ void DbObject::SendStatusUpdate(void)
        query.Fields = fields;
        query.Fields->Set(GetType()->GetIDColumn(), GetObject());
        query.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
+
+       if (endpoint)
+               query.Fields->Set("endpoint_object_id", endpoint);
+
        query.Fields->Set("status_update_time", DbValue::FromTimestamp(Utility::GetTime()));
        query.WhereCriteria = make_shared<Dictionary>();
        query.WhereCriteria->Set(GetType()->GetIDColumn(), GetObject());
@@ -183,12 +190,12 @@ DbObject::Ptr DbObject::GetOrCreateByObject(const DynamicObject::Ptr& object)
        return dbobj;
 }
 
-void DbObject::StateChangedHandler(const DynamicObject::Ptr& object)
+void DbObject::StateChangedHandler(const DynamicObject::Ptr& object, const String& authority)
 {
        DbObject::Ptr dbobj = GetOrCreateByObject(object);
 
        if (!dbobj)
                return;
 
-       dbobj->SendStatusUpdate();
+       dbobj->SendStatusUpdate(authority);
 }
index d6bc9abbb32bc932f292bcd5bd3ae1a7dfa2a314..896f730897b738c0a6fa0a2559b7528ea3d32e41 100644 (file)
@@ -79,7 +79,7 @@ public:
        static boost::signals2::signal<void (const DbQuery&)> OnQuery;
 
        void SendConfigUpdate(void);
-       void SendStatusUpdate(void);
+       void SendStatusUpdate(const String& authority = String());
 
        double GetLastConfigUpdate(void) const;
        double GetLastStatusUpdate(void) const;
@@ -100,7 +100,7 @@ private:
        double m_LastConfigUpdate;
        double m_LastStatusUpdate;
 
-       static void StateChangedHandler(const DynamicObject::Ptr& object);
+       static void StateChangedHandler(const DynamicObject::Ptr& object, const String& authority);
 
        friend class DbType;
 };
index 6fb654d395aea9a6b88ebe2150a9485f275683c6..b688548538982fca0e96b52ded761f2e61847e21 100644 (file)
@@ -417,7 +417,7 @@ void Service::ProcessCheckResult(const CheckResult::Ptr& cr, const String& autho
        OnNewCheckResult(GetSelf(), cr, authority);
 
        /* signal status updates to for example db_ido */
-       OnStateChanged(GetSelf());
+       OnStateChanged(GetSelf(), authority);
 
        if (hardChange)
                OnStateChange(GetSelf(), cr, StateTypeHard, authority);