implemented "runtime data" for objects that is saved only on server shutdown; minor...
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 26 Sep 2017 17:53:09 +0000 (20:53 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 26 Sep 2017 17:53:09 +0000 (20:53 +0300)
33 files changed:
ChangeLog
src/server/core/accesspoint.cpp
src/server/core/agent_policy.cpp
src/server/core/ap_config.cpp
src/server/core/ap_logparser.cpp
src/server/core/bizservice.cpp
src/server/core/bizsvcroot.cpp
src/server/core/chassis.cpp
src/server/core/cluster.cpp
src/server/core/condition.cpp
src/server/core/container.cpp
src/server/core/dashboard.cpp
src/server/core/entirenet.cpp
src/server/core/interface.cpp
src/server/core/main.cpp
src/server/core/mobile.cpp
src/server/core/netmap.cpp
src/server/core/netobj.cpp
src/server/core/netsrv.cpp
src/server/core/node.cpp
src/server/core/nodelink.cpp
src/server/core/rack.cpp
src/server/core/sensor.cpp
src/server/core/slmcheck.cpp
src/server/core/subnet.cpp
src/server/core/svccontainer.cpp
src/server/core/syncer.cpp
src/server/core/template.cpp
src/server/core/uniroot.cpp
src/server/core/vpnconn.cpp
src/server/core/zone.cpp
src/server/include/nms_core.h
src/server/include/nms_objects.h

index 6aebbb1..024d995 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,7 @@
 - Multi-valued columns in summary tables
 - Threshold violation events have current DCI value as parameter 8 (named as "dciValue")
 - New agent configuration parameter TunnelKeepaliveInterval
+- Optimizations in database access layer
 - Fixed issues: NX-1265, NX-1282, NX-1296, NX-1300, NX-1309, NX-1314, NX-1315
 
 
index 305321c..934963c 100644 (file)
@@ -132,14 +132,14 @@ bool AccessPoint::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
 /**
  * Save object to database
  */
-BOOL AccessPoint::saveToDatabase(DB_HANDLE hdb)
+bool AccessPoint::saveToDatabase(DB_HANDLE hdb)
 {
    // Lock object's access
    lockProperties();
 
    saveCommonProperties(hdb);
 
-   BOOL bResult;
+   bool bResult;
        DB_STATEMENT hStmt;
    if (IsDatabaseRecordExist(hdb, _T("access_points"), _T("id"), m_id))
                hStmt = DBPrepare(hdb, _T("UPDATE access_points SET mac_address=?,vendor=?,model=?,serial_number=?,node_id=?,ap_state=?,ap_index=? WHERE id=?"));
@@ -163,7 +163,7 @@ BOOL AccessPoint::saveToDatabase(DB_HANDLE hdb)
        }
        else
        {
-               bResult = FALSE;
+               bResult = false;
        }
 
    // Save data collection items
index 9e16c25..9ad1447 100644 (file)
@@ -113,11 +113,11 @@ BOOL AgentPolicy::savePolicyCommonProperties(DB_HANDLE hdb)
 /**
  * Save to database
  */
-BOOL AgentPolicy::saveToDatabase(DB_HANDLE hdb)
+bool AgentPolicy::saveToDatabase(DB_HANDLE hdb)
 {
        lockProperties();
 
-       BOOL success = savePolicyCommonProperties(hdb);
+       bool success = savePolicyCommonProperties(hdb);
 
        // Clear modifications flag and unlock object
        if (success)
index 060a6d0..50d9949 100644 (file)
@@ -51,15 +51,14 @@ AgentPolicyConfig::~AgentPolicyConfig()
        safe_free(m_fileContent);
 }
 
-
 /**
  * Save to database
  */
-BOOL AgentPolicyConfig::saveToDatabase(DB_HANDLE hdb)
+bool AgentPolicyConfig::saveToDatabase(DB_HANDLE hdb)
 {
        lockProperties();
 
-       BOOL success = savePolicyCommonProperties(hdb);
+       bool success = savePolicyCommonProperties(hdb);
        if (success)
        {
                String data = DBPrepareString(hdb, m_fileContent);
@@ -70,7 +69,7 @@ BOOL AgentPolicyConfig::saveToDatabase(DB_HANDLE hdb)
                DB_RESULT hResult = DBSelect(hdb, query);
                if (hResult != NULL)
                {
-                       BOOL isNew = (DBGetNumRows(hResult) == 0);
+                       bool isNew = (DBGetNumRows(hResult) == 0);
                        DBFreeResult(hResult);
 
                        if (isNew)
index bf53ba6..d235078 100644 (file)
@@ -54,11 +54,11 @@ AgentPolicyLogParser::~AgentPolicyLogParser()
 /**
  * Save to database
  */
-BOOL AgentPolicyLogParser::saveToDatabase(DB_HANDLE hdb)
+bool AgentPolicyLogParser::saveToDatabase(DB_HANDLE hdb)
 {
        lockProperties();
 
-       BOOL success = savePolicyCommonProperties(hdb);
+       bool success = savePolicyCommonProperties(hdb);
        if (success)
        {
                String data = DBPrepareString(hdb, m_fileContent);
@@ -69,7 +69,7 @@ BOOL AgentPolicyLogParser::saveToDatabase(DB_HANDLE hdb)
                DB_RESULT hResult = DBSelect(hdb, query);
                if (hResult != NULL)
                {
-                       BOOL isNew = (DBGetNumRows(hResult) == 0);
+                       bool isNew = (DBGetNumRows(hResult) == 0);
                        DBFreeResult(hResult);
 
                        if (isNew)
index dbfaf0b..f5bcca2 100644 (file)
@@ -95,13 +95,13 @@ bool BusinessService::loadFromDatabase(DB_HANDLE hdb, UINT32 id)
 /**
  * Save service to database
  */
-BOOL BusinessService::saveToDatabase(DB_HANDLE hdb)
+bool BusinessService::saveToDatabase(DB_HANDLE hdb)
 {
        BOOL bNewObject = TRUE;
 
        DB_STATEMENT hStmt = DBPrepare(hdb, _T("SELECT service_id FROM business_services WHERE service_id=?"));
        if (hStmt == NULL)
-               return FALSE;
+               return false;
 
        lockProperties();
 
@@ -119,7 +119,7 @@ BOOL BusinessService::saveToDatabase(DB_HANDLE hdb)
        if (hStmt == NULL)
        {
                unlockProperties();
-               return FALSE;
+               return false;
        }
        DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, m_id);
        unlockProperties();
@@ -127,7 +127,7 @@ BOOL BusinessService::saveToDatabase(DB_HANDLE hdb)
        if (!DBExecute(hStmt))
        {
                DBFreeStatement(hStmt);
-               return FALSE;
+               return false;
        }
 
        DBFreeStatement(hStmt);
index d1e17bd..0982eee 100644 (file)
@@ -43,7 +43,7 @@ BusinessServiceRoot::~BusinessServiceRoot()
 /**
  * Save object to database
  */
-BOOL BusinessServiceRoot::saveToDatabase(DB_HANDLE hdb)
+bool BusinessServiceRoot::saveToDatabase(DB_HANDLE hdb)
 {
    TCHAR szQuery[1024];
 
@@ -68,7 +68,7 @@ BOOL BusinessServiceRoot::saveToDatabase(DB_HANDLE hdb)
    // Unlock object and clear modification flag
    unlockProperties();
    m_isModified = false;
-   return TRUE;
+   return true;
 }
 
 /**
index 2067618..aaf5130 100644 (file)
@@ -189,7 +189,7 @@ UINT32 Chassis::modifyFromMessageInternal(NXCPMessage *request)
 /**
  * Save to database
  */
-BOOL Chassis::saveToDatabase(DB_HANDLE hdb)
+bool Chassis::saveToDatabase(DB_HANDLE hdb)
 {
    lockProperties();
    bool success = saveCommonProperties(hdb);
index e7d7eab..b062fb9 100644 (file)
@@ -194,7 +194,7 @@ bool Cluster::showThresholdSummary()
 /**
  * Save object to database
  */
-BOOL Cluster::saveToDatabase(DB_HANDLE hdb)
+bool Cluster::saveToDatabase(DB_HANDLE hdb)
 {
    lockProperties();
    bool success = saveCommonProperties(hdb);
index f614de4..aff4328 100644 (file)
@@ -155,7 +155,7 @@ bool ConditionObject::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
 /**
  * Save object to database
  */
-BOOL ConditionObject::saveToDatabase(DB_HANDLE hdb)
+bool ConditionObject::saveToDatabase(DB_HANDLE hdb)
 {
    TCHAR *pszEscScript, *pszQuery;
    DB_RESULT hResult;
@@ -221,7 +221,7 @@ BOOL ConditionObject::saveToDatabase(DB_HANDLE hdb)
    // Unlock object and clear modification flag
    m_isModified = false;
    unlockProperties();
-   return TRUE;
+   return true;
 }
 
 /**
index b3aee22..8af9ff9 100644 (file)
@@ -130,7 +130,7 @@ bool Container::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
  *
  * @param hdb database connection handle
  */
-BOOL Container::saveToDatabase(DB_HANDLE hdb)
+bool Container::saveToDatabase(DB_HANDLE hdb)
 {
    // Lock object's access
    lockProperties();
@@ -155,7 +155,7 @@ BOOL Container::saveToDatabase(DB_HANDLE hdb)
        DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, (LONG)getObjectClass());
        DBBind(hStmt, 2, DB_SQLTYPE_TEXT, m_bindFilterSource, DB_BIND_STATIC);
        DBBind(hStmt, 3, DB_SQLTYPE_INTEGER, m_id);
-       BOOL success = DBExecute(hStmt);
+       bool success = DBExecute(hStmt);
        DBFreeStatement(hStmt);
 
        if (success)
index b7307f8..a7c2e9a 100644 (file)
@@ -107,7 +107,7 @@ bool Dashboard::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
 /**
  * Save object to database
  */
-BOOL Dashboard::saveToDatabase(DB_HANDLE hdb)
+bool Dashboard::saveToDatabase(DB_HANDLE hdb)
 {
        lockProperties();
 
@@ -163,7 +163,7 @@ fail:
    if (hStmt != NULL)
       DBFreeStatement(hStmt);
        unlockProperties();
-       return FALSE;
+       return false;
 }
 
 /**
index 638911a..4b0a970 100644 (file)
@@ -41,7 +41,7 @@ Network::~Network()
 /**
  * Save object to database
  */
-BOOL Network::saveToDatabase(DB_HANDLE hdb)
+bool Network::saveToDatabase(DB_HANDLE hdb)
 {
    lockProperties();
 
@@ -51,7 +51,7 @@ BOOL Network::saveToDatabase(DB_HANDLE hdb)
    // Unlock object and clear modification flag
    m_isModified = false;
    unlockProperties();
-   return TRUE;
+   return true;
 }
 
 /**
index fc8e1ec..25b328b 100644 (file)
@@ -321,7 +321,7 @@ bool Interface::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
 /**
  * Save interface object to database
  */
-BOOL Interface::saveToDatabase(DB_HANDLE hdb)
+bool Interface::saveToDatabase(DB_HANDLE hdb)
 {
    TCHAR szMacStr[16];
    UINT32 dwNodeId;
@@ -331,7 +331,7 @@ BOOL Interface::saveToDatabase(DB_HANDLE hdb)
    if (!saveCommonProperties(hdb))
        {
                unlockProperties();
-               return FALSE;
+               return false;
        }
 
    // Determine owning node's ID
@@ -399,13 +399,13 @@ BOOL Interface::saveToDatabase(DB_HANDLE hdb)
    }
        DBBind(hStmt, 22, DB_SQLTYPE_INTEGER, m_id);
 
-       BOOL success = DBExecute(hStmt);
+       bool success = DBExecute(hStmt);
        DBFreeStatement(hStmt);
 
    // Save IP addresses
    if (success)
    {
-      success = FALSE;
+      success = false;
 
                hStmt = DBPrepare(hdb, _T("DELETE FROM interface_address_list WHERE iface_id = ?"));
       if (hStmt != NULL)
@@ -435,7 +435,7 @@ BOOL Interface::saveToDatabase(DB_HANDLE hdb)
       }
       else
       {
-         success = FALSE;
+         success = false;
       }
    }
 
index 09e6ab6..4a897d2 100644 (file)
@@ -1077,7 +1077,7 @@ void NXCORE_EXPORTABLE Shutdown()
        }
 
    DB_HANDLE hdb = DBConnectionPoolAcquireConnection();
-       SaveObjects(hdb, INVALID_INDEX);
+       SaveObjects(hdb, INVALID_INDEX, true);
        nxlog_debug(2, _T("All objects saved to database"));
        SaveUsers(hdb, INVALID_INDEX);
        nxlog_debug(2, _T("All users saved to database"));
@@ -1136,7 +1136,7 @@ void NXCORE_EXPORTABLE FastShutdown()
        ConditionSet(m_condShutdown);
 
        DB_HANDLE hdb = DBConnectionPoolAcquireConnection();
-       SaveObjects(hdb, INVALID_INDEX);
+       SaveObjects(hdb, INVALID_INDEX, true);
        DbgPrintf(2, _T("All objects saved to database"));
        SaveUsers(hdb, INVALID_INDEX);
        DbgPrintf(2, _T("All users saved to database"));
index 706dc70..28031af 100644 (file)
@@ -109,14 +109,14 @@ bool MobileDevice::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
 /**
  * Save object to database
  */
-BOOL MobileDevice::saveToDatabase(DB_HANDLE hdb)
+bool MobileDevice::saveToDatabase(DB_HANDLE hdb)
 {
    // Lock object's access
    lockProperties();
 
    saveCommonProperties(hdb);
 
-   BOOL bResult;
+   bool bResult;
        DB_STATEMENT hStmt;
    if (IsDatabaseRecordExist(hdb, _T("mobile_devices"), _T("id"), m_id))
                hStmt = DBPrepare(hdb, _T("UPDATE mobile_devices SET device_id=?,vendor=?,model=?,serial_number=?,os_name=?,os_version=?,user_id=?,battery_level=? WHERE id=?"));
@@ -140,7 +140,7 @@ BOOL MobileDevice::saveToDatabase(DB_HANDLE hdb)
        }
        else
        {
-               bResult = FALSE;
+               bResult = false;
        }
 
    // Save data collection items
index 5515bef..7aefb5a 100644 (file)
@@ -233,7 +233,7 @@ void NetworkMap::calculateCompoundStatus(BOOL bForcedRecalc)
 /**
  * Save to database
  */
-BOOL NetworkMap::saveToDatabase(DB_HANDLE hdb)
+bool NetworkMap::saveToDatabase(DB_HANDLE hdb)
 {
        TCHAR query[1024];
 
@@ -342,11 +342,11 @@ BOOL NetworkMap::saveToDatabase(DB_HANDLE hdb)
    }
 
        unlockProperties();
-       return TRUE;
+       return true;
 
 fail:
        unlockProperties();
-       return FALSE;
+       return false;
 }
 
 /**
index bd81733..db8d60a 100644 (file)
@@ -146,9 +146,19 @@ void NetObj::linkObjects()
 /**
  * Save object to database
  */
-BOOL NetObj::saveToDatabase(DB_HANDLE hdb)
+bool NetObj::saveToDatabase(DB_HANDLE hdb)
 {
-   return FALSE;     // Abstract objects cannot be saved to database
+   return false;     // Abstract objects cannot be saved to database
+}
+
+/**
+ * Save runtime data to database. Called only on server shutdown to save
+ * less important but frequently changing runtime data when it is not feasible
+ * to mark object as modified on each change of such data.
+ */
+bool NetObj::saveRuntimeData(DB_HANDLE hdb)
+{
+   return true;   // Report success by default
 }
 
 /**
index eda1253..1453e71 100644 (file)
@@ -75,7 +75,7 @@ NetworkService::~NetworkService()
 /**
  * Save object to database
  */
-BOOL NetworkService::saveToDatabase(DB_HANDLE hdb)
+bool NetworkService::saveToDatabase(DB_HANDLE hdb)
 {
    lockProperties();
 
@@ -124,7 +124,7 @@ BOOL NetworkService::saveToDatabase(DB_HANDLE hdb)
    // Unlock object and clear modification flag
    m_isModified = false;
    unlockProperties();
-   return TRUE;
+   return true;
 }
 
 /**
index 6647cf4..fa8bab3 100644 (file)
@@ -481,7 +481,7 @@ bool Node::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
 /**
  * Save object to database
  */
-BOOL Node::saveToDatabase(DB_HANDLE hdb)
+bool Node::saveToDatabase(DB_HANDLE hdb)
 {
    // Lock object's access
    lockProperties();
@@ -489,7 +489,7 @@ BOOL Node::saveToDatabase(DB_HANDLE hdb)
    if (!saveCommonProperties(hdb))
    {
       unlockProperties();
-      return FALSE;
+      return false;
    }
 
    // Form and execute INSERT or UPDATE query
@@ -523,7 +523,7 @@ BOOL Node::saveToDatabase(DB_HANDLE hdb)
    if (hStmt == NULL)
    {
       unlockProperties();
-      return FALSE;
+      return false;
    }
 
    TCHAR ipAddr[64], baseAddress[16], cacheMode[16], compressionMode[16];
@@ -591,7 +591,7 @@ BOOL Node::saveToDatabase(DB_HANDLE hdb)
    DBBind(hStmt, 52, DB_SQLTYPE_INTEGER, (LONG)m_failTimeAgent);
    DBBind(hStmt, 53, DB_SQLTYPE_INTEGER, m_id);
 
-   BOOL bResult = DBExecute(hStmt);
+   bool bResult = DBExecute(hStmt);
    DBFreeStatement(hStmt);
 
    // Save access list
@@ -616,6 +616,32 @@ BOOL Node::saveToDatabase(DB_HANDLE hdb)
    return bResult;
 }
 
+/**
+ * Save runtime data to database. Called only on server shutdown to save
+ * less important but frequently changing runtime data when it is not feasible
+ * to mark object as modified on each change of such data.
+ */
+bool Node::saveRuntimeData(DB_HANDLE hdb)
+{
+   if (!DataCollectionTarget::saveRuntimeData(hdb))
+      return false;
+
+   DB_STATEMENT hStmt = DBPrepare(hdb, _T("UPDATE nodes SET last_agent_comm_time=?,syslog_msg_count=?,snmp_trap_count=? WHERE id=?"));
+   if (hStmt == NULL)
+      return false;
+
+   lockProperties();
+   DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, (INT32)m_lastAgentCommTime);
+   DBBind(hStmt, 2, DB_SQLTYPE_BIGINT, m_syslogMessageCount);
+   DBBind(hStmt, 3, DB_SQLTYPE_BIGINT, m_snmpTrapCount);
+   DBBind(hStmt, 4, DB_SQLTYPE_INTEGER, m_id);
+   unlockProperties();
+
+   bool success = DBExecute(hStmt);
+   DBFreeStatement(hStmt);
+   return success;
+}
+
 /**
  * Delete object from database
  */
@@ -7758,7 +7784,6 @@ void Node::incSyslogMessageCount()
 {
    lockProperties();
    m_syslogMessageCount++;
-   setModified(false);
    unlockProperties();
 }
 
@@ -7769,7 +7794,6 @@ void Node::incSnmpTrapCount()
 {
    lockProperties();
    m_snmpTrapCount++;
-   setModified(false);
    unlockProperties();
 }
 
index 70d0eb3..36acb0f 100644 (file)
@@ -99,7 +99,7 @@ bool NodeLink::loadFromDatabase(DB_HANDLE hdb, UINT32 id)
 /**
  * Save nodelink to database
  */
-BOOL NodeLink::saveToDatabase(DB_HANDLE hdb)
+bool NodeLink::saveToDatabase(DB_HANDLE hdb)
 {
        BOOL bNewObject = TRUE;
 
@@ -107,7 +107,7 @@ BOOL NodeLink::saveToDatabase(DB_HANDLE hdb)
        if (hStmt == NULL)
        {
                DbgPrintf(4, _T("Cannot prepare select from node_links"));
-               return FALSE;
+               return false;
        }
 
        lockProperties();
@@ -126,7 +126,7 @@ BOOL NodeLink::saveToDatabase(DB_HANDLE hdb)
        if (hStmt == NULL)
        {
                unlockProperties();
-               return FALSE;
+               return false;
        }
        DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, m_nodeId);
        DBBind(hStmt, 2, DB_SQLTYPE_INTEGER, m_id);
@@ -134,7 +134,7 @@ BOOL NodeLink::saveToDatabase(DB_HANDLE hdb)
        if (!DBExecute(hStmt))
        {
                DBFreeStatement(hStmt);
-               return FALSE;
+               return false;
        }
        DBFreeStatement(hStmt);
 
index b92ceb1..cff7ac5 100644 (file)
@@ -80,10 +80,10 @@ bool Rack::loadFromDatabase(DB_HANDLE hdb, UINT32 id)
 /**
  * Save object to database
  */
-BOOL Rack::saveToDatabase(DB_HANDLE hdb)
+bool Rack::saveToDatabase(DB_HANDLE hdb)
 {
        if (!Container::saveToDatabase(hdb))
-               return FALSE;
+               return false;
 
        DB_STATEMENT hStmt;
        if (IsDatabaseRecordExist(hdb, _T("racks"), _T("id"), m_id))
@@ -95,7 +95,7 @@ BOOL Rack::saveToDatabase(DB_HANDLE hdb)
                hStmt = DBPrepare(hdb, _T("INSERT INTO racks (height,top_bottom_num,id) VALUES (?,?,?)"));
        }
        if (hStmt == NULL)
-               return FALSE;
+               return false;
 
        DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, (LONG)m_height);
        DBBind(hStmt, 2, DB_SQLTYPE_VARCHAR, m_topBottomNumbering ? _T("1") : _T("0"), DB_BIND_STATIC);
index a092093..ed7bbb4 100644 (file)
@@ -259,11 +259,11 @@ bool Sensor::loadFromDatabase(DB_HANDLE hdb, UINT32 id)
 /**
  * Save to database Sensor class
  */
-BOOL Sensor::saveToDatabase(DB_HANDLE hdb)
+bool Sensor::saveToDatabase(DB_HANDLE hdb)
 {
    lockProperties();
 
-   BOOL success = saveCommonProperties(hdb);
+   bool success = saveCommonProperties(hdb);
 
    if(success)
    {
@@ -300,7 +300,7 @@ BOOL Sensor::saveToDatabase(DB_HANDLE hdb)
       }
       else
       {
-         success = FALSE;
+         success = false;
       }
        }
 
@@ -314,7 +314,7 @@ BOOL Sensor::saveToDatabase(DB_HANDLE hdb)
    }
 
    // Save access list
-   if(success)
+   if (success)
       saveACLToDB(hdb);
 
    // Clear modifications flag and unlock object
index d3cc303..01b389b 100644 (file)
@@ -209,7 +209,7 @@ bool SlmCheck::loadFromDatabase(DB_HANDLE hdb, UINT32 id)
 /**
  * Save service check to database
  */
-BOOL SlmCheck::saveToDatabase(DB_HANDLE hdb)
+bool SlmCheck::saveToDatabase(DB_HANDLE hdb)
 {
        bool ret = false;
 
index dec1aac..bd3b2f2 100644 (file)
@@ -89,7 +89,7 @@ bool Subnet::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
 /**
  * Save subnet object to database
  */
-BOOL Subnet::saveToDatabase(DB_HANDLE hdb)
+bool Subnet::saveToDatabase(DB_HANDLE hdb)
 {
    TCHAR szQuery[1024], szIpAddr[64];
 
@@ -127,7 +127,7 @@ BOOL Subnet::saveToDatabase(DB_HANDLE hdb)
    m_isModified = false;
    unlockProperties();
 
-   return TRUE;
+   return true;
 }
 
 /**
index fc80ccc..9e41d6c 100644 (file)
@@ -75,7 +75,7 @@ bool ServiceContainer::loadFromDatabase(DB_HANDLE hdb, UINT32 id)
 /**
  * Save object to database
  */
-BOOL ServiceContainer::saveToDatabase(DB_HANDLE hdb)
+bool ServiceContainer::saveToDatabase(DB_HANDLE hdb)
 {
        return Container::saveToDatabase(hdb);
 }
index 930a68d..32adfb7 100644 (file)
@@ -53,7 +53,7 @@ void NXCORE_EXPORTABLE ObjectTransactionEnd()
 /**
  * Save objects to database
  */
-void SaveObjects(DB_HANDLE hdb, UINT32 watchdogId)
+void SaveObjects(DB_HANDLE hdb, UINT32 watchdogId, bool saveRuntimeData)
 {
    if (g_flags & AF_ENABLE_OBJECT_TRANSACTIONS)
       RWLockWriteLock(s_objectTxnLock, INFINITE);
@@ -101,6 +101,10 @@ void SaveObjects(DB_HANDLE hdb, UINT32 watchdogId)
                                DBRollback(hdb);
                        }
                }
+               else if (saveRuntimeData)
+               {
+         object->saveRuntimeData(hdb);
+               }
    }
 
    if (g_flags & AF_ENABLE_OBJECT_TRANSACTIONS)
@@ -129,7 +133,7 @@ THREAD_RESULT THREAD_CALL Syncer(void *arg)
       if (!(g_flags & AF_DB_CONNECTION_LOST))    // Don't try to save if DB connection is lost
       {
          DB_HANDLE hdb = DBConnectionPoolAcquireConnection();
-         SaveObjects(hdb, watchdogId);
+         SaveObjects(hdb, watchdogId, false);
          SaveUsers(hdb, watchdogId);
          UpdatePStorageDatabase(hdb, watchdogId);
          DBConnectionPoolReleaseConnection(hdb);
index 86c3249..501ec4d 100644 (file)
@@ -266,7 +266,7 @@ bool Template::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
 /**
  * Save object to database
  */
-BOOL Template::saveToDatabase(DB_HANDLE hdb)
+bool Template::saveToDatabase(DB_HANDLE hdb)
 {
    lockProperties();
 
index 6f64d04..53aeee3 100644 (file)
@@ -72,7 +72,7 @@ void UniversalRoot::linkObjects()
 /**
  * Save object to database
  */
-BOOL UniversalRoot::saveToDatabase(DB_HANDLE hdb)
+bool UniversalRoot::saveToDatabase(DB_HANDLE hdb)
 {
    TCHAR szQuery[1024];
 
@@ -97,7 +97,7 @@ BOOL UniversalRoot::saveToDatabase(DB_HANDLE hdb)
    // Unlock object and clear modification flag
    unlockProperties();
    m_isModified = false;
-   return TRUE;
+   return true;
 }
 
 /**
index e676cac..8d9d7dc 100644 (file)
@@ -128,7 +128,7 @@ bool VPNConnector::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
 /**
  * Save VPN connector object to database
  */
-BOOL VPNConnector::saveToDatabase(DB_HANDLE hdb)
+bool VPNConnector::saveToDatabase(DB_HANDLE hdb)
 {
    // Lock object's access
    lockProperties();
@@ -179,7 +179,7 @@ BOOL VPNConnector::saveToDatabase(DB_HANDLE hdb)
    m_isModified = false;
    unlockProperties();
 
-   return TRUE;
+   return true;
 }
 
 /**
index 5f422a1..a12e2ea 100644 (file)
@@ -110,7 +110,7 @@ bool Zone::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
 /**
  * Save object to database
  */
-BOOL Zone::saveToDatabase(DB_HANDLE hdb)
+bool Zone::saveToDatabase(DB_HANDLE hdb)
 {
    lockProperties();
 
index d035707..405db80 100644 (file)
@@ -1026,7 +1026,7 @@ void ConsolePrintf(CONSOLE_CTX pCtx, const TCHAR *pszFormat, ...)
 void ConsoleWrite(CONSOLE_CTX pCtx, const TCHAR *text);
 int ProcessConsoleCommand(const TCHAR *pszCmdLine, CONSOLE_CTX pCtx);
 
-void SaveObjects(DB_HANDLE hdb, UINT32 watchdogId);
+void SaveObjects(DB_HANDLE hdb, UINT32 watchdogId, bool saveRuntimeData);
 void NXCORE_EXPORTABLE ObjectTransactionStart();
 void NXCORE_EXPORTABLE ObjectTransactionEnd();
 
index 94f1e42..e8ee94c 100644 (file)
@@ -604,7 +604,8 @@ public:
    void unhide();
    void markAsModified() { lockProperties(); setModified(); unlockProperties(); }  // external API to mark object as modified
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveRuntimeData(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
    virtual void linkObjects();
@@ -753,7 +754,7 @@ public:
 
    virtual int getObjectClass() const { return OBJECT_TEMPLATE; }
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -860,7 +861,7 @@ public:
    virtual ~Interface();
 
    virtual int getObjectClass() const { return OBJECT_INTERFACE; }
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -975,7 +976,7 @@ public:
 
    virtual json_t *toJson();
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -1008,7 +1009,7 @@ public:
 
    virtual json_t *toJson();
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -1253,7 +1254,7 @@ public:
    virtual int getObjectClass() const { return OBJECT_MOBILEDEVICE; }
 
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
 
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
@@ -1311,7 +1312,7 @@ public:
    virtual int getObjectClass() const { return OBJECT_ACCESSPOINT; }
 
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
 
    virtual json_t *toJson();
@@ -1363,7 +1364,7 @@ public:
        virtual ~Cluster();
 
    virtual int getObjectClass() const { return OBJECT_CLUSTER; }
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
    virtual bool showThresholdSummary();
@@ -1418,7 +1419,7 @@ public:
    virtual ~Chassis();
 
    virtual int getObjectClass() const { return OBJECT_CHASSIS; }
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
    virtual void linkObjects();
@@ -1519,7 +1520,7 @@ public:
    void setProvisoned() { m_state |= SSF_PROVISIONED; }
 
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
 
    virtual NXSL_Value *createNXSLObject();
@@ -1755,7 +1756,7 @@ protected:
    void updatePhysicalContainerBinding(int containerClass, UINT32 containerId);
 
    bool connectToAgent(UINT32 *error = NULL, UINT32 *socketError = NULL, bool *newConnection = NULL, bool forceConnect = false);
-   void setLastAgentCommTime() { time_t now = time(NULL); if (m_lastAgentCommTime < now - 60) { m_lastAgentCommTime = now; setModified(); } }
+   void setLastAgentCommTime() { m_lastAgentCommTime = time(NULL); }
 
        void buildIPTopologyInternal(NetworkMapObjectList &topology, int nDepth, UINT32 seedObject, bool vpnLink, bool includeEndNodes);
 
@@ -1779,7 +1780,8 @@ public:
 
    virtual int getObjectClass() const { return OBJECT_NODE; }
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveRuntimeData(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2100,7 +2102,7 @@ public:
 
    virtual int getObjectClass() const { return OBJECT_SUBNET; }
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2132,7 +2134,7 @@ public:
    UniversalRoot();
    virtual ~UniversalRoot();
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    void loadFromDatabase(DB_HANDLE hdb);
    virtual void linkObjects();
    void linkObject(NetObj *pObject) { addChild(pObject); pObject->addParent(this); }
@@ -2190,7 +2192,7 @@ public:
 
    virtual int getObjectClass() const { return OBJECT_CONTAINER; }
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
    virtual void linkObjects();
@@ -2249,7 +2251,7 @@ public:
 
    virtual int getObjectClass() const { return OBJECT_RACK; }
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2278,7 +2280,7 @@ public:
 
    virtual int getObjectClass() const { return OBJECT_ZONE; }
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2327,7 +2329,7 @@ public:
    virtual ~Network();
 
    virtual int getObjectClass() const { return OBJECT_NETWORK; }
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
 
        virtual bool showThresholdSummary();
 
@@ -2365,7 +2367,7 @@ public:
 
    virtual int getObjectClass() const { return OBJECT_CONDITION; }
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2405,7 +2407,7 @@ public:
 
    virtual int getObjectClass() const { return OBJECT_AGENTPOLICY; }
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2436,7 +2438,7 @@ public:
 
    virtual int getObjectClass() const { return OBJECT_AGENTPOLICY_CONFIG; }
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2463,7 +2465,7 @@ class NXCORE_EXPORTABLE AgentPolicyLogParser : public AgentPolicy
 
    virtual int getObjectClass() const { return OBJECT_AGENTPOLICY_LOGPARSER; }
 
-   virtual BOOL saveToDatabase(DB_HANDLE hdb);
+   virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2572,7 +2574,7 @@ public:
    virtual int getObjectClass() const { return OBJECT_NETWORKMAP; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 
-       virtual BOOL saveToDatabase(DB_HANDLE hdb);
+       virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2645,7 +2647,7 @@ public:
    virtual int getObjectClass() const { return OBJECT_DASHBOARD; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 
-       virtual BOOL saveToDatabase(DB_HANDLE hdb);
+       virtual bool saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2710,7 +2712,7 @@ public:
 
        virtual int getObjectClass() const { return OBJECT_SLMCHECK; }
 
-       virtual BOOL saveToDatabase(DB_HANDLE hdb);
+       virtual bool saveToDatabase(DB_HANDLE hdb);
        virtual bool deleteFromDatabase(DB_HANDLE hdb);
        virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
@@ -2761,7 +2763,7 @@ public:
        ServiceContainer(const TCHAR *pszName);
 
        virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
-       virtual BOOL saveToDatabase(DB_HANDLE hdb);
+       virtual bool saveToDatabase(DB_HANDLE hdb);
        virtual bool deleteFromDatabase(DB_HANDLE hdb);
 
        virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
@@ -2786,7 +2788,7 @@ public:
 
        virtual int getObjectClass() const { return OBJECT_BUSINESSSERVICEROOT; }
 
-       virtual BOOL saveToDatabase(DB_HANDLE hdb);
+       virtual bool saveToDatabase(DB_HANDLE hdb);
    void loadFromDatabase(DB_HANDLE hdb);
 
    virtual void linkObjects();
@@ -2818,7 +2820,7 @@ public:
        virtual int getObjectClass() const { return OBJECT_BUSINESSSERVICE; }
 
        virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
-       virtual BOOL saveToDatabase(DB_HANDLE hdb);
+       virtual bool saveToDatabase(DB_HANDLE hdb);
        virtual bool deleteFromDatabase(DB_HANDLE hdb);
 
        bool isReadyForPolling();
@@ -2851,7 +2853,7 @@ public:
 
        virtual int getObjectClass() const { return OBJECT_NODELINK; }
 
-       virtual BOOL saveToDatabase(DB_HANDLE hdb);
+       virtual bool saveToDatabase(DB_HANDLE hdb);
        virtual bool deleteFromDatabase(DB_HANDLE hdb);
        virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);