358 lines
8.7 KiB
C++
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 ***********************/
|