Minor changes
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 8 Mar 2005 16:09:38 +0000 (16:09 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 8 Mar 2005 16:09:38 +0000 (16:09 +0000)
.gitattributes
src/server/core/correlate.cpp
src/server/core/node.cpp
src/server/core/nxcore.dsp
src/server/core/tracert.cpp [copied from src/server/core/correlate.cpp with 87% similarity]
src/server/include/nms_objects.h

index 65d048e..2086329 100644 (file)
@@ -639,6 +639,7 @@ src/server/core/subnet.cpp -text
 src/server/core/syncer.cpp -text
 src/server/core/template.cpp -text
 src/server/core/tools.cpp -text
+src/server/core/tracert.cpp -text
 src/server/core/uniroot.cpp -text
 src/server/core/users.cpp -text
 src/server/core/watchdog.cpp -text
index 871fe9c..128deed 100644 (file)
 #include "nxcore.h"
 
 
+//
+// Correlate SYS_SERVICE_DOWN event to possible SYS_NODE_DOWN
+//
+
+static void C_SysServiceDown(Event *pEvent)
+{
+   NetObj *pObject;
+
+   pObject = FindObjectById(pEvent->SourceId());
+   if ((pObject != NULL) && (pObject->Type() == OBJECT_NODE))
+   {
+      if (((Node *)pObject)->RuntimeFlags() & NDF_UNREACHEABLE)
+      {
+         pEvent->SetRootId(((Node *)pObject)->LastEventId(LAST_EVENT_NODE_DOWN));
+      }
+   }
+}
+
+
 //
 // Correlate event
 //
 
 void CorrelateEvent(Event *pEvent)
 {
+   switch(pEvent->Code())
+   {
+      case EVENT_SERVICE_DOWN:
+         C_SysServiceDown(pEvent);
+         break;
+      default:
+         break;
+   }
 }
index fc4003a..c5291e5 100644 (file)
@@ -54,6 +54,7 @@ Node::Node()
    m_dwNumParams = 0;
    m_pParamList = NULL;
    m_dwPollerNode = 0;
+   memset(m_qwLastEvents, 0, sizeof(QWORD) * MAX_LAST_EVENTS);
 }
 
 
@@ -90,6 +91,7 @@ Node::Node(DWORD dwAddr, DWORD dwFlags, DWORD dwDiscoveryFlags)
    m_dwNumParams = 0;
    m_pParamList = NULL;
    m_dwPollerNode = 0;
+   memset(m_qwLastEvents, 0, sizeof(QWORD) * MAX_LAST_EVENTS);
 }
 
 
index 44848d8..19172f8 100644 (file)
@@ -282,6 +282,10 @@ SOURCE=.\tools.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=.\tracert.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\uniroot.cpp
 # End Source File
 # Begin Source File
similarity index 87%
copy from src/server/core/correlate.cpp
copy to src/server/core/tracert.cpp
index 871fe9c..d46d446 100644 (file)
@@ -16,7 +16,7 @@
 ** along with this program; if not, write to the Free Software
 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 **
-** $module: correlate.cpp
+** $module: tracert.cpp
 **
 **/
 
@@ -24,9 +24,9 @@
 
 
 //
-// Correlate event
+// Trace route between two nodes
 //
 
-void CorrelateEvent(Event *pEvent)
+BOOL TraceRoute(Node *pSrc, Node *pDest, NetObj **ppTrace)
 {
 }
index ae9b33c..27d6d54 100644 (file)
@@ -53,6 +53,15 @@ extern DWORD g_dwConfigurationPollingInterval;
 #define INVALID_INDEX         0xFFFFFFFF
 
 
+//
+// Last events
+//
+
+#define MAX_LAST_EVENTS       8
+
+#define LAST_EVENT_NODE_DOWN  0
+
+
 //
 // Discovery flags
 //
@@ -68,6 +77,7 @@ extern DWORD g_dwConfigurationPollingInterval;
 
 #define NDF_QUEUED_FOR_STATUS_POLL     0x0001
 #define NDF_QUEUED_FOR_CONFIG_POLL     0x0002
+#define NDF_UNREACHEABLE               0x0004
 
 
 //
@@ -367,6 +377,7 @@ protected:
    MUTEX m_hAgentAccessMutex;
    AgentConnection *m_pAgentConnection;
    DWORD m_dwPollerNode;      // Node used for network service polling
+   QWORD m_qwLastEvents[MAX_LAST_EVENTS];
 
    void PollerLock(void) { MutexLock(m_hPollerMutex, INFINITE); }
    void PollerUnlock(void) { MutexUnlock(m_hPollerMutex); }
@@ -445,6 +456,8 @@ public:
    void AddService(NetworkService *pNetSrv) { AddChild(pNetSrv); pNetSrv->AddParent(this); }
    DWORD CheckNetworkService(DWORD *pdwStatus, DWORD dwIpAddr, int iServiceType, WORD wPort = 0,
                              WORD wProto = 0, TCHAR *pszRequest = NULL, TCHAR *pszResponce = NULL);
+
+   QWORD LastEventId(int nIndex) { return ((nIndex >= 0) && (nIndex < MAX_LAST_EVENTS)) ? m_qwLastEvents[nIndex] : 0; }
 };