226 lines
7.4 KiB
C
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
|