Advanced status calculation fully implemented
authorVictor Kirhenshtein <victor@netxms.org>
Thu, 3 Nov 2005 22:35:14 +0000 (22:35 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Thu, 3 Nov 2005 22:35:14 +0000 (22:35 +0000)
14 files changed:
ChangeLog
include/nxcscpapi.h
src/agent/subagents/ping/ping.cpp
src/agent/subagents/ping/ping.h
src/console/win32/ObjectPropsStatus.cpp
src/console/win32/ObjectPropsStatus.h
src/console/win32/globals.h
src/console/win32/nxcon.clw
src/console/win32/nxcon.cpp
src/console/win32/tools.cpp
src/libnxcl/objects.cpp
src/server/core/netobj.cpp
src/server/core/objects.cpp
src/server/include/nms_objects.h

index c6a3b92..c641ede 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,8 +2,10 @@
 * 0.2.7
 *
 
+- Advanced status calculation mechanism implemented
 - Added support for SQLite embedded database engine
 - New MIBs added: IEEE 802.11
+- PING subagent: added "PacketRate" configuration parameter
 
 
 *
index c0b1294..19b488c 100644 (file)
@@ -103,6 +103,7 @@ public:
    DWORD GetVariableLong(DWORD dwVarId);
    QWORD GetVariableInt64(DWORD dwVarId);
    WORD GetVariableShort(DWORD dwVarId);
+   LONG GetVariableShortAsInt32(DWORD dwVarId);
    double GetVariableDouble(DWORD dwVarId);
    TCHAR *GetVariableStr(DWORD dwVarId, TCHAR *szBuffer = NULL, DWORD dwBufSize = 0);
    DWORD GetVariableBinary(DWORD dwVarId, BYTE *pBuffer, DWORD dwBufSize);
index f8a441c..ee4b1cd 100644 (file)
@@ -42,6 +42,7 @@ static DWORD m_dwNumTargets = 0;
 static PING_TARGET *m_pTargetList = NULL;
 static DWORD m_dwTimeout = 3000;    // Default timeout is 3 seconds
 static DWORD m_dwDefPacketSize = 46;
+static DWORD m_dwPollsPerMinute = 4;
 
 
 //
@@ -62,15 +63,15 @@ static THREAD_RESULT THREAD_CALL PollerThread(void *pArg)
          ((PING_TARGET *)pArg)->dwLastRTT = 10000;
 
       ((PING_TARGET *)pArg)->pdwHistory[((PING_TARGET *)pArg)->iBufPos++] = ((PING_TARGET *)pArg)->dwLastRTT;
-      if (((PING_TARGET *)pArg)->iBufPos == POLLS_PER_MINUTE)
+      if (((PING_TARGET *)pArg)->iBufPos == (int)m_dwPollsPerMinute)
          ((PING_TARGET *)pArg)->iBufPos = 0;
-      for(i = 0, dwSum = 0; i < POLLS_PER_MINUTE; i++)
+      for(i = 0, dwSum = 0; i < m_dwPollsPerMinute; i++)
          dwSum += ((PING_TARGET *)pArg)->pdwHistory[i];
-      ((PING_TARGET *)pArg)->dwAvgRTT = dwSum / POLLS_PER_MINUTE;
+      ((PING_TARGET *)pArg)->dwAvgRTT = dwSum / m_dwPollsPerMinute;
 
       dwElapsedTime = (DWORD)(GetCurrentTimeMs() - qwStartTime);
 
-      if (ConditionWait(m_hCondShutdown, 60000 / POLLS_PER_MINUTE - dwElapsedTime))
+      if (ConditionWait(m_hCondShutdown, 60000 / m_dwPollsPerMinute - dwElapsedTime))
          break;
    }
    return THREAD_OK;
