Added internal parameter AgentStatus
authorVictor Kirhenshtein <victor@netxms.org>
Fri, 11 Mar 2005 14:10:32 +0000 (14:10 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Fri, 11 Mar 2005 14:10:32 +0000 (14:10 +0000)
ChangeLog
src/console/win32/InternalItemSelDlg.cpp
src/server/core/node.cpp
src/server/include/nms_objects.h

index 36030bb..e538c00 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,7 +9,7 @@
 - Fixed issue #0000017 (server crash after DCI copy)
 - Fixed memory leaks in DCI cache management
 - Added interface for processing SNMP traps by server modules
-- Added internal parameter ChildStatus(*)
+- Added internal parameters AgentStatus and ChildStatus(*)
 
 
 *
index f735a8e..5d23552 100644 (file)
@@ -25,6 +25,7 @@ static struct __item_info
    TCHAR *pszDescription;
 } m_itemList[] =
 {
+   { NF_IS_NATIVE_AGENT, DCI_DT_INT, _T("AgentStatus"), _T("Status of NetXMS agent") },
    { 0, DCI_DT_INT, _T("ChildStatus(*)"), _T("Status of child object {instance}") },
    { NF_IS_LOCAL_MGMT, DCI_DT_FLOAT, _T("Server.AverageConfigurationPollerQueueSize"), _T("Average length of configuration poller queue for last minute") },
    { NF_IS_LOCAL_MGMT, DCI_DT_FLOAT, _T("Server.AverageDBWriterQueueSize"), _T("Average length of database writer's request queue for last minute") },
index f214645..78e9882 100644 (file)
@@ -778,6 +778,7 @@ void Node::ConfigurationPoll(ClientSession *pSession, DWORD dwRqId)
       }
 
       m_dwFlags |= NF_IS_SNMP;
+      m_dwDynamicFlags &= ~NDF_SNMP_UNREACHEABLE;
       m_iSnmpAgentFails = 0;
       SendPollerMsg(dwRqId, _T("   SNMP agent is active\r\n"));
 
@@ -800,6 +801,7 @@ void Node::ConfigurationPoll(ClientSession *pSession, DWORD dwRqId)
          if (m_iSnmpAgentFails == 0)
             PostEvent(EVENT_SNMP_FAIL, m_dwId, NULL);
          m_iSnmpAgentFails++;
+         m_dwDynamicFlags |= NDF_SNMP_UNREACHEABLE;
       }
       SendPollerMsg(dwRqId, _T("   SNMP agent is not responding\r\n"));
    }
@@ -808,6 +810,7 @@ void Node::ConfigurationPoll(ClientSession *pSession, DWORD dwRqId)
    if (pAgentConn->Connect())
    {
       m_dwFlags |= NF_IS_NATIVE_AGENT;
+      m_dwDynamicFlags &= ~NDF_AGENT_UNREACHEABLE;
       m_iNativeAgentFails = 0;
       
       Lock();
@@ -846,6 +849,7 @@ void Node::ConfigurationPoll(ClientSession *pSession, DWORD dwRqId)
          if (m_iNativeAgentFails == 0)
             PostEvent(EVENT_AGENT_FAIL, m_dwId, NULL);
          m_iNativeAgentFails++;
+         m_dwDynamicFlags |= NDF_AGENT_UNREACHEABLE;
       }
       SendPollerMsg(dwRqId, _T("   NetXMS native agent is not responding\r\n"));
    }
@@ -1114,6 +1118,18 @@ DWORD Node::GetInternalItem(const char *szParam, DWORD dwBufSize, char *szBuffer
    {
       sprintf(szBuffer, "%d", m_iStatus);
    }
+   else if (!stricmp(szParam, "AgentStatus"))
+   {
+      if (m_dwFlags & NF_IS_NATIVE_AGENT)
+      {
+         szBuffer[0] = (m_dwDynamicFlags & NDF_AGENT_UNREACHEABLE) ? '1' : '0';
+         szBuffer[1] = 0;
+      }
+      else
+      {
+         dwError = DCE_NOT_SUPPORTED;
+      }
+   }
    else if (MatchString("ChildStatus(*)", szParam, FALSE))
    {
       char *pEnd, szArg[256];
index 27d6d54..c44a93e 100644 (file)
@@ -78,6 +78,8 @@ extern DWORD g_dwConfigurationPollingInterval;
 #define NDF_QUEUED_FOR_STATUS_POLL     0x0001
 #define NDF_QUEUED_FOR_CONFIG_POLL     0x0002
 #define NDF_UNREACHEABLE               0x0004
+#define NDF_AGENT_UNREACHEABLE         0x0008
+#define NDF_SNMP_UNREACHEABLE          0x0010
 
 
 //