windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/cmp/asp/perfdata.h
2020-09-26 16:20:57 +08:00

361 lines
9.3 KiB
C++

/*===================================================================
Microsoft Denali
Microsoft Confidential.
Copyright 1996 Microsoft Corporation. All Rights Reserved.
Component: Main
File: perfdata.h
Owner: DmitryR
PERFMON related data in asp.dll -- header file
===================================================================*/
#ifndef _ASP_PERFDATA_H
#define _ASP_PERFDATA_H
#ifndef PERF_DISABLE
#include "perfdef.h"
#include "denali.h"
// Counter offsets in the array
#define ID_DEBUGDOCREQ 0
#define ID_REQERRRUNTIME 1
#define ID_REQERRPREPROC 2
#define ID_REQERRCOMPILE 3
#define ID_REQERRORPERSEC 4
#define ID_REQTOTALBYTEIN 5
#define ID_REQTOTALBYTEOUT 6
#define ID_REQEXECTIME 7
#define ID_REQWAITTIME 8
#define ID_REQCOMFAILED 9
#define ID_REQBROWSEREXEC 10
#define ID_REQFAILED 11
#define ID_REQNOTAUTH 12
#define ID_REQNOTFOUND 13
#define ID_REQCURRENT 14
#define ID_REQREJECTED 15
#define ID_REQSUCCEEDED 16
#define ID_REQTIMEOUT 17
#define ID_REQTOTAL 18
#define ID_REQPERSEC 19
#define ID_SCRIPTFREEENG 20
#define ID_SESSIONLIFETIME 21
#define ID_SESSIONCURRENT 22
#define ID_SESSIONTIMEOUT 23
#define ID_SESSIONSTOTAL 24
#define ID_TEMPLCACHE 25
#define ID_TEMPLCACHEHITS 26
#define ID_TEMPLCACHETRYS 27
#define ID_TEMPLFLUSHES 28
#define ID_TRANSABORTED 29
#define ID_TRANSCOMMIT 30
#define ID_TRANSPENDING 31
#define ID_TRANSTOTAL 32
#define ID_TRANSPERSEC 33
#define ID_MEMORYTEMPLCACHE 34
#define ID_MEMORYTEMPLCACHEHITS 35
#define ID_MEMORYTEMPLCACHETRYS 36
/*===================================================================
CPerfData -- PERFMON data for ASP
CPerfProcBlock
+ macros to update counters
+ clsid to remember
+ place to update counters before perfmon inited
===================================================================*/
class CPerfData : public CPerfProcBlock
{
private:
// Initial counter values (gathered when uninit)
DWORD m_rgdwInitCounters[C_PERF_PROC_COUNTERS];
// CLSID
DWORD m_fValid : 1;
CLSID m_ClsId;
public:
inline CPerfData()
: m_fValid(FALSE)
{
memset(m_rgdwInitCounters, 0, CB_COUNTERS);
}
inline ~CPerfData()
{
}
inline HRESULT Init(const CLSID &ClsId)
{
HRESULT hr = InitForThisProcess(ClsId, m_rgdwInitCounters);
if (SUCCEEDED(hr))
{
m_ClsId = ClsId;
m_fValid = TRUE;
}
return hr;
}
inline HRESULT UnInit()
{
m_fValid = FALSE;
return CPerfProcBlock::UnInit();
}
inline BOOL FValid()
{
return m_fValid;
}
inline const CLSID & ClsId()
{
return m_ClsId;
}
// helper inline to get counter address as DWORD *
inline DWORD *PDWCounter(int i)
{
return m_fInited ? &(m_pData->m_rgdwCounters[i])
: &(m_rgdwInitCounters[i]);
}
// helper inline to get counter address as LPLONG
inline LPLONG PLCounter(int i)
{
return (LPLONG)PDWCounter(i);
}
// Inlines to change individual counters --------------
inline void Incr_DEBUGDOCREQ()
{
InterlockedIncrement(PLCounter(ID_DEBUGDOCREQ));
}
inline void Incr_REQERRRUNTIME()
{
InterlockedIncrement(PLCounter(ID_REQERRRUNTIME));
}
inline void Incr_REQERRPREPROC()
{
InterlockedIncrement(PLCounter(ID_REQERRPREPROC));
}
inline void Incr_REQERRCOMPILE()
{
InterlockedIncrement(PLCounter(ID_REQERRCOMPILE));
}
inline void Incr_REQERRORPERSEC()
{
InterlockedIncrement(PLCounter(ID_REQERRORPERSEC));
}
inline void Add_REQTOTALBYTEIN(DWORD dw)
{
EnterCriticalSection(&m_csReqLock);
*PDWCounter(ID_REQTOTALBYTEIN) += dw;
LeaveCriticalSection(&m_csReqLock);
}
inline void Add_REQTOTALBYTEOUT(DWORD dw)
{
EnterCriticalSection(&m_csReqLock);
*PDWCounter(ID_REQTOTALBYTEOUT) += dw;
LeaveCriticalSection(&m_csReqLock);
}
inline void Set_REQEXECTIME(DWORD dw)
{
InterlockedExchange(PLCounter(ID_REQEXECTIME), (LONG)dw);
}
inline void Set_REQWAITTIME(DWORD dw)
{
InterlockedExchange(PLCounter(ID_REQWAITTIME), (LONG)dw);
}
inline void Incr_REQCOMFAILED()
{
InterlockedIncrement(PLCounter(ID_REQCOMFAILED));
}
inline void Incr_REQBROWSEREXEC()
{
InterlockedIncrement(PLCounter(ID_REQBROWSEREXEC));
}
inline void Decr_REQBROWSEREXEC()
{
InterlockedDecrement(PLCounter(ID_REQBROWSEREXEC));
}
inline void Incr_REQFAILED()
{
InterlockedIncrement(PLCounter(ID_REQFAILED));
}
inline void Incr_REQNOTAUTH()
{
InterlockedIncrement(PLCounter(ID_REQNOTAUTH));
}
inline void Incr_REQNOTFOUND()
{
InterlockedIncrement(PLCounter(ID_REQNOTFOUND));
}
inline DWORD Incr_REQCURRENT()
{
return InterlockedIncrement(PLCounter(ID_REQCURRENT));
}
inline void Decr_REQCURRENT()
{
InterlockedDecrement(PLCounter(ID_REQCURRENT));
}
inline void Incr_REQREJECTED()
{
InterlockedIncrement(PLCounter(ID_REQREJECTED));
}
inline void Incr_REQSUCCEEDED()
{
InterlockedIncrement(PLCounter(ID_REQSUCCEEDED));
}
inline void Incr_REQTIMEOUT()
{
InterlockedIncrement(PLCounter(ID_REQTIMEOUT));
}
inline void Incr_REQTOTAL()
{
InterlockedIncrement(PLCounter(ID_REQTOTAL));
}
inline void Incr_REQPERSEC()
{
InterlockedIncrement(PLCounter(ID_REQPERSEC));
}
inline void Incr_SCRIPTFREEENG()
{
InterlockedIncrement(PLCounter(ID_SCRIPTFREEENG));
}
inline void Decr_SCRIPTFREEENG()
{
InterlockedDecrement(PLCounter(ID_SCRIPTFREEENG));
}
inline void Set_SESSIONLIFETIME(DWORD dw)
{
InterlockedExchange(PLCounter(ID_SESSIONLIFETIME), (LONG)dw);
}
inline void Incr_SESSIONCURRENT()
{
InterlockedIncrement(PLCounter(ID_SESSIONCURRENT));
}
inline void Decr_SESSIONCURRENT()
{
InterlockedDecrement(PLCounter(ID_SESSIONCURRENT));
}
inline void Incr_SESSIONTIMEOUT()
{
InterlockedIncrement(PLCounter(ID_SESSIONTIMEOUT));
}
inline void Incr_SESSIONSTOTAL()
{
InterlockedIncrement(PLCounter(ID_SESSIONSTOTAL));
}
inline void Incr_TEMPLCACHE()
{
InterlockedIncrement(PLCounter(ID_TEMPLCACHE));
}
inline void Decr_TEMPLCACHE()
{
InterlockedDecrement(PLCounter(ID_TEMPLCACHE));
}
inline void Zero_TEMPLCACHE()
{
InterlockedExchange(PLCounter(ID_TEMPLCACHE), 0);
}
inline void Incr_TEMPLCACHEHITS()
{
InterlockedIncrement(PLCounter(ID_TEMPLCACHEHITS));
}
inline void Incr_TEMPLCACHETRYS()
{
InterlockedIncrement(PLCounter(ID_TEMPLCACHETRYS));
}
inline void Incr_MEMORYTEMPLCACHE()
{
InterlockedIncrement(PLCounter(ID_MEMORYTEMPLCACHE));
}
inline void Decr_MEMORYTEMPLCACHE()
{
InterlockedDecrement(PLCounter(ID_MEMORYTEMPLCACHE));
}
inline void Zero_MEMORYTEMPLCACHE()
{
InterlockedExchange(PLCounter(ID_MEMORYTEMPLCACHE), 0);
}
inline void Incr_MEMORYTEMPLCACHEHITS()
{
InterlockedIncrement(PLCounter(ID_MEMORYTEMPLCACHEHITS));
}
inline void Incr_MEMORYTEMPLCACHETRYS()
{
InterlockedIncrement(PLCounter(ID_MEMORYTEMPLCACHETRYS));
}
inline void Incr_TEMPLFLUSHES()
{
InterlockedIncrement(PLCounter(ID_TEMPLFLUSHES));
}
inline void Incr_TRANSABORTED()
{
InterlockedIncrement(PLCounter(ID_TRANSABORTED));
}
inline void Incr_TRANSCOMMIT()
{
InterlockedIncrement(PLCounter(ID_TRANSCOMMIT));
}
inline void Incr_TRANSPENDING()
{
InterlockedIncrement(PLCounter(ID_TRANSPENDING));
}
inline void Decr_TRANSPENDING()
{
InterlockedDecrement(PLCounter(ID_TRANSPENDING));
}
inline void Incr_TRANSTOTAL()
{
InterlockedIncrement(PLCounter(ID_TRANSTOTAL));
}
inline void Incr_TRANSPERSEC()
{
InterlockedIncrement(PLCounter(ID_TRANSPERSEC));
}
};
// We init PERFMON data on first request
extern BOOL g_fPerfInited;
// Object to access main shared PERFMON memory
extern CPerfMainBlock g_PerfMain;
// Object to access shared memory (incl. counters) for this process
extern CPerfData g_PerfData;
HRESULT PreInitPerfData();
HRESULT InitPerfDataOnFirstRequest(CIsapiReqInfo *pIReq);
HRESULT UnInitPerfData();
#else
inline HRESULT PreInitPerfData()
{
return S_OK;
}
inline HRESULT InitPerfDataOnFirstRequest(CIsapiReqInfo *pIReq)
{
return S_OK;
}
inline HRESULT UnInitPerfData()
{
return S_OK;
}
#endif // PERF_DISABLE
#endif // _ASP_PERFDATA_H