@@ -295,6 +296,7 @@ static TCHAR *m_pszTargetList = NULL;
 static NX_CFG_TEMPLATE cfgTemplate[] =
 {
    { _T("DefaultPacketSize"), CT_LONG, 0, 0, 0, 0, &m_dwDefPacketSize },
+   { _T("PacketRate"), CT_LONG, 0, 0, 0, 0, &m_dwPollsPerMinute },
    { _T("Target"), CT_STRING_LIST, _T('\n'), 0, 0, 0, &m_pszTargetList },
    { _T("Timeout"), CT_LONG, 0, 0, 0, 0, &m_dwTimeout },
    { _T(""), CT_END_OF_LIST, 0, 0, 0, 0, NULL }
@@ -315,6 +317,11 @@ DECLARE_SUBAGENT_INIT(PING)
    {
       TCHAR *pItem, *pEnd;
 
+      if (m_dwPollsPerMinute == 0)
+         m_dwPollsPerMinute = 1;
+      if (m_dwPollsPerMinute > MAX_POLLS_PER_MINUTE)
+         m_dwPollsPerMinute = MAX_POLLS_PER_MINUTE;
+
       // Parse target list
       if (m_pszTargetList != NULL)
       {
index a97105f..5f7c3cd 100644 (file)
@@ -32,7 +32,7 @@
 // Constants
 //
 
-#define POLLS_PER_MINUTE      4
+#define MAX_POLLS_PER_MINUTE     60
 
 
 //
@@ -46,7 +46,7 @@ struct PING_TARGET
    DWORD dwPacketSize;
    DWORD dwAvgRTT;
    DWORD dwLastRTT;
-   DWORD pdwHistory[POLLS_PER_MINUTE];
+   DWORD pdwHistory[MAX_POLLS_PER_MINUTE];
    int iBufPos;
    THREAD hThread;
 };
index f824846..1b1c5cf 100644 (file)
@@ -27,7 +27,17 @@ CObjectPropsStatus::CObjectPropsStatus() : CPropertyPage(CObjectPropsStatus::IDD
        m_dThreshold4 = 0.0;
        m_iCalcAlg = -1;
        m_iPropAlg = -1;
+       m_iFixedStatus = -1;
+       m_iStatusTranslation1 = -1;
+       m_iStatusTranslation2 = -1;
+       m_iStatusTranslation3 = -1;
+       m_iStatusTranslation4 = -1;
        //}}AFX_DATA_INIT
+   m_iFixedStatus = 0;
+   m_iStatusTranslation1 = 0;
+   m_iStatusTranslation2 = 0;
+   m_iStatusTranslation3 = 0;
+   m_iStatusTranslation4 = 0;
 }
 
 CObjectPropsStatus::~CObjectPropsStatus()
@@ -57,15 +67,155 @@ void CObjectPropsStatus::DoDataExchange(CDataExchange* pDX)
        DDV_MinMaxDouble(pDX, m_dThreshold4, 0., 1.);
        DDX_Radio(pDX, IDC_RADIO_CALC_DEFAULT, m_iCalcAlg);
        DDX_Radio(pDX, IDC_RADIO_PROP_DEFAULT, m_iPropAlg);
+       DDX_CBIndex(pDX, IDC_COMBO_FIXED, m_iFixedStatus);
+       DDX_CBIndex(pDX, IDC_COMBO_S1, m_iStatusTranslation1);
+       DDX_CBIndex(pDX, IDC_COMBO_S2, m_iStatusTranslation2);
+       DDX_CBIndex(pDX, IDC_COMBO_S3, m_iStatusTranslation3);
+       DDX_CBIndex(pDX, IDC_COMBO_S4, m_iStatusTranslation4);
        //}}AFX_DATA_MAP
 }
 
 
 BEGIN_MESSAGE_MAP(CObjectPropsStatus, CPropertyPage)
        //{{AFX_MSG_MAP(CObjectPropsStatus)
-               // NOTE: the ClassWizard will add message map macros here
        //}}AFX_MSG_MAP
 END_MESSAGE_MAP()
 
 /////////////////////////////////////////////////////////////////////////////
 // CObjectPropsStatus message handlers
+
+
+//
+// WM_INITDIALOG message handler
+//
+
+BOOL CObjectPropsStatus::OnInitDialog() 
+{
+   int i;
+
+       CPropertyPage::OnInitDialog();
+       
+   m_pUpdate = ((CObjectPropSheet *)GetParent())->GetUpdateStruct();
+   m_bIsModified = FALSE;
+
+   // Setup combo boxes
+   for(i = 0; i < 5; i++)
+   {
+      m_wndComboFixed.AddString(g_szStatusTextSmall[i]);
+      m_wndComboS1.AddString(g_szStatusTextSmall[i]);
+      m_wndComboS2.AddString(g_szStatusTextSmall[i]);
+      m_wndComboS3.AddString(g_szStatusTextSmall[i]);
+      m_wndComboS4.AddString(g_szStatusTextSmall[i]);
+   }
+   m_wndComboFixed.SelectString(-1, g_szStatusTextSmall[m_iFixedStatus]);
+   m_wndComboS1.SelectString(-1, g_szStatusTextSmall[m_iStatusTranslation1]);
+   m_wndComboS2.SelectString(-1, g_szStatusTextSmall[m_iStatusTranslation2]);
+   m_wndComboS3.SelectString(-1, g_szStatusTextSmall[m_iStatusTranslation3]);
+   m_wndComboS4.SelectString(-1, g_szStatusTextSmall[m_iStatusTranslation4]);
+
+   OnPropAlgChange();
+   OnCalcAlgChange();
+       
+       return TRUE;
+}
+
+
+//
+// "OK" handler
+//
+
+void CObjectPropsStatus::OnOK() 
+{
+       CPropertyPage::OnOK();
+   
+   if (m_bIsModified)
+   {
+      m_pUpdate->dwFlags |= OBJ_UPDATE_STATUS_ALG;
+      m_pUpdate->iStatusCalcAlg = m_iCalcAlg;
+      m_pUpdate->iStatusPropAlg = m_iPropAlg;
+      m_pUpdate->iFixedStatus = m_iFixedStatus;
+      m_pUpdate->iStatusShift = m_iRelChange;
+      m_pUpdate->iStatusTrans[0] = m_iStatusTranslation1;
+      m_pUpdate->iStatusTrans[1] = m_iStatusTranslation2;
+      m_pUpdate->iStatusTrans[2] = m_iStatusTranslation3;
+      m_pUpdate->iStatusTrans[3] = m_iStatusTranslation4;
+      m_pUpdate->iStatusSingleTh = (int)(m_dSingleThreshold * 100);
+      m_pUpdate->iStatusThresholds[0] = (int)(m_dThreshold1 * 100);
+      m_pUpdate->iStatusThresholds[1] = (int)(m_dThreshold2 * 100);
+      m_pUpdate->iStatusThresholds[2] = (int)(m_dThreshold3 * 100);
+      m_pUpdate->iStatusThresholds[3] = (int)(m_dThreshold4 * 100);
+   }
+}
+
+
+//
+// WM_COMMAND message handler
+//
+
+BOOL CObjectPropsStatus::OnCommand(WPARAM wParam, LPARAM lParam) 
+{
+   WORD wCtrl;
+
+   switch(HIWORD(wParam))
+   {
+      case BN_CLICKED:
+         wCtrl = LOWORD(wParam);
+         if ((wCtrl == IDC_RADIO_PROP_DEFAULT) ||
+             (wCtrl == IDC_RADIO_UNCHANGED) ||
+             (wCtrl == IDC_RADIO_FIXED) ||
+             (wCtrl == IDC_RADIO_RELATIVE) ||
+             (wCtrl == IDC_RADIO_SEVERITY))
+         {
+            OnPropAlgChange();
+         }
+         else if ((wCtrl == IDC_RADIO_CALC_DEFAULT) ||
+                  (wCtrl == IDC_RADIO_MOST_CRITICAL) ||
+                  (wCtrl == IDC_RADIO_SINGLE) ||
+                  (wCtrl == IDC_RADIO_MULTIPLE))
+         {
+            OnCalcAlgChange();
+         }
+      case CBN_SELCHANGE:
+      case EN_CHANGE:
+         m_bIsModified = TRUE;
+         break;
+      default:
+         break;
+   }
+       return CPropertyPage::OnCommand(wParam, lParam);
+}
+
+
+//
+// Handle propagation algorithm change
+//
+
+void CObjectPropsStatus::OnPropAlgChange()
+{
+   BOOL bEnable;
+
+   EnableDlgItem(this, IDC_COMBO_FIXED, IsButtonChecked(this, IDC_RADIO_FIXED));
+   EnableDlgItem(this, IDC_EDIT_RELATIVE, IsButtonChecked(this, IDC_RADIO_RELATIVE));
+   bEnable = IsButtonChecked(this, IDC_RADIO_SEVERITY);
+   EnableDlgItem(this, IDC_COMBO_S1, bEnable);
+   EnableDlgItem(this, IDC_COMBO_S2, bEnable);
+   EnableDlgItem(this, IDC_COMBO_S3, bEnable);
+   EnableDlgItem(this, IDC_COMBO_S4, bEnable);
+}
+
+
+//
+// Handle calculation algorithm change
+//
+
+void CObjectPropsStatus::OnCalcAlgChange()
+{
+   BOOL bEnable;
+
+   EnableDlgItem(this, IDC_EDIT_THRESHOLD, IsButtonChecked(this, IDC_RADIO_SINGLE));
+   bEnable = IsButtonChecked(this, IDC_RADIO_MULTIPLE);
+   EnableDlgItem(this, IDC_EDIT_T1, bEnable);
+   EnableDlgItem(this, IDC_EDIT_T2, bEnable);
+   EnableDlgItem(this, IDC_EDIT_T3, bEnable);
+   EnableDlgItem(this, IDC_EDIT_T4, bEnable);
+}
index 86cb12b..6607ad5 100644 (file)
@@ -1,6 +1,7 @@
 #if !defined(AFX_OBJECTPROPSSTATUS_H__F62963D6_0352_4013_99D8_A5F2575A18BD__INCLUDED_)
 #define AFX_OBJECTPROPSSTATUS_H__F62963D6_0352_4013_99D8_A5F2575A18BD__INCLUDED_
 
+#include "..\..\..\INCLUDE\nxclapi.h"  // Added by ClassView
 #if _MSC_VER > 1000
 #pragma once
 #endif // _MSC_VER > 1000
@@ -35,24 +36,37 @@ public:
        double  m_dThreshold4;
        int             m_iCalcAlg;
        int             m_iPropAlg;
+       int             m_iFixedStatus;
+       int             m_iStatusTranslation1;
+       int             m_iStatusTranslation2;
+       int             m_iStatusTranslation3;
+       int             m_iStatusTranslation4;
        //}}AFX_DATA
 
 
 // Overrides
        // ClassWizard generate virtual function overrides
        //{{AFX_VIRTUAL(CObjectPropsStatus)
+       public:
+       virtual void OnOK();
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
+       virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
        //}}AFX_VIRTUAL
 
 // Implementation
 protected:
+       void OnCalcAlgChange(void);
+       void OnPropAlgChange(void);
        // Generated message map functions
        //{{AFX_MSG(CObjectPropsStatus)
-               // NOTE: the ClassWizard will add member functions here
+       virtual BOOL OnInitDialog();
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
 
+private:
+       BOOL m_bIsModified;
+       NXC_OBJECT_UPDATE *m_pUpdate;
 };
 
 //{{AFX_INSERT_LOCATION}}
