]> granicus.if.org Git - icinga2/commitdiff
Implement support for updating the program_end_time column
authorGunnar Beutner <gunnar.beutner@netways.de>
Wed, 4 Feb 2015 14:25:10 +0000 (15:25 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Wed, 4 Feb 2015 14:25:10 +0000 (15:25 +0100)
fixes #6923

lib/db_ido/dbconnection.cpp
lib/db_ido/dbconnection.hpp
lib/db_ido_mysql/idomysqlconnection.cpp
lib/db_ido_mysql/idomysqlconnection.hpp
lib/db_ido_pgsql/idopgsqlconnection.cpp
lib/db_ido_pgsql/idopgsqlconnection.hpp

index 844b32b1560bb42ea4827a51025818406d989b02..4cb73339c689c9fc39a913d71cc39a9f7032a385 100644 (file)
@@ -81,6 +81,21 @@ void DbConnection::Pause(void)
             << "Pausing IDO connection: " << GetName();
 
        m_CleanUpTimer.reset();
+
+       DbQuery query1;
+       query1.Table = "programstatus";
+       query1.IdColumn = "programstatus_id";
+       query1.Type = DbQueryUpdate;
+       query1.Category = DbCatProgramStatus;
+       query1.WhereCriteria = new Dictionary();
+       query1.WhereCriteria->Set("instance_id", 0);  /* DbConnection class fills in real ID */
+
+       query1.Fields = new Dictionary();
+       query1.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
+       query1.Fields->Set("program_end_time", DbValue::FromTimestamp(Utility::GetTime()));
+       ExecuteQuery(query1);
+
+       NewTransaction();
 }
 
 void DbConnection::InitializeDbTimer(void)
index 5317ba0e45083843e6a84fd80207be7f1380d4f6..4e67b8ea67177535b6ecaa038f8c04979d4af05a 100644 (file)
@@ -78,6 +78,7 @@ protected:
 
        virtual void CleanUpExecuteQuery(const String& table, const String& time_column, double max_age);
        virtual void FillIDCache(const DbType::Ptr& type) = 0;
+       virtual void NewTransaction(void) = 0;
 
        void UpdateAllObjects(void);
 
index 107625d5751b3a763d9030557c37f861e29a63d0..f94b6b65fe29e2d5c6eb2907245a2fb842687f6a 100644 (file)
@@ -135,10 +135,15 @@ void IdoMysqlConnection::Disconnect(void)
 
 void IdoMysqlConnection::TxTimerHandler(void)
 {
-       m_QueryQueue.Enqueue(boost::bind(&IdoMysqlConnection::NewTransaction, this), true);
+       NewTransaction();
 }
 
 void IdoMysqlConnection::NewTransaction(void)
+{
+       m_QueryQueue.Enqueue(boost::bind(&IdoMysqlConnection::InternalNewTransaction, this));
+}
+
+void IdoMysqlConnection::InternalNewTransaction(void)
 {
        boost::mutex::scoped_lock lock(m_ConnectionMutex);
 
index 24fd1bb8583774230aef25af22e3cf6d9ff0f5ac..acbac6c518042630003810dcdaef196769b52253 100644 (file)
@@ -55,6 +55,7 @@ protected:
        virtual void ExecuteQuery(const DbQuery& query);
        virtual void CleanUpExecuteQuery(const String& table, const String& time_key, double time_value);
        virtual void FillIDCache(const DbType::Ptr& type);
+       virtual void NewTransaction(void);
 
 private:
        DbReference m_InstanceID;
@@ -80,7 +81,6 @@ private:
        void InternalActivateObject(const DbObject::Ptr& dbobj);
 
        void Disconnect(void);
-       void NewTransaction(void);
        void Reconnect(void);
 
        void AssertOnWorkQueue(void);
@@ -90,6 +90,7 @@ private:
 
        void InternalExecuteQuery(const DbQuery& query, DbQueryType *typeOverride = NULL);
        void InternalCleanUpExecuteQuery(const String& table, const String& time_key, double time_value);
+       void InternalNewTransaction(void);
 
        virtual void ClearConfigTable(const String& table);
 
index 005fd3c7d648019481194a0ce4e1be0a4656a0fe..1d74ebe32719168b540c55f29bcb50c65994f57a 100644 (file)
@@ -136,10 +136,15 @@ void IdoPgsqlConnection::Disconnect(void)
 
 void IdoPgsqlConnection::TxTimerHandler(void)
 {
-       m_QueryQueue.Enqueue(boost::bind(&IdoPgsqlConnection::NewTransaction, this), true);
+       NewTransaction();
 }
 
 void IdoPgsqlConnection::NewTransaction(void)
+{
+       m_QueryQueue.Enqueue(boost::bind(&IdoPgsqlConnection::NewTransaction, this), true);
+}
+
+void IdoPgsqlConnection::InternalNewTransaction(void)
 {
        boost::mutex::scoped_lock lock(m_ConnectionMutex);
 
index 486a8114e9706db5ea93a391714e0df2e66aa7ea..3b9a79eeab484eecd596230820d6fb2d394baaf6 100644 (file)
@@ -55,6 +55,7 @@ protected:
        virtual void ExecuteQuery(const DbQuery& query);
        virtual void CleanUpExecuteQuery(const String& table, const String& time_key, double time_value);
        virtual void FillIDCache(const DbType::Ptr& type);
+       virtual void NewTransaction(void);
 
 private:
        DbReference m_InstanceID;
@@ -78,7 +79,7 @@ private:
        void InternalActivateObject(const DbObject::Ptr& dbobj);
 
        void Disconnect(void);
-       void NewTransaction(void);
+       void InternalNewTransaction(void);
        void Reconnect(void);
 
        void AssertOnWorkQueue(void);