]> granicus.if.org Git - icinga2/commitdiff
DB IDO: Update Host/Service state 'is_flapping' on FlappingChanged.
authorMichael Friedrich <Michael.Friedrich@netways.de>
Fri, 2 May 2014 21:49:52 +0000 (23:49 +0200)
committerMichael Friedrich <Michael.Friedrich@netways.de>
Fri, 2 May 2014 21:56:52 +0000 (23:56 +0200)
Refs #6051

lib/db_ido/dbevents.cpp
lib/db_ido/dbevents.h

index c04f959b9c5ce34115b51f8a42893400e8e88c45..9bdc0c3c3fb64c26398627677acd012ccf86a48a 100644 (file)
@@ -51,6 +51,7 @@ void DbEvents::StaticInitialize(void)
        Checkable::OnAcknowledgementCleared.connect(boost::bind(&DbEvents::RemoveAcknowledgement, _1));
 
        Checkable::OnNextCheckChanged.connect(bind(&DbEvents::NextCheckChangedHandler, _1, _2, _3));
+       Checkable::OnFlappingChanged.connect(bind(&DbEvents::FlappingChangedHandler, _1, _2));
 
        /* History */
        Checkable::OnCommentAdded.connect(boost::bind(&DbEvents::AddCommentHistory, _1, _2));
@@ -106,6 +107,37 @@ void DbEvents::NextCheckChangedHandler(const Checkable::Ptr& checkable, double n
        DbObject::OnQuery(query1);
 }
 
+void DbEvents::FlappingChangedHandler(const Checkable::Ptr& checkable, FlappingState state)
+{
+       Host::Ptr host;
+       Service::Ptr service;
+       tie(host, service) = GetHostService(checkable);
+
+       DbQuery query1;
+       if (service)
+               query1.Table = "servicestatus";
+       else
+               query1.Table = "hoststatus";
+
+       query1.Type = DbQueryUpdate;
+
+       Dictionary::Ptr fields1 = make_shared<Dictionary>();
+       fields1->Set("is_flapping", CompatUtility::GetCheckableIsFlapping(checkable));
+       fields1->Set("percent_state_change", CompatUtility::GetCheckablePercentStateChange(checkable));
+
+       query1.Fields = fields1;
+
+       query1.WhereCriteria = make_shared<Dictionary>();
+       if (service)
+               query1.WhereCriteria->Set("service_object_id", service);
+       else
+               query1.WhereCriteria->Set("host_object_id", host);
+
+       query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
+
+       DbObject::OnQuery(query1);
+}
+
 /* comments */
 void DbEvents::AddComments(const Checkable::Ptr& checkable)
 {
index 8c174c2f9d88ba039c196610c5bb6fd4bdc96526..debd71fbf687b95bb4dd73d566b76e29e9ad813c 100644 (file)
@@ -73,6 +73,7 @@ public:
 
         /* Status */
        static void NextCheckChangedHandler(const Checkable::Ptr& checkable, double nextCheck, const String& authority);
+       static void FlappingChangedHandler(const Checkable::Ptr& checkable, FlappingState state);
 
        static void AddComment(const Checkable::Ptr& checkable, const Comment::Ptr& comment);
        static void RemoveComment(const Checkable::Ptr& checkable, const Comment::Ptr& comment);