implemented agent parameter Agent.IsExternalSubagentConnected
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 1 Aug 2017 09:18:24 +0000 (12:18 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 1 Aug 2017 09:18:24 +0000 (12:18 +0300)
include/nms_agent.h
src/agent/core/extagent.cpp
src/agent/core/getparam.cpp

index 30a8b8e..c210cd7 100644 (file)
 #define DCIDESC_AGENT_DATACOLLQUEUESIZE           _T("Agent data collector queue size")
 #define DCIDESC_AGENT_FAILEDREQUESTS              _T("Number of failed requests to agent")
 #define DCIDESC_AGENT_GENERATED_TRAPS             _T("Number of traps generated by agent")
-#define DCIDESC_AGENT_IS_SUBAGENT_LOADED          _T("Check if given subagent is loaded")
+#define DCIDESC_AGENT_IS_EXT_SUBAGENT_CONNECTED   _T("Check if external subagent {instance} is connected")
+#define DCIDESC_AGENT_IS_SUBAGENT_LOADED          _T("Check if subagent {instance} is loaded")
 #define DCIDESC_AGENT_LAST_TRAP_TIME              _T("Timestamp of last generated trap")
 #define DCIDESC_AGENT_LOCALDB_FAILED_QUERIES      _T("Agent local database: failed queries")
 #define DCIDESC_AGENT_LOCALDB_SLOW_QUERIES        _T("Agent local database: long running queries")
index 6660f6f..2a64397 100644 (file)
@@ -22,7 +22,6 @@
 
 #include "nxagentd.h"
 
-
 /**
  *Static data
  */
@@ -873,3 +872,25 @@ void RestartExtSubagents()
       }
    }
 }
+
+/**
+ * Handler for Agent.IsExternalSubagentConnected
+ */
+LONG H_IsExtSubagentConnected(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session)
+{
+   TCHAR name[256];
+   if (!AgentGetParameterArg(cmd, 1, name, 256))
+      return SYSINFO_RC_UNSUPPORTED;
+   LONG rc = SYSINFO_RC_NO_SUCH_INSTANCE;
+   for(int i = 0; i < s_subagents.size(); i++)
+   {
+      if (!_tcsicmp(s_subagents.get(i)->getName(), name))
+      {
+_tprintf(_T(">>> subagent %s connected %d\n"), s_subagents.get(i)->getName(), s_subagents.get(i)->isConnected());
+         ret_int(value, s_subagents.get(i)->isConnected() ? 1 : 0);
+         rc = SYSINFO_RC_SUCCESS;
+         break;
+      }
+   }
+   return rc;
+}
index 1857cb5..768e72d 100644 (file)
@@ -43,6 +43,7 @@ LONG H_ExternalParameter(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, Abstr
 LONG H_ExternalList(const TCHAR *cmd, const TCHAR *arg, StringList *value, AbstractCommSession *session);
 LONG H_ExternalTable(const TCHAR *cmd, const TCHAR *arg, Table *value, AbstractCommSession *session);
 LONG H_FileTime(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
+LONG H_IsExtSubagentConnected(const TCHAR *pszCmd, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session);
 LONG H_IsSubagentLoaded(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
 LONG H_MD5Hash(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
 LONG H_PlatformName(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
@@ -332,6 +333,7 @@ static NETXMS_SUBAGENT_PARAM m_stdParams[] =
    { _T("Agent.FailedRequests"), H_UIntPtr, (TCHAR *)&m_dwFailedRequests, DCI_DT_UINT, DCIDESC_AGENT_FAILEDREQUESTS },
    { _T("Agent.GeneratedTraps"), H_AgentTraps, _T("G"), DCI_DT_UINT64, DCIDESC_AGENT_GENERATED_TRAPS },
    { _T("Agent.IsSubagentLoaded(*)"), H_IsSubagentLoaded, NULL, DCI_DT_INT, DCIDESC_AGENT_IS_SUBAGENT_LOADED },
+   { _T("Agent.IsExternalSubagentConnected(*)"), H_IsExtSubagentConnected, NULL, DCI_DT_INT, DCIDESC_AGENT_IS_EXT_SUBAGENT_CONNECTED },
    { _T("Agent.LastTrapTime"), H_AgentTraps, _T("T"), DCI_DT_UINT64, DCIDESC_AGENT_LAST_TRAP_TIME },
    { _T("Agent.LocalDatabase.FailedQueries"), H_LocalDatabaseCounters, _T("F"), DCI_DT_UINT64, DCIDESC_AGENT_LOCALDB_FAILED_QUERIES },
    { _T("Agent.LocalDatabase.LongRunningQueries"), H_LocalDatabaseCounters, _T("L"), DCI_DT_UINT64, DCIDESC_AGENT_LOCALDB_SLOW_QUERIES },