Started work on network service objects
authorVictor Kirhenshtein <victor@netxms.org>
Thu, 20 Jan 2005 16:02:52 +0000 (16:02 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Thu, 20 Jan 2005 16:02:52 +0000 (16:02 +0000)
.gitattributes
include/netxmsdb.h
include/nms_cscp.h
include/nxclapi.h
include/nxevent.h
sql/events.in
sql/schema.in
src/server/core/epp.cpp
src/server/core/netsrv.cpp [new file with mode: 0644]
src/server/core/nxcore.dsp
src/server/include/nms_objects.h

index b635b5b..2565ed8 100644 (file)
@@ -521,6 +521,7 @@ src/server/core/main.cpp -text
 src/server/core/modules.cpp -text
 src/server/core/netinfo.cpp -text
 src/server/core/netobj.cpp -text
+src/server/core/netsrv.cpp -text
 src/server/core/node.cpp -text
 src/server/core/nortel.cpp -text
 src/server/core/np.cpp -text
index 0709b53..2e9213b 100644 (file)
@@ -23,6 +23,6 @@
 #ifndef _netxms_db_h
 #define _netxms_db_h
 
-#define DB_FORMAT_VERSION      19
+#define DB_FORMAT_VERSION      20
 
 #endif
index eb50119..e7094fd 100644 (file)
@@ -278,6 +278,9 @@ typedef struct
 #define CMD_LOCK_PACKAGE_DB         0x0070
 #define CMD_UNLOCK_PACKAGE_DB       0x0071
 #define CMD_ABORT_FILE_TRANSFER     0x0072
+#define CMD_CHECK_NETWORK_SERVICE   0x0073
+#define CMD_GET_AGENT_CONFIG        0x0074
+#define CMD_UPDATE_AGENT_CONFIG     0x0075
 
 
 //
@@ -413,6 +416,12 @@ typedef struct
 #define VID_PACKAGE_VERSION         ((DWORD)127)
 #define VID_PLATFORM_NAME           ((DWORD)128)
 #define VID_PACKAGE_NAME            ((DWORD)129)
+#define VID_SERVICE_TYPE            ((DWORD)130)
+#define VID_IP_PROTO                ((DWORD)131)
+#define VID_IP_PORT                 ((DWORD)132)
+#define VID_SERVICE_REQUEST         ((DWORD)133)
+#define VID_SERVICE_RESPONCE        ((DWORD)134)
+#define VID_POLL_NODE_ID            ((DWORD)135)
 
 // Variable ranges for object's ACL
 #define VID_ACL_USER_BASE           ((DWORD)0x00001000)
index 557e943..dd8a9e3 100644 (file)
@@ -115,6 +115,7 @@ typedef void * NXC_SESSION;
 #define OBJECT_TEMPLATE       8
 #define OBJECT_TEMPLATEGROUP  9
 #define OBJECT_TEMPLATEROOT   10
+#define OBJECT_NETWORKSERVICE 11
 
 
 //
@@ -159,6 +160,18 @@ typedef void * NXC_SESSION;
 
 
 //
+// Service types
+//
+
+#define NETSRV_CUSTOM         0
+#define NETSRV_SSH            1
+#define NETSRV_POP3           2
+#define NETSRV_SMTP           3
+#define NETSRV_FTP            4
+#define NETSRV_HTTP           5
+
+
+//
 // Events
 //
 
index 3d83344..5bc9874 100644 (file)
 #define EVENT_SMTP_FAILURE       22
 #define EVENT_MAC_ADDR_CHANGED   23
 #define EVENT_INCORRECT_NETMASK  24
+#define EVENT_SERVICE_DOWN       25
+#define EVENT_SERVICE_UP         26
+#define EVENT_NODE_DOWN          27
+#define EVENT_NODE_UP            28
 
 #define EVENT_SNMP_UNMATCHED_TRAP   500
 #define EVENT_SNMP_COLD_START       501
index 8b8bd66..9c7a1ab 100644 (file)
@@ -261,6 +261,46 @@ INSERT INTO event_cfg (event_code,event_name,severity,flags,message,description)
                '   4) Actual network mask on interface#0D#0A' CONCAT
                '   5) Correct network mask'
        );