index a20a86c..8fb825a 100644 (file)
@@ -278,6 +278,7 @@ const char *CodeToText(int iCode, CODE_TO_TEXT *pTranslator, const char *pszDefa
 char *TranslateUNIXText(const char *pszText);
 void RestoreMDIChildPlacement(CMDIChildWnd *pWnd, WINDOWPLACEMENT *pwp);
 void EnableDlgItem(CDialog *pWnd, int nCtrl, BOOL bEnable);
+BOOL IsButtonChecked(CDialog *pWnd, int nCtrl);
 BOOL ExtractWindowParam(TCHAR *pszStr, TCHAR *pszParam, TCHAR *pszBuffer, int iSize);
 long ExtractWindowParamLong(TCHAR *pszStr, TCHAR *pszParam, long nDefault);
 DWORD ExtractWindowParamULong(TCHAR *pszStr, TCHAR *pszParam, DWORD dwDefault);
index 105b3c7..38ffc35 100644 (file)
@@ -16,9 +16,9 @@ Class7=CEventBrowser
 Class9=CMapView
 
 ResourceCount=131
-Resource1=IDD_OBJECT_SECURITY (English (U.S.))
+Resource1=IDD_LOGIN (English (U.S.))
 Resource2=IDD_OBJECT_NODE_GENERAL
-Resource3=IDA_AGENT_CFG_EDITOR (English (U.S.))
+Resource3=IDA_ACTION_EDITOR (English (U.S.))
 Resource4=IDD_SELECT_OBJECT
 Resource5=IDD_SELECT_ACTION
 Class2=CChildView
@@ -32,9 +32,9 @@ Resource7=IDD_NEW_USER
 Class12=CObjectBrowser
 Resource8=IDD_CREATE_CONTAINER
 Class13=CObjectPropDlg
-Resource9=IDD_CHANGE_IP
+Resource9=IDD_EDIT_VARIABLE (English (U.S.))
 Resource10=IDM_VIEW_SPECIFIC (English (U.S.))
-Resource11=IDD_SELECT_EVENT (English (U.S.))
+Resource11=IDD_DCI_COLLECTION (English (U.S.))
 Resource12=IDR_CTRLPANEL (English (U.S.))
 Resource13=IDR_EVENTS (English (U.S.))
 Resource14=IDR_MAPFRAME (English (U.S.))
@@ -42,17 +42,17 @@ Resource15=IDR_OBJECTS (English (U.S.))
 Resource16=IDD_DUMMY (English (U.S.))
 Class14=CEventEditor
 Class15=CEditEventDlg
-Resource17=IDA_GRAPH (English (U.S.))
+Resource17=IDA_EPP (English (U.S.))
 Class16=CDebugFrame
-Resource18=IDD_ABOUTBOX (English (U.S.))
+Resource18=IDA_GRAPH (English (U.S.))
 Resource19=IDD_OBJECT_PROPERTIES (English (U.S.))
 Resource20=IDD_SELECT_EVENT
 Class17=CObjectPreview
-Resource21=IDA_TRAP_EDITOR (English (U.S.))
+Resource21=IDA_OBJECT_BROWSER (English (U.S.))
 Class18=CToolBox
 Class19=CObjectInfoBox
 Class20=CObjectSearchBox
-Resource22=IDD_SELECT_USER (English (U.S.))
+Resource22=IDD_EDIT_EVENT (English (U.S.))
 Class21=CEditBox
 Class22=COPGeneral
 Class23=CNodePropsGeneral
@@ -61,14 +61,14 @@ Class24=CObjectPropCaps
 Class25=CObjectPropSheet
 Resource24=IDA_MDI_DEFAULT
 Class26=CRequestProcessingDlg
-Resource25=IDD_EDIT_IP_SUBNET (English (U.S.))
+Resource25=IDD_GRAPH_PROP_DATA (English (U.S.))
 Resource26=IDD_PROGRESS (English (U.S.))
 Resource27=IDD_EDIT_RULE_ALARM
-Resource28=IDD_SET_PASSWORD (English (U.S.))
+Resource28=IDD_OBJECT_GENERAL (English (U.S.))
 Class27=CObjectPropsGeneral
-Resource29=IDA_SERVER_CFG_EDITOR (English (U.S.))
+Resource29=IDA_EVENT_EDITOR (English (U.S.))
 Class28=CObjectPropsSecurity
-Resource30=IDD_GRAPH_PROP_SETTINGS (English (U.S.))
+Resource30=IDD_INPUT_BOX (English (U.S.))
 Resource31=IDD_SELECT_USER
 Resource32=IDD_OBJECT_SECURITY
 Class29=CUserSelectDlg
@@ -85,30 +85,30 @@ Class33=CGroupPropDlg
 Resource39=IDD_CP_GENERAL
 Resource40=IDA_TRAP_EDITOR
 Resource41=IDM_VIEW_SPECIFIC
-Resource42=IDD_MIB_BROWSER (English (U.S.))
+Resource42=IDD_USER_PROPERTIES (English (U.S.))
 Class34=CPasswordChangeDlg
 Class35=CNodeSummary
 Class36=CNetSummaryFrame
 Class37=CDataCollectionEditor
-Resource43=IDD_OBJECT_VPNC_GENERAL (English (U.S.))
+Resource43=IDD_GRAPH_PROP_SETTINGS (English (U.S.))
 Class38=CDCIPropPage
-Resource44=IDD_ACTION_PROPERTIES (English (U.S.))
+Resource44=IDD_SELECT_EVENT (English (U.S.))
 Class39=CDCIDataView
-Resource45=IDD_LASTVAL_PROP (English (U.S.))
+Resource45=IDD_OBJECT_NETSRV_GENERAL (English (U.S.))
 Class40=CGraph
 Class41=CGraphFrame
 Class42=CDCIThresholdsPage
-Resource46=IDD_DCI_SCHEDULE (English (U.S.))
-Resource47=IDD_EDIT_TRAP (English (U.S.))
+Resource46=IDD_CREATE_VPNC (English (U.S.))
+Resource47=IDD_CREATE_CONTAINER (English (U.S.))
 Resource48=IDM_CONTEXT
 Class43=CThresholdDlg
-Resource49=IDD_DCI_DATA_EXPORT (English (U.S.))
+Resource49=IDD_OBJECT_NODE_POLL (English (U.S.))
 Resource50=IDD_EDIT_TRAP_ARG
 Class44=CMIBBrowserDlg
 Class45=CEventPolicyEditor
 Class46=CRuleList
 Class47=CRuleHeader
-Resource51=IDD_GROUP_PROPERTIES (English (U.S.))
+Resource51=IDD_REQUEST_PROCESSING (English (U.S.))
 Resource52=IDD_CREATE_NODE
 Class48=CObjectSelDlg
 Resource53=IDD_OBJECT_CAPS
@@ -117,22 +117,22 @@ Class49=CRuleCommentDlg
 Resource55=IDD_DCI_COLLECTION
 Class50=CEventSelDlg
 Resource56=IDD_DATA_QUERY
-Resource57=IDD_GRAPH_PROP_DATA (English (U.S.))
+Resource57=IDD_CREATE_NETSRV (English (U.S.))
 Resource58=IDD_CREATE_TG
-Resource59=IDD_OBJECT_NODE_POLL (English (U.S.))
-Resource60=IDA_PACKAGE_MGR (English (U.S.))
+Resource59=IDD_EDIT_TRAP_ARG (English (U.S.))
+Resource60=IDA_ALARM_BROWSER (English (U.S.))
 Class51=CObjectPropsPresentation
-Resource61=IDD_SAVE_AGENT_CFG (English (U.S.))
+Resource61=IDD_LASTVAL_PROP (English (U.S.))
 Resource62=IDD_EDIT_RULE_COMMENT
 Class52=CRuleSeverityDlg
 Resource63=IDD_ACTION_PROPERTIES
 Class53=CRuleAlarmDlg
 Class54=CAlarmBrowser
-Resource64=IDD_CREATE_TEMPLATE (English (U.S.))
+Resource64=IDD_ACTION_PROPERTIES (English (U.S.))
 Resource65=IDD_DCI_TRANSFORM
-Resource66=IDD_SELECT_OBJECT (English (U.S.))
-Resource67=IDA_EPP (English (U.S.))
-Resource68=IDD_EDIT_TRAP_ARG (English (U.S.))
+Resource66=IDD_GROUP_PROPERTIES (English (U.S.))
+Resource67=IDD_REMOVE_TEMPLATE
+Resource68=IDD_CREATE_NODE (English (U.S.))
 Class55=CConsolePropsGeneral
 Class56=CActionEditor
 Resource69=IDA_ACTION_EDITOR
@@ -143,18 +143,18 @@ Class58=CEditActionDlg
 Resource72=IDA_NETMAP
 Class59=CActionSelDlg
 Resource73=IDD_MIB_BROWSER
-Resource74=IDD_OBJECT_GENERAL (English (U.S.))
-Resource75=IDR_MAINFRAME (English (U.S.))
+Resource74=IDD_ABOUTBOX (English (U.S.))
+Resource75=IDD_OBJECT_VPNC_GENERAL (English (U.S.))
 Resource76=IDD_USER_PROPERTIES
 Class60=CCreateObjectDlg
 Class61=CCreateContainerDlg
 Resource77=IDR_MAINFRAME
 Class62=CCreateNodeDlg
-Resource78=IDD_USER_PROPERTIES (English (U.S.))
-Resource79=IDD_OBJECT_RELATIONS (English (U.S.))
-Resource80=IDA_LAST_VALUES (English (U.S.))
+Resource78=IDD_OBJECT_CAPS (English (U.S.))
+Resource79=IDD_SELECT_INTERNAL_ITEM (English (U.S.))
+Resource80=IDA_NETMAP (English (U.S.))
 Class63=CDCITransformPage
-Resource81=IDD_DCI_THRESHOLDS (English (U.S.))
+Resource81=IDD_SELECT_USER (English (U.S.))
 Class64=CPollNodeDlg
 Resource82=IDD_POLL_NODE (English (U.S.))
 Class65=CNodePoller
@@ -179,74 +179,74 @@ Class72=CGraphPropDlg
 Class73=CColorSelector
 Class74=CPackageMgr
 Resource94=IDD_GROUP_PROPERTIES
-Resource95=IDA_NETMAP (English (U.S.))
-Resource96=IDD_NEW_ACTION (English (U.S.))
-Resource97=IDD_OBJECT_NODE_GENERAL (English (U.S.))
-Resource98=IDD_EDIT_RULE_SEVERITY (English (U.S.))
-Resource99=IDD_OBJECT_NETSRV_GENERAL (English (U.S.))
-Resource100=IDD_CREATE_NETSRV (English (U.S.))
-Resource101=IDD_EDIT_VARIABLE (English (U.S.))
-Resource102=IDD_DATA_QUERY (English (U.S.))
-Resource103=IDD_DCI_COLLECTION (English (U.S.))
-Resource104=IDD_CREATE_TG (English (U.S.))
-Resource105=IDD_EDIT_RULE_ALARM (English (U.S.))
-Resource106=IDD_OBJECT_CAPS (English (U.S.))
-Resource107=IDD_EDIT_RULE_COMMENT (English (U.S.))
+Resource95=IDD_DCI_SCHEDULE (English (U.S.))
+Resource96=IDD_EDIT_RULE_COMMENT (English (U.S.))
+Resource97=IDA_SERVER_CFG_EDITOR (English (U.S.))
+Resource98=IDD_THRESHOLD (English (U.S.))
+Resource99=IDD_EDIT_TRAP (English (U.S.))
+Resource100=IDD_DATA_QUERY (English (U.S.))
+Resource101=IDD_OBJECT_RELATIONS (English (U.S.))
+Resource102=IDD_SELECT_ACTION (English (U.S.))
+Resource103=IDD_OBJECT_SECURITY (English (U.S.))
+Resource104=IDD_NEW_ACTION (English (U.S.))
+Resource105=IDD_MIB_BROWSER (English (U.S.))
+Resource106=IDA_AGENT_CFG_EDITOR (English (U.S.))
+Resource107=IDD_SET_PASSWORD (English (U.S.))
 Class75=CInternalItemSelDlg
-Resource108=IDD_CREATE_VPNC (English (U.S.))
+Resource108=IDD_DESKTOP_SAVE_AS (English (U.S.))
 Class76=CAgentParamSelDlg
-Resource109=IDD_OBJECT_PRESENTATION (English (U.S.))
+Resource109=IDD_DCI_THRESHOLDS (English (U.S.))
 Class77=CInputBox
-Resource110=IDD_INPUT_BOX (English (U.S.))
+Resource110=IDD_CREATE_TEMPLATE (English (U.S.))
 Class78=CCreateNetSrvDlg
-Resource111=IDD_SELECT_INTERNAL_ITEM (English (U.S.))
+Resource111=IDD_DCI_TRANSFORM (English (U.S.))
 Class79=CNetSrvPropsGeneral
-Resource112=IDA_ALARM_BROWSER (English (U.S.))
+Resource112=IDD_CHANGE_IP
 Class80=CNodePropsPolling
 Class81=CDeploymentView
 Class82=CLastValuesView
 Class83=CValueList
-Resource113=IDA_DC_EDITOR (English (U.S.))
+Resource113=IDA_TRAP_EDITOR (English (U.S.))
 Class84=CObjectPropsRelations
-Resource114=IDD_NEW_USER (English (U.S.))
+Resource114=IDD_OBJECT_NODE_GENERAL (English (U.S.))
 Class85=CSaveDesktopDlg
-Resource115=IDD_SELECT_AGENT_PARAM (English (U.S.))
+Resource115=IDD_CREATE_TG (English (U.S.))
 Class86=CGraphSettingsPage
-Resource116=IDD_REMOVE_TEMPLATE
+Resource116=IDD_DCI_DATA_EXPORT (English (U.S.))
 Class87=CGraphDataPage
-Resource117=IDA_EVENT_EDITOR (English (U.S.))
+Resource117=IDR_MAINFRAME (English (U.S.))
 Class88=CRemoveTemplateDlg
-Resource118=IDD_LOGIN (English (U.S.))
+Resource118=IDA_PACKAGE_MGR (English (U.S.))
 Class89=CAddrChangeDlg
-Resource119=IDD_DCI_TRANSFORM (English (U.S.))
+Resource119=IDD_CP_GENERAL (English (U.S.))
 Class90=CLastValuesPropDlg
 Class91=CAgentCfgEditor
-Resource120=IDD_SELECT_ACTION (English (U.S.))
+Resource120=IDD_OBJECT_PRESENTATION (English (U.S.))
 Class92=CDataExportDlg
 Class93=CServerCfgEditor
-Resource121=IDA_MDI_DEFAULT (English (U.S.))
-Resource122=IDD_REQUEST_PROCESSING (English (U.S.))
+Resource121=IDD_EDIT_IP_SUBNET (English (U.S.))
+Resource122=IDA_DC_EDITOR (English (U.S.))
 Class94=CEditVariableDlg
-Resource123=IDD_DESKTOP_SAVE_AS (English (U.S.))
+Resource123=IDD_SELECT_AGENT_PARAM (English (U.S.))
 Class95=CCreateVPNConnDlg
-Resource124=IDD_CREATE_CONTAINER (English (U.S.))
+Resource124=IDD_EDIT_RULE_SEVERITY (English (U.S.))
 Class96=CVPNCPropsGeneral
-Resource125=IDA_ACTION_EDITOR (English (U.S.))
+Resource125=IDA_MDI_DEFAULT (English (U.S.))
 Class97=CEditSubnetDlg
-Resource126=IDD_CP_GENERAL (English (U.S.))
-Resource127=IDA_OBJECT_BROWSER (English (U.S.))
+Resource126=IDD_SELECT_OBJECT (English (U.S.))
+Resource127=IDD_SAVE_AGENT_CFG (English (U.S.))
 Class98=CModifiedAgentCfgDlg
 Class99=CSimpleSplitter
 Class100=CAdvSplitter
-Resource128=IDD_EDIT_EVENT (English (U.S.))
+Resource128=IDA_LAST_VALUES (English (U.S.))
 Class101=CTableView
 Class102=CWaitView
 Class103=CWebBrowser
 Class104=CSyslogBrowser
 Class105=CLPPList
-Resource129=IDD_THRESHOLD (English (U.S.))
+Resource129=IDD_NEW_USER (English (U.S.))
 Class106=CDCISchedulePage
-Resource130=IDD_CREATE_NODE (English (U.S.))
+Resource130=IDD_EDIT_RULE_ALARM (English (U.S.))
 Class107=CObjectPropsStatus
 Resource131=IDD_OBJECT_STATUS (English (U.S.))
 
index 874b978..c8cc12c 100644 (file)
@@ -1054,6 +1054,19 @@ void CConsoleApp::ObjectProperties(DWORD dwObjectId)
           (pObject->iClass != OBJECT_TEMPLATEGROUP) &&
           (pObject->iClass != OBJECT_TEMPLATE))
       {
+         wndStatus.m_iCalcAlg = pObject->iStatusCalcAlg;
+         wndStatus.m_iPropAlg = pObject->iStatusPropAlg;
+         wndStatus.m_iRelChange = pObject->iStatusShift;
+         wndStatus.m_iFixedStatus = pObject->iFixedStatus;
+         wndStatus.m_iStatusTranslation1 = pObject->iStatusTrans[0];
+         wndStatus.m_iStatusTranslation2 = pObject->iStatusTrans[1];
+         wndStatus.m_iStatusTranslation3 = pObject->iStatusTrans[2];
+         wndStatus.m_iStatusTranslation4 = pObject->iStatusTrans[3];
+         wndStatus.m_dSingleThreshold = (double)pObject->iStatusSingleTh / 100;
+         wndStatus.m_dThreshold1 = (double)pObject->iStatusThresholds[0] / 100;
+         wndStatus.m_dThreshold2 = (double)pObject->iStatusThresholds[1] / 100;
+         wndStatus.m_dThreshold3 = (double)pObject->iStatusThresholds[2] / 100;
+         wndStatus.m_dThreshold4 = (double)pObject->iStatusThresholds[3] / 100;
          wndPropSheet.AddPage(&wndStatus);
       }
 
