]> granicus.if.org Git - icinga2/commitdiff
ido: Implement hostgroup members.
authorGunnar Beutner <gunnar.beutner@netways.de>
Mon, 5 Aug 2013 06:56:50 +0000 (08:56 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Mon, 5 Aug 2013 06:57:08 +0000 (08:57 +0200)
lib/icinga/hostgroup.cpp
lib/ido/hostgroupdbobject.cpp

index 0d0899e057349509d25627e74527b09aa04c745d..53547bcc18d1ca1bc2392982296b7f05660a63b3 100644 (file)
@@ -138,8 +138,10 @@ void HostGroup::RefreshMembersCache(void)
                }
        }
 
-       boost::mutex::scoped_lock lock(l_Mutex);
-       l_MembersCache.swap(newMembersCache);
+       {
+               boost::mutex::scoped_lock lock(l_Mutex);
+               l_MembersCache.swap(newMembersCache);
+       }
 
        OnMembersChanged();
 }
index fb871f516e3a0d3330c84ab5c35e43d8819e143a..59e954562e144ec7bb9b5bb16e0391caaeaaa46b 100644 (file)
@@ -24,6 +24,7 @@
 #include "base/objectlock.h"
 #include "base/initialize.h"
 #include "base/logger_fwd.h"
+#include "base/dynamictype.h"
 #include <boost/foreach.hpp>
 
 using namespace icinga;
@@ -62,5 +63,27 @@ void HostGroupDbObject::OnConfigUpdate(void)
 
 void HostGroupDbObject::MembersChangedHandler(void)
 {
-       Log(LogWarning, "ido", "MOO");
+       DbQuery query1;
+       query1.Table = DbType::GetByName("HostGroup")->GetTable() + "_members";
+       query1.Type = DbQueryDelete;
+       query1.WhereCriteria = boost::make_shared<Dictionary>();
+       query1.WhereCriteria->Set("instance_id", 0);
+       OnQuery(query1);
+
+       BOOST_FOREACH(const DynamicObject::Ptr& object, DynamicType::GetObjects("HostGroup")) {
+               HostGroup::Ptr hg = static_pointer_cast<HostGroup>(object);
+
+               Log(LogWarning, "ido", "HG: " + hg->GetName());
+
+               BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
+                       DbQuery query2;
+                       query2.Table = DbType::GetByName("HostGroup")->GetTable() + "_members";
+                       query2.Type = DbQueryInsert;
+                       query2.Fields = boost::make_shared<Dictionary>();
+                       query2.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
+                       query2.Fields->Set("hostgroup_id", hg);
+                       query2.Fields->Set("host_object_id", host);
+                       OnQuery(query2);
+               }
+       }
 }