windows-nt/Source/XPSP1/NT/admin/hmonitor/hmagent/threshld.h
2020-09-26 16:20:57 +08:00

226 lines
7.4 KiB
C++

//***************************************************************************
//
// THRESHLD.H
//
// Module: HEALTHMON SERVER AGENT
//
// Purpose: CThreshold class to do thresholding on a CDatapoint class.
// The CDatapoint class contains the WMI instance, and the CThreshold
// class says what ptoperty to threshold against, and how.
//
// Copyright (c)1999 Microsoft Corporation, All Rights Reserved
//
//***************************************************************************
#if !defined( __THRESHLD_H )
#define __THRESHLD_H
#include <wbemcli.h>
#include <vector>
#include "global.h"
#include "base.h"
// Add support for UINT64 and other similar datatypes.
// Need to use a union for the values collecting.
union hm_datatypes {
long lValue;
unsigned long ulValue;
float fValue;
double dValue;
__int64 i64Value;
unsigned __int64 ui64Value;
// LPTSTR lpstr_value;
// LPTSTR date_value;
// unsigned char bool_value;
// short int int_value;
};
//XXXTake out the kludge in the Threshold::CrossTest and RearmTest that was converting all numeric
//XXXstrings to numbers to do arithemetic compare instead of lexical.
//XXXIn the StoreValues code use the CIMTYPE that get from the Get call directly, as
//XXXwe do now in the ppn property.
typedef struct _tag_VALStruct
{
union hm_datatypes value;
} VALSTRUCT, *PVALSTRUCT;
typedef std::vector<VALSTRUCT, std::allocator<VALSTRUCT> > VALLIST;
typedef struct _tag_INSTStruct
{
LPTSTR szInstanceID; // Name of instance
LPTSTR szCurrValue;
union hm_datatypes currValue;
union hm_datatypes minValue;
union hm_datatypes maxValue;
union hm_datatypes avgValue;
BOOL bNull;
BOOL bNeeded;
VALLIST valList;
} INSTSTRUCT, *PINSTSTRUCT;
typedef std::vector<INSTSTRUCT, std::allocator<INSTSTRUCT> > INSTLIST;
typedef struct _tag_PNStruct
{
LPTSTR szPropertyName;
CIMTYPE type;
// BOOL bNull;
// BOOL bNeeded;
INSTLIST instList;
int iRefCount;
} PNSTRUCT;
typedef std::vector<PNSTRUCT, std::allocator<PNSTRUCT> > PNLIST;
typedef struct _tag_IRSStruct
{
LPTSTR szStatusGUID;
TCHAR szDTTime[512];
TCHAR szTime[512];
LPTSTR szInstanceID; // Name of instance
long lPrevState;
long lCurrState;
long lCrossCountTry;
// union hm_datatypes prevValue;
// union hm_datatypes prevPrevValue;
long lPrevValue;
unsigned long ulPrevValue;
float fPrevValue;
double dPrevValue;
__int64 i64PrevValue;
unsigned __int64 ui64PrevValue;
long lPrevPrevValue;
unsigned long ulPrevPrevValue;
float fPrevPrevValue;
double dPrevPrevValue;
__int64 i64PrevPrevValue;
unsigned __int64 ui64PrevPrevValue;
BOOL bNeeded;
int unknownReason;
} IRSSTRUCT, *PIRSSTRUCT;
typedef std::vector<IRSSTRUCT, std::allocator<IRSSTRUCT> > IRSLIST;
typedef struct _tag_ACTUALINSTStruct
{
LPTSTR szInstanceID; // Name of instance
IWbemClassObject* pInst;
BOOL bNeeded;
TCHAR szDTTime[512];
TCHAR szTime[512];
} ACTUALINSTSTRUCT, *PACTUALINSTSTRUCT;
typedef std::vector<ACTUALINSTSTRUCT, std::allocator<ACTUALINSTSTRUCT> > ACTUALINSTLIST;
class CDataCollector; // Forward declaration
class CThreshold : public CBase
{
public:
CThreshold();
~CThreshold();
CDataCollector *m_pParentDC;
long m_lPrevState;
// long m_lCurrState;
// long m_lViolationValue;
// IWbemServices* m_pIWbemServices;
LPTSTR m_szParentObjPath;
// long m_lNameRID;
LPTSTR m_szDescription;
// long m_lDescriptionRID;
// LPTSTR m_szResourceDLL;
long m_lID;
LPTSTR m_szPropertyName;
BOOL m_bUseAverage;
BOOL m_bUseDifference;
BOOL m_bUseSum;
// HM_CONDITION m_lTestCondition;
long m_lTestCondition;
LPTSTR m_szCompareValue;
long m_lCompareValue;
unsigned long m_ulCompareValue;
float m_fCompareValue;
double m_dCompareValue;
__int64 m_i64CompareValue;
unsigned __int64 m_ui64CompareValue;
// union hm_datatypes m_compareValue;
long m_lThresholdDuration;
long m_lViolationToState;
LPTSTR m_szCreationDate;
LPTSTR m_szLastUpdate;
// LPTSTR m_szMessage;
// long m_lMessageRID;
// LPTSTR m_szResetMessage;
// long m_lResetMessageRID;
long m_lStartupDelay;
//XXX int m_iActiveDays;
//XXX long m_lBeginHourTime;
//XXX long m_lBeginMinuteTime;
//XXX long m_lEndHourTime;
//XXX long m_lEndMinuteTime;
BOOL m_bEnabled;
BOOL m_bParentEnabled; // So we can transfer down the hierarchy the state.
BOOL m_bParentScheduledOut;
TCHAR m_szDTTime[512];
TCHAR m_szTime[512];
IRSLIST m_irsList;
long m_lNumberNormals;
long m_lNumberWarnings;
long m_lNumberCriticals;
long m_lNumberChanges;
BOOL m_bValidLoad;
//
// STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC
//
static void ThresholdTerminationCleanup(void);
static void GetLocal(void);
static BOOL mg_bEnglishCompare;
HRESULT LoadInstanceFromMOF(IWbemClassObject* pObj, CDataCollector *pParentDC, LPTSTR pszParentObjPath, BOOL bModifyPass=FALSE);
// return polling interval in milliseconds
BOOL OnAgentInterval(ACTUALINSTLIST *actualInstList, PNSTRUCT *ppn, BOOL bRequireReset);
BOOL FireEvent(BOOL bForce);
BOOL FireInstanceEvents(ACTUALINSTLIST *actualInstList, PNSTRUCT *ppn);
LPTSTR GetPropertyName(void);
BOOL CrossTest(PNSTRUCT *ppn, IRSSTRUCT *pirs, LPTSTR szTestValue, union hm_datatypes testValue, INSTSTRUCT *pinst);
BOOL RearmTest(PNSTRUCT *ppn, IRSSTRUCT *pirs, LPTSTR szTestValue, union hm_datatypes testValue, INSTSTRUCT *pinst);
HRESULT GetHMThresholdStatusInstance(IWbemClassObject** pInstance, BOOL bEventBased);
// BOOL GetHMThresholdStatusInstanceInstance(ACTUALINSTSTRUCT *pActualInst, PNSTRUCT *ppn, INSTSTRUCT *pinst, IRSSTRUCT *pirs, IWbemClassObject** ppIRSInstance, BOOL bChangesOnly, BOOL bEventBased);
HRESULT SendHMThresholdStatusInstances(IWbemObjectSink* pSink);
HRESULT SendHMThresholdStatusInstance(IWbemObjectSink* pSink, LPTSTR pszGUID);
// HRESULT SendHMThresholdStatusInstanceInstances(ACTUALINSTLIST *actualInstList, PNSTRUCT *ppn, IWbemObjectSink* pSink);
// HRESULT SendHMThresholdStatusInstanceInstance(ACTUALINSTLIST *actualInstList, PNSTRUCT *ppn, IWbemObjectSink* pSink, LPTSTR pszGUID);
long GetCurrState(void);
HRESULT FindAndModThreshold(BSTR szGUID, IWbemClassObject* pObj);
LPTSTR GetGUID(void);
BOOL SetCurrState(HM_STATE state, BOOL bForce = FALSE, int reason = 0);
BOOL SetPrevState(HM_STATE state);
BOOL SetParentEnabledFlag(BOOL bEnabled);
BOOL SetParentScheduledOutFlag(BOOL bScheduledOut);
BOOL SetBackPrev(PNSTRUCT *ppn);
BOOL ClearInstList(void);
BOOL ResetResetThreshold(void);
BOOL GetChange(void);
BOOL GetEnabledChange(void);
HRESULT AddInstance(LPTSTR pszID);
// BOOL FormatMessages(IWbemClassObject* pObj);
BOOL FormatMessage(IWbemClassObject* pIRSInstance, IWbemClassObject *pEmbeddedInstance);
//XXX BOOL Enable(BOOL bEnable);
BOOL Cleanup(BOOL bSavePrevSettings);
BOOL Init(void);
BOOL DeleteThresholdConfig(BOOL bDeleteAssocOnly=FALSE);
HRESULT Copy(ILIST* pConfigList, LPTSTR pszOldParentGUID, LPTSTR pszNewParentGUID);
CBase *FindImediateChildByName(LPTSTR pszChildName);
BOOL GetNextChildName(LPTSTR pszChildName, LPTSTR pszOutName);
CBase *FindPointerFromName(LPTSTR pszChildName);
// BOOL ModifyAssocForMove(CBase *pNewParentBase);
BOOL ReceiveNewChildForMove(CBase *pBase);
BOOL DeleteChildFromList(LPTSTR pszGUID);
long PassBackStateIfChangedPerInstance(LPTSTR pszInstName);
long PassBackWorstStatePerInstance(LPTSTR pszInstName);
BOOL SendReminderActionIfStateIsSame(IWbemObjectSink* pActionEventSink, IWbemObjectSink* pActionTriggerEventSink, IWbemClassObject* pActionInstance, IWbemClassObject* pActionTriggerInstance, unsigned long ulTriggerStates);
BOOL SkipClean(void);
HRESULT CheckForBadLoad(void);
};
#endif // __THRESHLD_H