windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/wam/object/wamstats.hxx
2020-09-26 16:20:57 +08:00

145 lines
3.4 KiB
C++

/*++
Copyright (c) 1994-1997 Microsoft Corporation
Module Name :
wamstats.hxx
Abstract:
Declares a class consisting of statistics information.
( Multiple instances of the same object can be created for reuse)
Author:
Murali R. Krishnan ( MuraliK ) 04-Nov-1994
Project:
Web Application Manager DLL
Revision History:
Murali R. Krishnan ( MuraliK ) 1-Apr-1997
--*/
# ifndef _WAMSTATS_HXX_
# define _WAMSTATS_HXX_
/************************************************************
* Include Headers
************************************************************/
# include "iperfctr.hxx" // standard macro defs for counters
# include "wam.h"
/************************************************************
* Type Definitions
************************************************************/
# define IPWAM_STATS_INCR( ctrName) \
void Incr ## ctrName(void) \
{ \
IP_INCREMENT_COUNTER( m_WamStats.ctrName); \
}
# define IPWAM_STATS_DECR( ctrName) \
void Decr ## ctrName(void) \
{ \
IP_DECREMENT_COUNTER( m_WamStats.ctrName); \
}
# define IPWAM_STATS_QUERY( ctrName) \
LONG Query ## ctrName(void) \
{ \
return (IP_COUNTER_VALUE( m_WamStats.ctrName)); \
}
//
// A counter inside the statistics block should use the following three
// macros for defining "query", "incr" and "decr" methods inside
// the statistics object
//
# define IPWAM_STATS_COUNTER( ctrName) \
IPWAM_STATS_INCR( ctrName); \
IPWAM_STATS_DECR( ctrName); \
IPWAM_STATS_QUERY( ctrName); \
class WAM_STATISTICS {
private:
WAM_STATISTICS_0 m_WamStats;
// local lock to synchronize access among threads
// NYI: SPIN-COUNT
CRITICAL_SECTION m_csStatsLock;
public:
VOID LockStatistics( VOID) { EnterCriticalSection( &m_csStatsLock); }
VOID UnlockStatistics( VOID) { LeaveCriticalSection( &m_csStatsLock); }
WAM_STATISTICS( VOID);
~WAM_STATISTICS( VOID)
{ DeleteCriticalSection( &m_csStatsLock); };
VOID ClearStatistics( VOID);
//
// copies statistics for RPC querying.
//
DWORD CopyToStatsBuffer( PWAM_STATISTICS_0 pStat0 );
// BGI Requests
void IncrWamRequests( void);
IPWAM_STATS_INCR( CurrentWamRequests);
IPWAM_STATS_QUERY( CurrentWamRequests);
IPWAM_STATS_DECR( CurrentWamRequests);
IPWAM_STATS_COUNTER( TotalWamRequests);
}; // WAM_STATISTICS
typedef WAM_STATISTICS FAR * PWAM_STATISTICS;
/************************************************************
* Inline Methods
************************************************************/
inline void WAM_STATISTICS::IncrWamRequests(void)
{
# ifdef IP_ENABLE_COUNTERS
IncrTotalWamRequests();
IncrCurrentWamRequests();
if ( m_WamStats.CurrentWamRequests > m_WamStats.MaxWamRequests )
{
LockStatistics();
if ( m_WamStats.CurrentWamRequests > m_WamStats.MaxWamRequests )
m_WamStats.MaxWamRequests = m_WamStats.CurrentWamRequests;
UnlockStatistics();
}
# endif // IP_ENABLE_COUNTERS
return;
} // WAM_STATISTICS::IncrWamRequests()
# endif // _WAMSTATS_HXX_
/************************ End of File ***********************/