added hook to save runtime data in module data
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 26 Sep 2017 19:33:33 +0000 (22:33 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 26 Sep 2017 19:33:33 +0000 (22:33 +0300)
src/server/core/modules.cpp
src/server/core/netobj.cpp
src/server/include/nxmodule.h

index b213fdc..1bf0bce 100644 (file)
@@ -191,6 +191,14 @@ bool ModuleData::saveToDatabase(DB_HANDLE hdb, UINT32 objectId)
 }
 
 /**
+ * Save runtime data to database (called only on server shutdown).
+ */
+bool ModuleData::saveRuntimeData(DB_HANDLE hdb, UINT32 objectId)
+{
+   return true;
+}
+
+/**
  * Delete module data from database.
  */
 bool ModuleData::deleteFromDatabase(DB_HANDLE hdb, UINT32 objectId)
index db8d60a..47c3ab1 100644 (file)
@@ -152,16 +152,6 @@ bool NetObj::saveToDatabase(DB_HANDLE hdb)
 }
 
 /**
- * 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
-}
-
-/**
  * Parameters for DeleteModuleDataCallback and SaveModuleDataCallback
  */
 struct ModuleDataDatabaseCallbackParams
@@ -173,6 +163,35 @@ struct ModuleDataDatabaseCallbackParams
 /**
  * Callback for deleting module data from database
  */
+static EnumerationCallbackResult SaveModuleRuntimeDataCallback(const TCHAR *key, const void *value, void *data)
+{
+   return ((ModuleData *)value)->saveRuntimeData(((ModuleDataDatabaseCallbackParams *)data)->hdb, ((ModuleDataDatabaseCallbackParams *)data)->id) ? _CONTINUE : _STOP;
+}
+
+/**
+ * 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)
+{
+   bool success = true;
+
+   // Delete module data
+   if (m_moduleData != NULL)
+   {
+      ModuleDataDatabaseCallbackParams data;
+      data.id = m_id;
+      data.hdb = hdb;
+      success = (m_moduleData->forEach(SaveModuleRuntimeDataCallback, &data) == _CONTINUE);
+   }
+
+   return success;
+}
+
+/**
+ * Callback for deleting module data from database
+ */
 static EnumerationCallbackResult DeleteModuleDataCallback(const TCHAR *key, const void *value, void *data)
 {
    return ((ModuleData *)value)->deleteFromDatabase(((ModuleDataDatabaseCallbackParams *)data)->hdb, ((ModuleDataDatabaseCallbackParams *)data)->id) ? _CONTINUE : _STOP;
index 5f4f7ca..6062014 100644 (file)
@@ -58,6 +58,7 @@ public:
 
    virtual void fillMessage(NXCPMessage *msg, UINT32 baseId);
    virtual bool saveToDatabase(DB_HANDLE hdb, UINT32 objectId);
+   virtual bool saveRuntimeData(DB_HANDLE hdb, UINT32 objectId);
    virtual bool deleteFromDatabase(DB_HANDLE hdb, UINT32 objectId);
 };