Port check subagent can be configured to return negative value as response time in...
authorVictor Kirhenshtein <victor@netxms.org>
Mon, 21 Mar 2016 16:31:45 +0000 (18:31 +0200)
committerVictor Kirhenshtein <victor@netxms.org>
Mon, 21 Mar 2016 16:31:45 +0000 (18:31 +0200)
ChangeLog
src/agent/subagents/portCheck/custom.cpp
src/agent/subagents/portCheck/http.cpp
src/agent/subagents/portCheck/main.cpp
src/agent/subagents/portCheck/main.h
src/agent/subagents/portCheck/pop3.cpp
src/agent/subagents/portCheck/smtp.cpp
src/agent/subagents/portCheck/ssh.cpp
src/agent/subagents/portCheck/telnet.cpp
src/server/core/node.cpp
tests/test-libnxcc/test-libnxcc.cpp

index afa0b60..3039ebe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -16,6 +16,7 @@
 - Agent parameters for monitoring System V message queues
 - New action User.ChangePassword in WINNT subagent
 - Text2reach SMS driver improved
+- Port check subagent can be configured to return negative value as response time in case of error
 - Management console:
        - Fixed grid issues in network maps
        - Fixed object selection issues in network maps
index d180ba1..d45e9dd 100644 (file)
@@ -40,6 +40,8 @@ LONG H_CheckCustom(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractC
    {
       if (result == PC_ERR_NONE)
          ret_int64(value, GetCurrentTimeMs() - start);
+      else if (g_serviceCheckFlags & SCF_NEGATIVE_TIME_ON_ERROR)
+         ret_int(value, -result);
       else
          nRet = SYSINFO_RC_ERROR;
    }
index d8d9aaa..f5f2b2a 100644 (file)
@@ -75,6 +75,8 @@ LONG H_CheckHTTP(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractCom
    {
       if (result == PC_ERR_NONE)
          ret_int64(value, GetCurrentTimeMs() - start);
+      else if (g_serviceCheckFlags & SCF_NEGATIVE_TIME_ON_ERROR)
+         ret_int(value, -result);
       else
          nRet = SYSINFO_RC_ERROR;
    }
index a7c72fd..a8879a0 100644 (file)
 #include "main.h"
 #include "net.h"
 
-
-//
-// Global variables
-//
-
+/**
+ * Global variables
+ */
 char g_szDomainName[128] = "netxms.org";
 char g_szFailedDir[1024] = "";
+UINT32 g_serviceCheckFlags = 0;
 
 /**
  * Command handler
@@ -156,8 +155,9 @@ UINT32 m_dwDefaultTimeout = 3000;
 static NX_CFG_TEMPLATE m_cfgTemplate[] =
 {
        { _T("DomainName"), CT_MB_STRING, 0, 0, 128, 0, g_szDomainName },
-       { _T("Timeout"), CT_LONG, 0, 0, 0, 0, &m_dwDefaultTimeout },
        { _T("FailedDirectory"), CT_MB_STRING, 0, 0, 1024, 0, &g_szFailedDir },
+   { _T("NegativeResponseTimeOnError"), CT_BOOLEAN, 0, 0, SCF_NEGATIVE_TIME_ON_ERROR, 0, &g_serviceCheckFlags },
+   { _T("Timeout"), CT_LONG, 0, 0, 0, 0, &m_dwDefaultTimeout },
        { _T(""), CT_END_OF_LIST, 0, 0, 0, 0, NULL }
 };
 
index 89340e1..fe2f275 100644 (file)
@@ -5,6 +5,9 @@
 #include <openssl/ssl.h>
 #endif
 
+/**
+ * Service check return codes
+ */
 enum
 {
        PC_ERR_NONE,
@@ -14,6 +17,11 @@ enum
        PC_ERR_INTERNAL
 };
 
+/**
+ * Flags
+ */
+#define SCF_NEGATIVE_TIME_ON_ERROR  0x0001
+
 LONG H_CheckPOP3(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 int CheckPOP3(char *, UINT32, short, char *, char *, UINT32);
 LONG H_CheckSSH(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
@@ -30,5 +38,6 @@ int CheckTelnet(char *, UINT32, short, char *, char *, UINT32);
 
 extern char g_szDomainName[];
 extern char g_szFailedDir[];
+extern UINT32 g_serviceCheckFlags;
 
 #endif // __MAIN__H__
index fcc4c74..b8707ae 100644 (file)
@@ -34,6 +34,8 @@ LONG H_CheckPOP3(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractCom
    {
       if (result == PC_ERR_NONE)
          ret_int64(value, GetCurrentTimeMs() - start);
+      else if (g_serviceCheckFlags & SCF_NEGATIVE_TIME_ON_ERROR)
+         ret_int(value, -result);
       else
          nRet = SYSINFO_RC_ERROR;
    }
index 869e4e8..3e17f26 100644 (file)
@@ -30,6 +30,8 @@ LONG H_CheckSMTP(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractCom
    {
       if (result == PC_ERR_NONE)
          ret_int64(value, GetCurrentTimeMs() - start);
+      else if (g_serviceCheckFlags & SCF_NEGATIVE_TIME_ON_ERROR)
+         ret_int(value, -result);
       else
          nRet = SYSINFO_RC_ERROR;
    }
index f8cab8c..e993983 100644 (file)
@@ -40,6 +40,8 @@ LONG H_CheckSSH(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractComm
    {
       if (result == PC_ERR_NONE)
          ret_int64(value, GetCurrentTimeMs() - start);
+      else if (g_serviceCheckFlags & SCF_NEGATIVE_TIME_ON_ERROR)
+         ret_int(value, -result);
       else
          nRet = SYSINFO_RC_ERROR;
    }
index c92e7c6..77edc4d 100644 (file)
@@ -38,6 +38,8 @@ LONG H_CheckTelnet(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractC
    {
       if (result == PC_ERR_NONE)
          ret_int64(value, GetCurrentTimeMs() - start);
+      else if (g_serviceCheckFlags & SCF_NEGATIVE_TIME_ON_ERROR)
+         ret_int(value, -result);
       else
          nRet = SYSINFO_RC_ERROR;
    }
index 7612304..716d594 100644 (file)
@@ -6496,8 +6496,8 @@ void Node::checkSubnetBinding()
                if ((addr.getHostBits() < 2) && (getParentCount() > 1))
                {
                   /* Delete subnet object if we try to change it's netmask to 255.255.255.255 or 255.255.255.254 and
-                   node has more than one parent. hasIfaceForPrimaryIp paramteter should prevent us from going in
-                   loop(creating and deleting all the time subnet). */
+                   node has more than one parent. hasIfaceForPrimaryIp parameter should prevent us from going in
+                   loop (creating and deleting all the time subnet). */
                   pSubnet->deleteObject();
                   pSubnet = NULL;   // prevent binding to deleted subnet
                }
index 5d439c2..b61764d 100644 (file)
@@ -6,11 +6,10 @@
 static MUTEX cbLock = MutexCreate();
 static UINT32 s_nodeId;
 
-static void DebugCallback(int level, const TCHAR *format, va_list args)
+static void DebugCallback(const TCHAR *message)
 {
    MutexLock(cbLock);
-   _vtprintf(format, args);
-   _tprintf(_T("\n"));
+   _tprintf(_T("%s\n"), message);
    MutexUnlock(cbLock);
 }
 
@@ -84,7 +83,7 @@ int main(int argc, char *argv[])
    config->setValue(_T("/CLUSTER/NodeId"), s_nodeId);
    config->setValue(_T("/CLUSTER/PeerNode"), (s_nodeId == 1) ? _T("2:127.0.0.1") : _T("1:127.0.0.1"));
 
-   ClusterSetDebugCallback(DebugCallback);
+   nxlog_set_debug_writer(DebugCallback);
    AssertTrue(ClusterInit(config, _T("CLUSTER"), new EventHandler()));
 
    AssertTrue(ClusterJoin());