2025-04-27 07:49:33 -04:00

131 lines
3.2 KiB
C++

// Copyright (c) 1999-2001 Microsoft Corporation, All Rights Reserved
#ifndef _RMON_H_
#define _RMON_H_
class RmonConfigData
{
private:
ULONG m_pollPeriod;
ULONG m_initialPeriod;
ULONG m_dataOffset;
ULONG m_dataRetry;
ULONG m_nsize;
ULONG m_index;
BSTR m_statstype;
public:
RmonConfigData(const ULONG poll = 5, const ULONG firstpoll = 1, const ULONG data = 50,
const ULONG dataretry = 50, const ULONG size = 10, BSTR stats = NULL, const ULONG index = 0);
ULONG GetPollPeriod() { return m_pollPeriod; }
ULONG GetInitialPeriod() { return m_initialPeriod; }
ULONG GetPollPeriodSecs() { return (m_pollPeriod/1000); }
ULONG GetInitialPeriodSecs() { return (m_initialPeriod/1000); }
ULONG GetDataOffset() { return m_dataOffset; }
ULONG GetDataRetry() { return m_dataRetry; }
ULONG GetNSize() { return m_nsize; }
ULONG GetIndex() { return m_index; }
BSTR GetStatsType() { return m_statstype; }
void SetPollPeriod(ULONG val) { m_pollPeriod = (val*1000); }
void SetInitialPeriod(ULONG val) { m_initialPeriod = (val*1000); }
void SetDataOffset(ULONG val) { m_dataOffset = (val*100); }
void SetDataRetry(ULONG val) { m_dataRetry = (val*100); }
void SetNSize(ULONG val) { m_nsize = val; }
void SetIndex(ULONG val) { m_index = val; }
void SetStatsType(BSTR val);
~RmonConfigData() { SetStatsType(NULL); }
};
class TopNCache : public CMap< ULONG, ULONG, IWbemClassObject*, IWbemClassObject* >
{
private:
ULONG HashKey(ULONG key) { return key; }
public:
TopNCache() { InitHashTable(113); }
};
class TopNTableStore
{
private:
CCriticalSection m_Lock;
public:
TopNCache* m_pTopNCache;
TopNTableStore() { m_pTopNCache = new TopNCache; }
BOOL Lock() { return m_Lock.Lock(); }
BOOL Unlock() { return m_Lock.Unlock(); }
static ULONG GetKey(IWbemClassObject *obj);
static ULONG GetKey(ULONG topNReport, ULONG topNIndex);
~TopNTableStore() { delete m_pTopNCache; }
};
class TopNTableProv
{
private:
TopNTableStore m_CachedResults;
ULONG m_CacheAge;
RmonConfigData m_Confdata;
IWbemClassObject* m_pObjProv;
BOOL m_IsValid;
IWbemServices* m_wbemServ;
ProviderStore* m_timer;
BOOL m_Strobing;
ULONG m_StrobeCount;
SnmpEventObject* m_FirstTimeWait;
enum Status
{
CREATE_ENUM_STATUS = 0,
POLL_ENUM_STATUS,
RETRY_ENUM_STATUS
} m_Status;
BOOL InitializeRmon();
BOOL GetRmonConfData();
BOOL GetWBEMEnumerator(IEnumWbemClassObject **ppEnum, wchar_t *strclass);
BOOL CopyEntry(IWbemClassObject** pDest, IWbemClassObject* pSource);
void GetData(IEnumWbemClassObject* pEnum, IWbemClassObject* psrcObj);
BOOL DeleteRmonConfiguration();
LONG SetRmonConfiguration();
void ResetRmonDuration();
BOOL AddHostProperties(IWbemClassObject* pDest, ULONG topNR, const CString& addrStr);
static BOOL GetWBEMProperty(IWbemClassObject* obj, VARIANT& val, wchar_t* prop);
static BOOL PutWBEMProperty(IWbemClassObject* obj, VARIANT& val, wchar_t* prop);
public:
TopNTableProv(IWbemServices* wbemServ, ProviderStore& timer);
void Poll();
void RetryPoll();
void Strobe();
BOOL IsValid() { return m_IsValid; }
TopNCache *LockTopNCache () ;
void UnlockTopNCache () ;
~TopNTableProv();
};
#endif //_RMON_H_