Unfinished work on log processing policy transfer to agent
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 27 Sep 2005 20:22:28 +0000 (20:22 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 27 Sep 2005 20:22:28 +0000 (20:22 +0000)
.gitattributes
ChangeLog
include/nms_cscp.h
include/nxclapi.h
include/nxlog.h
src/agent/core/lpp.cpp [new file with mode: 0644]
src/agent/core/nxagentd.dsp
src/agent/core/nxagentd.h
src/agent/core/session.cpp
src/agent/core/trap.cpp [new file with mode: 0644]
src/server/core/syslogd.cpp

index 087fd02..be2db80 100644 (file)
@@ -178,6 +178,7 @@ src/agent/core/exec.cpp -text
 src/agent/core/getparam.cpp -text
 src/agent/core/hddinfo.cpp -text
 src/agent/core/log.cpp -text
+src/agent/core/lpp.cpp -text
 src/agent/core/messages.mc -text
 src/agent/core/netinfo.cpp -text
 src/agent/core/nxagentd.cpp -text
@@ -192,6 +193,7 @@ src/agent/core/session.cpp -text
 src/agent/core/subagent.cpp -text
 src/agent/core/sysinfo.cpp -text
 src/agent/core/tools.cpp -text
+src/agent/core/trap.cpp -text
 src/agent/core/upgrade.cpp -text
 src/agent/core/win32.cpp -text
 src/agent/install/Makefile.am -text
index d0af985..89a55f7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,11 +3,14 @@
 *
 
 - Added possibility to change size of ICMP echo request packets sent by server
+- Added built-in syslog server
+- Core agent ported to AIX
 - PING subagent:
-       - Ported to NetWare
+       - Ported to NetWare and AIX
        - Added "packet size" argument to Icmp.Ping(*) parameter
        - Added "packet size" option to target configuration
        - Added DefaultPacketSize configuration parameter
+- Port checker subagent ported to AIX
 
 
 *
index c13687f..a947976 100644 (file)
@@ -536,6 +536,9 @@ typedef struct
 #define VID_NUM_COLUMNS             ((DWORD)166)
 #define VID_NUM_ROWS                ((DWORD)167)
 #define VID_TABLE_TITLE             ((DWORD)168)
+#define VID_LPP_ID                  ((DWORD)169)
+#define VID_LPP_VERSION             ((DWORD)170)
+#define VID_LOG_NAME                ((DWORD)171)
 
 // Variable ranges for object's ACL
 #define VID_ACL_USER_BASE           ((DWORD)0x00001000)
@@ -605,6 +608,9 @@ typedef struct
 #define VID_COLUMN_FMT_BASE         ((DWORD)0x20000000)
 #define VID_ROW_DATA_BASE           ((DWORD)0x30000000)
 
+// Base value for log policy rules
+#define VID_LPP_RULE_BASE           ((DWORD)0x10000000)
+
 
 //
 // Inline functions
index 6420ea8..5412e45 100644 (file)
@@ -30,6 +30,7 @@
 #include <nximage.h>
 #include <nxcscpapi.h>
 #include <nxtools.h>
+#include <nxlog.h>
 
 #ifdef _WIN32
 #ifdef LIBNXCL_EXPORTS
@@ -53,7 +54,6 @@ typedef void * NXC_SESSION;
 // Some constants
 //
 
-#define MAX_OBJECT_NAME          64
 #define MAX_COMMUNITY_LENGTH     32
 #define MAX_OID_LENGTH           1024
 #define MAX_EVENT_MSG_LENGTH     256
index 79127dc..34db34d 100644 (file)
@@ -28,6 +28,7 @@
 // Constants
 //
 
+#define MAX_OBJECT_NAME          64
 #define MAX_LOG_MSG_LENGTH       1024
 #define MAX_SYSLOG_HOSTNAME_LEN  128
 #define MAX_SYSLOG_TAG_LEN       33
diff --git a/src/agent/core/lpp.cpp b/src/agent/core/lpp.cpp
new file mode 100644 (file)
index 0000000..6dcb9ce
--- /dev/null
@@ -0,0 +1,33 @@
+/* 
+** NetXMS multiplatform core agent
+** Copyright (C) 2003, 2004, 2005 Victor Kirhenshtein
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** $module: lpp.cpp
+**
+**/
+
+#include "nxagentd.h"
+
+
+//
+// Install log processing policy
+//
+
+DWORD InstallLogPolicy(NX_LPP *pPolicy)
+{
+   return ERR_NOT_IMPLEMENTED;
+}
index 48dceac..8a94c2e 100644 (file)
@@ -121,6 +121,10 @@ SOURCE=.\log.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=.\lpp.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\netinfo.cpp
 # End Source File
 # Begin Source File
@@ -149,6 +153,10 @@ SOURCE=.\tools.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=.\trap.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\upgrade.cpp
 # End Source File
 # Begin Source File
@@ -199,6 +207,10 @@ SOURCE=..\..\..\include\nxclapi.h
 
 SOURCE=..\..\..\include\nxcscpapi.h
 # End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\nxlog.h
+# End Source File
 # End Group
 # Begin Group "Resource Files"
 
index 20f6759..51f881c 100644 (file)
@@ -30,6 +30,7 @@
 #include <nms_cscp.h>
 #include <stdio.h>
 #include <nxqueue.h>
+#include <nxlog.h>
 #include "messages.h"
 
 #define LIBNXCL_NO_DECLARATIONS
@@ -231,6 +232,7 @@ private:
    void Action(CSCPMessage *pRequest, CSCPMessage *pMsg);
    void RecvFile(CSCPMessage *pRequest, CSCPMessage *pMsg);
    DWORD Upgrade(CSCPMessage *pRequest);
+   DWORD ApplyLogPolicy(CSCPMessage *pRequest);
 
    void ReadThread(void);
    void WriteThread(void);
@@ -299,6 +301,8 @@ DWORD ExecuteCommand(char *pszCommand, NETXMS_VALUES_LIST *pArgs);
 
 DWORD UpgradeAgent(TCHAR *pszPkgFile);
 
+DWORD InstallLogPolicy(NX_LPP *pPolicy);
+
 #ifdef _WIN32
 
 void InitService(void);
index 6edf228..a737749 100644 (file)
@@ -385,6 +385,9 @@ void CommSession::ProcessingThread(void)
             case CMD_UPDATE_AGENT_CONFIG:
                UpdateConfig(pMsg, &msg);
                break;
+            case CMD_APPLY_LOG_POLICY:
+               msg.SetVariable(VID_RCC, ApplyLogPolicy(pMsg));
+               break;
             default:
                // Attempt to process unknown command by subagents
                if (!ProcessCmdBySubAgent(dwCommand, pMsg, &msg))
@@ -687,3 +690,51 @@ void CommSession::UpdateConfig(CSCPMessage *pRequest, CSCPMessage *pMsg)
       pMsg->SetVariable(VID_RCC, ERR_ACCESS_DENIED);
    }
 }