index f2e8192..f14bba7 100644 (file)
@@ -72,6 +72,16 @@ void EnableDlgItem(CDialog *pWnd, int nCtrl, BOOL bEnable)
 
 
 //
+// Check if dialog button is checked
+//
+
+BOOL IsButtonChecked(CDialog *pWnd, int nCtrl)
+{
+   return pWnd->SendDlgItemMessage(nCtrl, BM_GETCHECK) == BST_CHECKED;
+}
+
+
+//
 // Select given item in list view
 // Will remove selection from all currently selected items and set
 // LVIS_SELECTED and LVIS_FOCUSED flags to specified item
index f59a6d2..cc93c28 100644 (file)
@@ -1,7 +1,7 @@
 /* 
 ** NetXMS - Network Management System
 ** Client Library
-** Copyright (C) 2004 Victor Kirhenshtein
+** Copyright (C) 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
@@ -191,7 +191,7 @@ static NXC_OBJECT *NewObjectFromMsg(CSCPMessage *pMsg)
    pObject->iStatusCalcAlg = (int)pMsg->GetVariableShort(VID_STATUS_CALCULATION_ALG);
    pObject->iStatusPropAlg = (int)pMsg->GetVariableShort(VID_STATUS_PROPAGATION_ALG);
    pObject->iFixedStatus = (int)pMsg->GetVariableShort(VID_FIXED_STATUS);
-   pObject->iStatusShift = (int)pMsg->GetVariableShort(VID_STATUS_SHIFT);
+   pObject->iStatusShift = pMsg->GetVariableShortAsInt32(VID_STATUS_SHIFT);
    pObject->iStatusTrans[0] = (int)pMsg->GetVariableShort(VID_STATUS_TRANSLATION_1);
    pObject->iStatusTrans[1] = (int)pMsg->GetVariableShort(VID_STATUS_TRANSLATION_2);
    pObject->iStatusTrans[2] = (int)pMsg->GetVariableShort(VID_STATUS_TRANSLATION_3);
index f17aae1..c54d593 100644 (file)
@@ -29,6 +29,8 @@
 
 NetObj::NetObj()
 {
+   int i;
+
    m_dwRefCount = 0;
    m_mutexData = MutexCreate();
    m_mutexRefCount = MutexCreate();
@@ -51,6 +53,14 @@ NetObj::NetObj()
    m_pPollRequestor = NULL;
    m_iStatusCalcAlg = SA_CALCULATE_DEFAULT;
    m_iStatusPropAlg = SA_PROPAGATE_DEFAULT;
+   m_iFixedStatus = STATUS_WARNING;
+   m_iStatusShift = 0;
+   m_iStatusSingleThreshold = 75;
+   for(i = 0; i < 4; i++)
+   {
+      m_iStatusTranslation[i] = i + 1;
+      m_iStatusThresholds[i] = 80 - i * 20;
+   }
 }
 
 
@@ -439,7 +449,7 @@ const char *NetObj::ParentList(char *szBuffer)
 // Calculate status for compound object based on childs' status
 //
 
-void NetObj::CalculateCompoundStatus(void)
+void NetObj::CalculateCompoundStatus(BOOL bForcedRecalc)
 {
    DWORD i;
    int iMostCriticalAlarm, iMostCriticalStatus, iCount, iStatusAlg;
@@ -535,7 +545,7 @@ void NetObj::CalculateCompoundStatus(void)
       UnlockData();
 
       // Cause parent object(s) to recalculate it's status
-      if (iOldStatus != m_iStatus)
+      if ((iOldStatus != m_iStatus) || bForcedRecalc)
       {
          LockParentList(FALSE);
          for(i = 0; i < m_dwParentCount; i++)
@@ -701,6 +711,8 @@ void NetObj::Modify(void)
 
 DWORD NetObj::ModifyFromMessage(CSCPMessage *pRequest, BOOL bAlreadyLocked)
 {
+   BOOL bRecalcStatus = FALSE;
+
    if (!bAlreadyLocked)
       LockData();
 
@@ -718,7 +730,7 @@ DWORD NetObj::ModifyFromMessage(CSCPMessage *pRequest, BOOL bAlreadyLocked)
       m_iStatusCalcAlg = (int)pRequest->GetVariableShort(VID_STATUS_CALCULATION_ALG);
       m_iStatusPropAlg = (int)pRequest->GetVariableShort(VID_STATUS_PROPAGATION_ALG);
       m_iFixedStatus = (int)pRequest->GetVariableShort(VID_FIXED_STATUS);
-      m_iStatusShift = (int)pRequest->GetVariableShort(VID_STATUS_SHIFT);
+      m_iStatusShift = pRequest->GetVariableShortAsInt32(VID_STATUS_SHIFT);
       m_iStatusTranslation[0] = (int)pRequest->GetVariableShort(VID_STATUS_TRANSLATION_1);
       m_iStatusTranslation[1] = (int)pRequest->GetVariableShort(VID_STATUS_TRANSLATION_2);
       m_iStatusTranslation[2] = (int)pRequest->GetVariableShort(VID_STATUS_TRANSLATION_3);
@@ -728,6 +740,7 @@ DWORD NetObj::ModifyFromMessage(CSCPMessage *pRequest, BOOL bAlreadyLocked)
       m_iStatusThresholds[1] = (int)pRequest->GetVariableShort(VID_STATUS_THRESHOLD_2);
       m_iStatusThresholds[2] = (int)pRequest->GetVariableShort(VID_STATUS_THRESHOLD_3);
       m_iStatusThresholds[3] = (int)pRequest->GetVariableShort(VID_STATUS_THRESHOLD_4);
+      bRecalcStatus = TRUE;
    }
 
    // Change object's ACL
@@ -748,6 +761,9 @@ DWORD NetObj::ModifyFromMessage(CSCPMessage *pRequest, BOOL bAlreadyLocked)
    Modify();
    UnlockData();
 
+   if (bRecalcStatus)
+      CalculateCompoundStatus(TRUE);
+
    return RCC_SUCCESS;
 }
 
@@ -1015,10 +1031,10 @@ int NetObj::PropagatedStatus(void)
             iStatus = m_iStatus;
             break;
          case SA_PROPAGATE_FIXED:
-            iStatus = (m_iStatus < STATUS_UNKNOWN) ? m_iFixedStatus : m_iStatus;
+            iStatus = ((m_iStatus > STATUS_NORMAL) && (m_iStatus < STATUS_UNKNOWN)) ? m_iFixedStatus : m_iStatus;
             break;
          case SA_PROPAGATE_RELATIVE:
-            if (m_iStatus < STATUS_UNKNOWN)
+            if ((m_iStatus > STATUS_NORMAL) && (m_iStatus < STATUS_UNKNOWN))
             {
                iStatus = m_iStatus + m_iStatusShift;
                if (iStatus < 0)
index 6f82cee..05790cc 100644 (file)
@@ -1043,10 +1043,10 @@ int DefaultPropagatedStatus(int iObjectStatus)
          iStatus = iObjectStatus;
          break;
       case SA_PROPAGATE_FIXED:
-         iStatus = (iObjectStatus < STATUS_UNKNOWN) ? m_iFixedStatus : iObjectStatus;
+         iStatus = ((iObjectStatus > STATUS_NORMAL) && (iObjectStatus < STATUS_UNKNOWN)) ? m_iFixedStatus : iObjectStatus;
          break;
       case SA_PROPAGATE_RELATIVE:
-         if (iObjectStatus < STATUS_UNKNOWN)
+         if ((iObjectStatus > STATUS_NORMAL) && (iObjectStatus < STATUS_UNKNOWN))
          {
             iStatus = iObjectStatus + m_iStatusShift;
             if (iStatus < 0)
index f995c7e..3c2987b 100644 (file)
@@ -253,7 +253,7 @@ public:
    void SetName(char *pszName) { nx_strncpy(m_szName, pszName, MAX_OBJECT_NAME); Modify(); }
    void ResetStatus(void) { m_iStatus = STATUS_UNKNOWN; Modify(); }
 
-   virtual void CalculateCompoundStatus(void);
+   virtual void CalculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 
    virtual void CreateMessage(CSCPMessage *pMsg);
    virtual DWORD ModifyFromMessage(CSCPMessage *pRequest, BOOL bAlreadyLocked = FALSE);