+INSERT INTO event_cfg (event_code,event_name,severity,flags,message,description) VALUES
+       (
+               EVENT_NODE_DOWN, 'SYS_NODE_DOWN',
+               EVENT_SEVERITY_CRITICAL, 1,
+               'Node down',
+               'Generated when node is not responding to management server.#0D#0A' CONCAT
+               'Parameters:#0D#0A' CONCAT
+               '   No event-specific parameters'
+       );
+INSERT INTO event_cfg (event_code,event_name,severity,flags,message,description) VALUES
+       (
+               EVENT_NODE_UP, 'SYS_NODE_UP',
+               EVENT_SEVERITY_NORMAL, 1,
+               'Node up',
+               'Generated when communication with the node re-established.#0D#0A' CONCAT
+               'Parameters:#0D#0A' CONCAT
+               '   No event-specific parameters'
+       );
+INSERT INTO event_cfg (event_code,event_name,severity,flags,message,description) VALUES
+       (
+               EVENT_SERVICE_DOWN, 'SYS_SERVICE_DOWN',
+               EVENT_SEVERITY_MAJOR, 1,
+               'Network service "%1" is not responding',
+               'Generated when network service is not responding to management server as expected.#0D#0A' CONCAT
+               'Parameters:#0D#0A' CONCAT
+               '   1) Service name#0D0A' CONCAT
+               '   2) Service object ID#0D0A' CONCAT
+               '   3) Service type'
+       );
+INSERT INTO event_cfg (event_code,event_name,severity,flags,message,description) VALUES
+       (
+               EVENT_SERVICE_UP, 'SYS_SERVICE_UP',
+               EVENT_SEVERITY_NORMAL, 1,
+               'Network service "%1" returned to operational state',
+               'Generated when network service responds as expected after failure.#0D#0A' CONCAT
+               'Parameters:#0D#0A' CONCAT
+               '   1) Service name#0D0A' CONCAT
+               '   2) Service object ID#0D0A' CONCAT
+               '   3) Service type'
+       );
 
 
 /*
index f089dde..a4aed0e 100644 (file)
@@ -158,6 +158,27 @@ CREATE TABLE interfaces
 
 
 /*
+** Network services
+*/
+
+CREATE TABLE network_services
+(
+       id integer not null,
+       name varchar(63),
+       status integer,
+        is_deleted integer,
+       node_id integer not null,
+       service_type integer,
+       ip_bind_addr varchar(15),
+       ip_proto integer,
+       ip_port integer,
+       check_request SQL_TEXT,
+       check_responce SQL_TEXT,
+       PRIMARY KEY(id)
+) TABLE_TYPE;
+
+
+/*
 ** Container objects
 */
 
