Added option to set time period in seconds within which received offline data still...
authorZev <zev@radensolutions.com>
Wed, 23 Mar 2016 14:10:35 +0000 (16:10 +0200)
committerZev <zev@radensolutions.com>
Wed, 23 Mar 2016 14:10:35 +0000 (16:10 +0200)
include/netxmsdb.h
sql/setup.in
src/server/core/dcitem.cpp
src/server/core/dctable.cpp
src/server/core/main.cpp
src/server/include/nms_core.h
src/server/tools/nxdbmgr/upgrade.cpp

index 830665b..a15a9ba 100644 (file)
@@ -23,6 +23,6 @@
 #ifndef _netxmsdb_h
 #define _netxmsdb_h
 
-#define DB_FORMAT_VERSION   393
+#define DB_FORMAT_VERSION   394
 
 #endif
index b4409db..28bb99c 100644 (file)
@@ -110,6 +110,7 @@ INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('MobileDeviceListenerPort','4747',1,1);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('NumberOfDataCollectors','25',1,1);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('NumberOfUpgradeThreads','10',1,0);
+INSERT INTO config (var_name,var_value,is_visible,need_server_restart,data_type,description) VALUES ('OffileDataRelevanceTime','86400',1,0,'I','Time period in seconds within which received offline data still relevant for threshold validation');
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('PasswordComplexity','0',1,0);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('PasswordExpiration','0',1,0);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('PasswordHistoryLength','0',1,0);
index f9e9497..556e947 100644 (file)
@@ -744,7 +744,7 @@ bool DCItem::processNewValue(time_t tmTimeStamp, const void *originalValue, bool
       PerfDataStorageRequest(this, tmTimeStamp, pValue->getString());
 
    // Check thresholds and add value to cache
-   if (m_bCacheLoaded && (tmTimeStamp >= m_tPrevValueTimeStamp))
+   if (m_bCacheLoaded && (tmTimeStamp >= m_tPrevValueTimeStamp) && (g_offileDataRelevanceTime <= 0 || tmTimeStamp > (time(NULL) - g_offileDataRelevanceTime)))
    {
       checkThresholds(*pValue);
    }
index b3e430a..18d0f35 100644 (file)
@@ -432,7 +432,8 @@ bool DCTable::processNewValue(time_t timestamp, const void *value, bool *updateS
 
           DBConnectionPoolReleaseConnection(hdb);
    }
-   checkThresholds((Table *)value);
+   if(g_offileDataRelevanceTime <= 0 || timestamp > (time(NULL) - g_offileDataRelevanceTime))
+      checkThresholds((Table *)value);
 
    if (g_flags & AF_PERFDATA_STORAGE_DRIVER_LOADED)
       PerfDataStorageRequest(this, timestamp, (Table *)value);
index fecaae6..67f17fe 100644 (file)
@@ -154,6 +154,7 @@ UINT32 g_icmpPingSize;
 UINT32 g_icmpPingTimeout = 1500;    // ICMP ping timeout (milliseconds)
 UINT32 g_auditFlags;
 UINT32 g_slmPollingInterval;
+UINT32 g_offileDataRelevanceTime;
 TCHAR NXCORE_EXPORTABLE g_netxmsdDataDir[MAX_PATH] = _T("");
 TCHAR NXCORE_EXPORTABLE g_netxmsdLibDir[MAX_PATH] = _T("");
 int g_dbSyntax = DB_SYNTAX_UNKNOWN;
@@ -343,6 +344,7 @@ static void LoadGlobalConfig()
        g_agentCommandTimeout = ConfigReadInt(_T("AgentCommandTimeout"), 4000);
        g_thresholdRepeatInterval = ConfigReadInt(_T("ThresholdRepeatInterval"), 0);
        g_requiredPolls = ConfigReadInt(_T("PollCountForStatusChange"), 1);
+       g_offileDataRelevanceTime = ConfigReadInt(_T("OffileDataRelevanceTime"), 86400);
 
        UINT32 snmpTimeout = ConfigReadInt(_T("SNMPRequestTimeout"), 1500);
    SnmpSetDefaultTimeout(snmpTimeout);
index c2bba4a..6713cf1 100644 (file)
@@ -1127,6 +1127,7 @@ extern UINT32 g_agentCommandTimeout;
 extern UINT32 g_thresholdRepeatInterval;
 extern int g_requiredPolls;
 extern UINT32 g_slmPollingInterval;
+extern UINT32 g_offileDataRelevanceTime;
 
 extern TCHAR g_szDbDriver[];
 extern TCHAR g_szDbDrvParams[];
index e27271c..729edd5 100644 (file)
@@ -641,6 +641,16 @@ static int NextFreeEPPruleID()
        return ruleId;
 }
 
+/**
+ * Upgrade from V393 to V394
+ */
+static BOOL H_UpgradeFromV393(int currVersion, int newVersion)
+{
+   CHK_EXEC(CreateConfigParam(_T("OffileDataRelevanceTime"), _T("86400"), _T("Time period in seconds within which received offline data still relevant for threshold validation"), 'I', true, false, false, false));
+   CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='394' WHERE var_name='SchemaVersion'")));
+   return TRUE;
+}
+
 /**
  * Upgrade from V392 to V393
  */
@@ -9460,6 +9470,7 @@ static struct
    { 390, 391, H_UpgradeFromV390 },
    { 391, 392, H_UpgradeFromV391 },
    { 392, 393, H_UpgradeFromV392 },
+   { 393, 394, H_UpgradeFromV393 },
    { 0, 0, NULL }
 };