+
+
+//
+// Apply log processing policy
+//
+
+DWORD CommSession::ApplyLogPolicy(CSCPMessage *pRequest)
+{
+   DWORD i, dwResult, dwId;
+   NX_LPP *pPolicy;
+
+   if (m_bMasterServer)
+   {
+      pPolicy = (NX_LPP *)malloc(sizeof(NX_LPP));
+      memset(pPolicy, 0, sizeof(NX_LPP));
+
+      pPolicy->dwFlags = pRequest->GetVariableLong(VID_FLAGS);
+      pPolicy->dwId = pRequest->GetVariableLong(VID_LPP_ID);
+      pPolicy->dwNumRules = pRequest->GetVariableLong(VID_NUM_RULES);
+      pPolicy->dwVersion = pRequest->GetVariableLong(VID_LPP_VERSION);
+      pRequest->GetVariableStr(VID_LOG_NAME, pPolicy->szLogName, MAX_DB_STRING);
+      pRequest->GetVariableStr(VID_NAME, pPolicy->szName, MAX_OBJECT_NAME);
+
+      pPolicy->pRuleList = (NX_LPP_RULE *)malloc(pPolicy->dwNumRules * sizeof(NX_LPP_RULE));
+      for(i = 0, dwId = VID_LPP_RULE_BASE; i < pPolicy->dwNumRules; i++, dwId += 10)
+      {
+         pPolicy->pRuleList[i].dwEvent = pRequest->GetVariableLong(dwId);
+         pPolicy->pRuleList[i].dwMsgIdFrom = pRequest->GetVariableLong(dwId + 1);
+         pPolicy->pRuleList[i].dwMsgIdTo = pRequest->GetVariableLong(dwId + 2);
+         pPolicy->pRuleList[i].nFacility = (int)pRequest->GetVariableShort(dwId + 3);
+         pPolicy->pRuleList[i].nSeverity = (int)pRequest->GetVariableShort(dwId + 4);
+         pRequest->GetVariableStr(dwId + 5, pPolicy->pRuleList[i].szRegExp, MAX_DB_STRING);
+         pRequest->GetVariableStr(dwId + 6, pPolicy->pRuleList[i].szSource, MAX_DB_STRING);
+      }
+
+      dwResult = InstallLogPolicy(pPolicy);
+      if (dwResult != ERR_SUCCESS)
+      {
+         safe_free(pPolicy->pRuleList);
+         free(pPolicy);
+      }
+   }
+   else
+   {
+      dwResult = ERR_ACCESS_DENIED;
+   }
+   return dwResult;
+}
diff --git a/src/agent/core/trap.cpp b/src/agent/core/trap.cpp
new file mode 100644 (file)
index 0000000..63720dd
--- /dev/null
@@ -0,0 +1,91 @@
+/* 
+** NetXMS multiplatform core agent
+** Copyright (C) 2003, 2004, 2005 Victor Kirhenshtein
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** $module: trap.cpp
+**
+**/
+
+#include "nxagentd.h"
+
+
+//
+// Send trap to server
+//
+
+void SendTrap(DWORD dwEventCode, int iNumArgs, TCHAR **ppArgList)
+{
+   int i;
+   CSCPMessage msg;
+
+   msg.SetCode(CMD_TRAP);
+   msg.SetId(0);
+   msg.SetVariable(VID_EVENT_CODE, dwEventCode);
+   msg.SetVariable(VID_NUM_ARGS, (WORD)iNumArgs);
+   for(i = 0; i < iNumArgs; i++)
+      msg.SetVariable(VID_EVENT_ARG_BASE + i, ppArgList[i]);
+}
+
+
+//
+// Send trap - variant 2
+// Arguments:
+// dwEventCode - Event code
+// pszFormat   - Parameter format string, each parameter represented by one character.
+//    The following format characters can be used:
+//        s - String
+//        d - Decimal integer
+//        x - Hex integer
+//        a - IP address
+//        i - Object ID
+//
+
+void SendTrap(DWORD dwEventCode, TCHAR *pszFormat, ...)
+{
+   int i, iNumArgs;
+   TCHAR *ppArgList[64];
+   va_list args;
+
+   iNumArgs = (pszFormat == NULL) ? 0 : strlen(pszFormat);
+   for(i = 0; i < iNumArgs; i++)
+   {
+      switch(pszFormat[i])
+      {
+         case 's':
+            ppArgList[i] = va_arg(args, TCHAR *);
+            break;
+         case 'd':
+            ppArgList[i] = (char *)malloc(16);
+            sprintf(ppArgList[i], "%d", va_arg(args, LONG));
+            break;
+         case 'x':
+         case 'i':
+            ppArgList[i] = (char *)malloc(16);
+            sprintf(ppArgList[i], "0x%08X", va_arg(args, DWORD));
+            break;
+         case 'a':
+            ppArgList[i] = (char *)malloc(16);
+            IpToStr(va_arg(args, DWORD), ppArgList[i]);
+            break;
+         default:
+            ppArgList[i] = _T("BAD FORMAT");
+            break;
+      }
+   }
+
+   SendTrap(dwEventCode, iNumArgs, ppArgList);
+}
index d9587da..c106cc6 100644 (file)
@@ -194,7 +194,6 @@ static BOOL ParseSyslogMessage(char *psMsg, int nMsgLen, NX_LOG_RECORD *pRec)
    }
    nLen = min(nMsgLen - nPos, MAX_LOG_MSG_LENGTH);
    memcpy(pRec->szMessage, pCurr, nLen);
-   pRec->szMessage[nLen] = 0;
 
    return TRUE;
 }