index 7650498..e682bfd 100644 (file)
@@ -68,6 +68,7 @@ EPRule::EPRule(DB_RESULT hResult, int iRow)
 EPRule::EPRule(CSCPMessage *pMsg)
 {
    m_dwFlags = pMsg->GetVariableLong(VID_FLAGS);
+printf("RECEIVED FLAGS %d from %d\n",m_dwFlags,VID_FLAGS);
    m_dwId = pMsg->GetVariableLong(VID_RULE_ID);
    m_pszComment = pMsg->GetVariableStr(VID_COMMENT);
 
@@ -372,6 +373,7 @@ void EPRule::SaveToDB(void)
 
 void EPRule::CreateMessage(CSCPMessage *pMsg)
 {
+printf("SENDING FLAGS %d in %d\n",m_dwFlags,VID_FLAGS);
    pMsg->SetVariable(VID_FLAGS, m_dwFlags);
    pMsg->SetVariable(VID_RULE_ID, m_dwId);
    pMsg->SetVariable(VID_ALARM_SEVERITY, (WORD)m_iAlarmSeverity);
diff --git a/src/server/core/netsrv.cpp b/src/server/core/netsrv.cpp
new file mode 100644 (file)
index 0000000..b44fa6b
--- /dev/null
@@ -0,0 +1,110 @@
+/* 
+** NetXMS - Network Management System
+** 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: netsrv.cpp
+**
+**/
+
+#include "nxcore.h"
+
+
+//
+// Constructor
+//
+
+NetworkService::NetworkService()
+               :NetObj()
+{
+}
+
+
+//
+// Destructor
+//
+
+NetworkService::~NetworkService()
+{
+}
+
+
+//
+// Save object to database
+//
+
+BOOL NetworkService::SaveToDB(void)
+{
+   char szQuery[1024];
+   DWORD i;
+
+   Lock();
+
+   // Save access list
+   SaveACLToDB();
+
+   // Unlock object and clear modification flag
+   Unlock();
+   m_bIsModified = FALSE;
+   return TRUE;
+}
+
+
+//
+// Load properties from database
+//
+
+BOOL NetworkService::CreateFromDB(DWORD dwId)
+{
+   m_dwId = dwId;
+
+   LoadACLFromDB();
+   return TRUE;
+}
+
+
+//
+// Delete object from database
+//
+
+BOOL NetworkService::DeleteFromDB(void)
+{
+   return TRUE;
+}
+
+
+//
+// Create CSCP message with object's data
+//
+
+void NetworkService::CreateMessage(CSCPMessage *pMsg)
+{
+   NetObj::CreateMessage(pMsg);
+   pMsg->SetVariable(VID_SERVICE_TYPE, (WORD)m_iServiceType);
+}
+
+
+//
+// Modify object from message
+//
+
+DWORD NetworkService::ModifyFromMessage(CSCPMessage *pRequest, BOOL bAlreadyLocked)
+{
+   if (!bAlreadyLocked)
+      Lock();
+
+   return NetObj::ModifyFromMessage(pRequest, TRUE);
+}
index c1028c9..aa7b2f4 100644 (file)
@@ -218,6 +218,10 @@ SOURCE=.\netobj.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=.\netsrv.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\node.cpp
 # End Source File
 # Begin Source File
index aa0a2d1..ca541f1 100644 (file)
@@ -255,6 +255,40 @@ public:
 
 
 //
+// Network service class
+//
+
+class NetworkService : public NetObj
+{
+protected:
+   int m_iServiceType;   // SSH, POP3, etc.
+   Node *m_pHostNode;    // Pointer to node object which hosts this service
+   Node *m_pPollNode;    // Pointer to node object which is used for polling
+                         // If NULL, m_pHostNode->m_pPollNode will be used
+   DWORD m_dwIpBindAddr; // IP address this service listen on, or 0.0.0.0 for all interfaces
+   WORD m_wProto;        // Protocol (TCP, UDP, etc.)
+   WORD m_wPort;         // TCP or UDP port number
+   TCHAR *m_pszRequest;  // Service-specific request
+   TCHAR *m_pszResponce; // Service-specific expected responce
+
+public:
+   NetworkService();
+   virtual ~NetworkService();
+
+   virtual int Type(void) { return OBJECT_NETWORKSERVICE; }
+
+   virtual BOOL SaveToDB(void);
+   virtual BOOL DeleteFromDB(void);
+   virtual BOOL CreateFromDB(DWORD dwId);
+
+   void StatusPoll(ClientSession *pSession, DWORD dwRqId);
+
+   virtual void CreateMessage(CSCPMessage *pMsg);
+   virtual DWORD ModifyFromMessage(CSCPMessage *pRequest, BOOL bAlreadyLocked = FALSE);
+};
+
+
+//
 // Node
 //
 
@@ -281,6 +315,7 @@ protected:
    MUTEX m_hPollerMutex;
    MUTEX m_hAgentAccessMutex;
    AgentConnection *m_pAgentConnection;
+   Node *m_pPollNode;      // Node used for network service polling
 
    void PollerLock(void) { MutexLock(m_hPollerMutex, INFINITE); }
    void PollerUnlock(void) { MutexUnlock(m_hPollerMutex); }
@@ -343,6 +378,9 @@ public:
    virtual DWORD ModifyFromMessage(CSCPMessage *pRequest, BOOL bAlreadyLocked = FALSE);
 
    DWORD WakeUp(void);
+
+   void AddService(NetworkService *pNetSrv) { AddChild(pNetSrv); pNetSrv->AddParent(this); }
+   Node *GetPollNode(void) { return m_pPollNode; }
 };