windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/w3/server/stats.hxx
2020-09-26 16:20:57 +08:00

358 lines
8.7 KiB
C++

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name :
stats.hxx
Abstract:
Declares a class consisting of server statistics information.
( Multiple servers can make use of the same statistics
information by creating distinct server statistics object)
Author:
Murali R. Krishnan ( MuraliK ) 04-Nov-1994
Project:
Web Server DLL
Revision History:
Sophia Chung ( SophiaC ) 20-Nov-1996
--*/
# ifndef _STATS_HXX_
# define _STATS_HXX_
/************************************************************
* Include Headers
************************************************************/
# include "inetinfo.h" // for definition of W3_STATISTICS_1
# include "iperfctr.hxx" // standard macro defs for counters
/************************************************************
* Type Definitions
************************************************************/
# define IPW3_STATS_INCR( ctrName) \
void Incr ## ctrName(void) \
{ \
IP_INCREMENT_COUNTER( m_W3Stats.ctrName); \
}
# define IPW3_STATS_DECR( ctrName) \
void Decr ## ctrName(void) \
{ \
IP_DECREMENT_COUNTER( m_W3Stats.ctrName); \
}
# define IPW3_STATS_QUERY( ctrName) \
LONG Query ## ctrName(void) \
{ \
return (IP_COUNTER_VALUE( m_W3Stats.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 IPW3_STATS_COUNTER( ctrName) \
IPW3_STATS_INCR( ctrName); \
IPW3_STATS_DECR( ctrName); \
IPW3_STATS_QUERY( ctrName); \
class W3_SERVER_STATISTICS {
private:
W3_STATISTICS_1 m_W3Stats;
CRITICAL_SECTION m_csStatsLock; // to synchronize access among threads
IPW3_STATS_INCR( CurrentAnonymousUsers);
IPW3_STATS_INCR( CurrentNonAnonymousUsers);
IPW3_STATS_INCR( CurrentCGIRequests);
void IncrCurrentConns( void)
{ IP_INCREMENT_COUNTER( m_W3Stats.CurrentConnections); }
public:
VOID LockStatistics( VOID) { EnterCriticalSection( &m_csStatsLock); }
VOID UnlockStatistics( VOID) { LeaveCriticalSection( &m_csStatsLock); }
W3_SERVER_STATISTICS( VOID);
~W3_SERVER_STATISTICS( VOID)
{ DeleteCriticalSection( &m_csStatsLock); };
VOID ClearStatistics( VOID);
LPW3_STATISTICS_1 QueryStatsObj( VOID)
{ return &m_W3Stats; }
//
// copies statistics for RPC querying.
//
DWORD CopyToStatsBuffer( LPW3_STATISTICS_1 lpStat );
void IncrCurrentConnections( void);
IPW3_STATS_QUERY( CurrentConnections);
IPW3_STATS_DECR( CurrentConnections);
IPW3_STATS_COUNTER( LogonAttempts);
IPW3_STATS_COUNTER( ConnectionAttempts);
// Anonymous Users
void IncrAnonymousUsers( void);
IPW3_STATS_DECR( CurrentAnonymousUsers);
IPW3_STATS_COUNTER( TotalAnonymousUsers);
// Non Anonymous Users
void IncrNonAnonymousUsers( void);
IPW3_STATS_DECR( CurrentNonAnonymousUsers);
IPW3_STATS_COUNTER( TotalNonAnonymousUsers);
// CGI Requests
void IncrCGIRequests( void);
IPW3_STATS_DECR( CurrentCGIRequests);
IPW3_STATS_QUERY( CurrentCGIRequests);
IPW3_STATS_COUNTER( TotalCGIRequests);
// BGI Requests
void IncrBGIRequests( void);
IPW3_STATS_COUNTER( CurrentBGIRequests); // should be deprecated.
IPW3_STATS_COUNTER( TotalBGIRequests);
VOID UpdateMaxBGI(VOID);
// Various Method Counters
IPW3_STATS_COUNTER( TotalDeletes);
IPW3_STATS_COUNTER( TotalGets);
IPW3_STATS_COUNTER( TotalHeads);
IPW3_STATS_COUNTER( TotalNotFoundErrors);
IPW3_STATS_COUNTER( TotalOthers);
IPW3_STATS_COUNTER( TotalPosts);
IPW3_STATS_COUNTER( TotalPuts);
IPW3_STATS_COUNTER( TotalTraces);
#if defined(CAL_ENABLED)
// CAL counters
void IncrCurrentCalAuth( void );
IPW3_STATS_DECR( CurrentCalAuth );
IPW3_STATS_INCR( TotalFailedCalAuth );
void IncrCurrentCalSsl( void );
IPW3_STATS_DECR( CurrentCalSsl );
IPW3_STATS_INCR( TotalFailedCalSsl );
#endif
VOID UpdateStartTime ();
VOID UpdateStopTime ();
}; // W3_SERVER_STATISTICS
typedef W3_SERVER_STATISTICS FAR * LPW3_SERVER_STATISTICS;
/************************************************************
* Inline Methods
************************************************************/
inline void W3_SERVER_STATISTICS::UpdateMaxBGI(void)
{
# ifdef IP_ENABLE_COUNTERS
if ( m_W3Stats.CurrentBGIRequests > m_W3Stats.MaxBGIRequests) {
LockStatistics();
if ( m_W3Stats.CurrentBGIRequests > m_W3Stats.MaxBGIRequests) {
m_W3Stats.MaxBGIRequests = m_W3Stats.CurrentBGIRequests;
}
UnlockStatistics();
}
# endif // IP_ENABLE_COUNTERS
return;
} // W3_SERVER_STATISTICS::UpdateMaxBGI()
#if defined(CAL_ENABLED)
inline void W3_SERVER_STATISTICS::IncrCurrentCalAuth(void)
{
# ifdef IP_ENABLE_COUNTERS
IP_INCREMENT_COUNTER( m_W3Stats.CurrentCalAuth);
if ( m_W3Stats.CurrentCalAuth > m_W3Stats.MaxCalAuth) {
LockStatistics();
if ( m_W3Stats.CurrentCalAuth > m_W3Stats.MaxCalAuth) {
m_W3Stats.MaxCalAuth = m_W3Stats.CurrentCalAuth;
}
UnlockStatistics();
}
# endif // IP_ENABLE_COUNTERS
return;
} // W3_SERVER_STATISTICS::UpdateMaxCalAuth()
inline void W3_SERVER_STATISTICS::IncrCurrentCalSsl(void)
{
# ifdef IP_ENABLE_COUNTERS
IP_INCREMENT_COUNTER( m_W3Stats.CurrentCalSsl);
if ( m_W3Stats.CurrentCalSsl > m_W3Stats.MaxCalSsl) {
LockStatistics();
if ( m_W3Stats.CurrentCalSsl > m_W3Stats.MaxCalSsl) {
m_W3Stats.MaxCalSsl = m_W3Stats.CurrentCalSsl;
}
UnlockStatistics();
}
# endif // IP_ENABLE_COUNTERS
return;
} // W3_SERVER_STATISTICS::UpdateMaxCalSsl()
#endif
inline void W3_SERVER_STATISTICS::IncrBGIRequests(void)
{
# ifdef IP_ENABLE_COUNTERS
IncrTotalBGIRequests();
IncrCurrentBGIRequests();
if ( m_W3Stats.CurrentBGIRequests > m_W3Stats.MaxBGIRequests )
{
LockStatistics();
if ( m_W3Stats.CurrentBGIRequests > m_W3Stats.MaxBGIRequests )
m_W3Stats.MaxBGIRequests = m_W3Stats.CurrentBGIRequests;
UnlockStatistics();
}
# endif // IP_ENABLE_COUNTERS
return;
} // W3_SERVER_STATISTICS::IncrBGIRequests()
inline void W3_SERVER_STATISTICS::IncrCGIRequests(void)
{
# ifdef IP_ENABLE_COUNTERS
IncrCurrentCGIRequests();
if ( m_W3Stats.CurrentCGIRequests > m_W3Stats.MaxCGIRequests )
{
LockStatistics();
if ( m_W3Stats.CurrentCGIRequests > m_W3Stats.MaxCGIRequests )
m_W3Stats.MaxCGIRequests = m_W3Stats.CurrentCGIRequests;
UnlockStatistics();
}
# endif // IP_ENABLE_COUNTERS
return;
} // W3_SERVER_STATISTICS::IncrCGIRequests()
inline void W3_SERVER_STATISTICS::IncrCurrentConnections(void)
{
#ifdef IP_ENABLE_COUNTERS
IncrCurrentConns();
if ( m_W3Stats.CurrentConnections > m_W3Stats.MaxConnections ) {
LockStatistics();
if ( m_W3Stats.CurrentConnections > m_W3Stats.MaxConnections ) {
m_W3Stats.MaxConnections = m_W3Stats.CurrentConnections;
}
UnlockStatistics();
}
# endif // IP_ENABLE_COUNTERS
return;
} // W3_SERVER_STATISTICS::IncrCurrentConnections()
inline void W3_SERVER_STATISTICS::IncrAnonymousUsers( void)
{
# ifdef IP_ENABLE_COUNTERS
IncrTotalAnonymousUsers();
IncrCurrentAnonymousUsers();
if ( m_W3Stats.CurrentAnonymousUsers > m_W3Stats.MaxAnonymousUsers )
{
LockStatistics();
if ( m_W3Stats.CurrentAnonymousUsers > m_W3Stats.MaxAnonymousUsers )
{
m_W3Stats.MaxAnonymousUsers = m_W3Stats.CurrentAnonymousUsers;
}
UnlockStatistics();
}
# endif // IP_ENABLE_COUNTERS
return;
} // W3_SERVER_STATISTICS::IncrAnonymousUsers()
inline void W3_SERVER_STATISTICS::IncrNonAnonymousUsers( void)
{
# ifdef IP_ENABLE_COUNTERS
IncrTotalNonAnonymousUsers();
IncrCurrentNonAnonymousUsers();
if ( m_W3Stats.CurrentNonAnonymousUsers > m_W3Stats.MaxNonAnonymousUsers )
{
LockStatistics();
if ( m_W3Stats.CurrentNonAnonymousUsers >
m_W3Stats.MaxNonAnonymousUsers )
{
m_W3Stats.MaxNonAnonymousUsers =
m_W3Stats.CurrentNonAnonymousUsers;
}
UnlockStatistics();
}
# endif // IP_ENABLE_COUNTERS
return;
} // W3_SERVER_STATISTICS::IncrNonAnonymousUsers()
# endif // _STATS_HXX_
/************************ End of File ***********************/