mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
253 lines
5.5 KiB
253 lines
5.5 KiB
/*++
|
|
|
|
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:
|
|
|
|
Gopher Server DLL
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
# ifndef _STATS_HXX_
|
|
# define _STATS_HXX_
|
|
|
|
/************************************************************
|
|
* Include Headers
|
|
************************************************************/
|
|
|
|
# include "inetinfo.h" // for definition of GOPHERD_STATISTICS_INFO
|
|
|
|
|
|
|
|
/************************************************************
|
|
* Type Definitions
|
|
************************************************************/
|
|
|
|
class SERVER_STATISTICS {
|
|
|
|
private:
|
|
|
|
LARGE_INTEGER m_TotalBytesRecvd;
|
|
LARGE_INTEGER m_TotalBytesSent;
|
|
|
|
DWORD m_TotalFilesSent;
|
|
DWORD m_TotalDirectoryListings;
|
|
DWORD m_TotalSearches;
|
|
DWORD m_GopherPlusRequests;
|
|
|
|
DWORD m_CurrentAnonymousUsers;
|
|
DWORD m_CurrentNonAnonymousUsers;
|
|
|
|
DWORD m_MaxAnonymousUsers;
|
|
DWORD m_MaxNonAnonymousUsers;
|
|
|
|
DWORD m_TotalAnonymousUsers;
|
|
DWORD m_TotalNonAnonymousUsers;
|
|
|
|
//
|
|
// Connection Data can be obtained from SERVER configuration.
|
|
//
|
|
// DWORD m_CurrentConnections;
|
|
// DWORD m_MaxConnections;
|
|
|
|
DWORD m_ConnectionAttempts; // total connection attempts made
|
|
DWORD m_LogonAttempts; // logon attempts made
|
|
DWORD m_AbortedConnections; // Connections aborted by server
|
|
DWORD m_ErroredConnections; // under error when processed.
|
|
// always this holds: 0 <= Errored, Aborted, Logon <= ConnectionAttempts
|
|
|
|
DWORD m_TimeOfLastClear;
|
|
|
|
CRITICAL_SECTION m_csLock; // to synchronize access among threads
|
|
|
|
protected:
|
|
VOID Lock( VOID)
|
|
{ EnterCriticalSection( &m_csLock); }
|
|
|
|
VOID Unlock( VOID)
|
|
{ LeaveCriticalSection( &m_csLock); }
|
|
|
|
|
|
public:
|
|
|
|
SERVER_STATISTICS( VOID);
|
|
|
|
~SERVER_STATISTICS( VOID)
|
|
{ DeleteCriticalSection( &m_csLock); };
|
|
|
|
VOID ClearStatistics( VOID);
|
|
|
|
//
|
|
// copies statistics for RPC querying.
|
|
//
|
|
DWORD CopyToStatBuffer( LPGOPHERD_STATISTICS_INFO lpStat);
|
|
|
|
|
|
//
|
|
// Functions to update statistics of various operations
|
|
//
|
|
|
|
inline
|
|
VOID UpdateByteCount(
|
|
IN DWORD cbReceived,
|
|
IN DWORD cbSent);
|
|
|
|
inline
|
|
VOID IncrementFilesSent( VOID)
|
|
{ InterlockedIncrement( (LPLONG ) &m_TotalFilesSent); }
|
|
|
|
inline
|
|
VOID IncrementDirectorySent()
|
|
{ InterlockedIncrement( (LPLONG ) &m_TotalDirectoryListings); }
|
|
|
|
inline
|
|
VOID IncrementConnectionAttempts( VOID)
|
|
{ InterlockedIncrement( (LPLONG) &m_ConnectionAttempts); }
|
|
|
|
inline
|
|
VOID IncrementLogonAttempts( VOID)
|
|
{ InterlockedIncrement( (LPLONG) &m_LogonAttempts); }
|
|
|
|
inline
|
|
VOID IncrementAbortedConnections( VOID)
|
|
{ InterlockedIncrement( (LPLONG) &m_AbortedConnections); }
|
|
|
|
inline
|
|
VOID IncrementErroredConnections( VOID)
|
|
{ InterlockedIncrement( (LPLONG) &m_ErroredConnections); }
|
|
|
|
inline
|
|
VOID IncrementUserCount( BOOL fAnonymous);
|
|
|
|
inline
|
|
VOID DecrementUserCount( BOOL fAnonymous);
|
|
|
|
inline
|
|
VOID IncrementSearchCount( VOID)
|
|
{ InterlockedIncrement( (LPLONG ) &m_TotalSearches); }
|
|
|
|
inline
|
|
VOID IncrGopherPlusCount( VOID)
|
|
{ InterlockedIncrement( (LPLONG ) &m_GopherPlusRequests); }
|
|
|
|
# if DBG
|
|
|
|
VOID Print( VOID);
|
|
|
|
# endif // DBG
|
|
|
|
|
|
}; // SERVER_STATISTICS
|
|
|
|
typedef SERVER_STATISTICS FAR * LPSERVER_STATISTICS;
|
|
|
|
|
|
|
|
inline
|
|
VOID
|
|
SERVER_STATISTICS::UpdateByteCount(
|
|
IN DWORD cbReceived,
|
|
IN DWORD cbSent)
|
|
/*++
|
|
|
|
Batch updates the statistics for a request after serving
|
|
a given request from client. Batch update is used to limit
|
|
number of times we enter critical section for update.
|
|
|
|
Arguments:
|
|
|
|
cbReceived
|
|
count of bytes of data received from client
|
|
|
|
cbSent
|
|
count of bytes of data sent to the client
|
|
|
|
|
|
Returns:
|
|
None
|
|
|
|
--*/
|
|
{
|
|
Lock();
|
|
|
|
m_TotalBytesRecvd.QuadPart += cbReceived;
|
|
m_TotalBytesSent.QuadPart += cbSent;
|
|
|
|
Unlock();
|
|
|
|
} // SERVER_STATISTICS::UpdateStatistics()
|
|
|
|
|
|
|
|
inline
|
|
VOID
|
|
SERVER_STATISTICS::IncrementUserCount( BOOL fAnonymous)
|
|
{
|
|
|
|
Lock();
|
|
if ( fAnonymous) {
|
|
|
|
m_CurrentAnonymousUsers++;
|
|
m_TotalAnonymousUsers++;
|
|
|
|
if ( m_CurrentAnonymousUsers > m_MaxAnonymousUsers) {
|
|
|
|
m_MaxAnonymousUsers = m_CurrentAnonymousUsers;
|
|
}
|
|
|
|
} else {
|
|
|
|
m_CurrentNonAnonymousUsers++;
|
|
m_TotalNonAnonymousUsers++;
|
|
|
|
if ( m_CurrentNonAnonymousUsers > m_MaxNonAnonymousUsers) {
|
|
|
|
m_MaxNonAnonymousUsers = m_CurrentNonAnonymousUsers;
|
|
}
|
|
|
|
}
|
|
|
|
Unlock();
|
|
|
|
return;
|
|
} // SERVER_STATISTICS::IncrementUserCount()
|
|
|
|
|
|
|
|
inline
|
|
VOID
|
|
SERVER_STATISTICS::DecrementUserCount( BOOL fAnonymous)
|
|
{
|
|
|
|
if ( fAnonymous) {
|
|
|
|
InterlockedDecrement( (LPLONG ) &m_CurrentAnonymousUsers);
|
|
|
|
} else {
|
|
|
|
InterlockedDecrement( (LPLONG ) &m_CurrentNonAnonymousUsers);
|
|
}
|
|
|
|
return;
|
|
} // SERVER_STATISTICS::DecrementUserCount()
|
|
|
|
|
|
# endif // _STATS_HXX_
|
|
|
|
/************************ End of File ***********************/
|