243 lines
6.1 KiB
C++
243 lines
6.1 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows NT **/
|
|
/** Copyright(c) Microsoft Corp., 1993 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
perfdll.cxx
|
|
|
|
This trivial DLL grabs statistics from the w3 server
|
|
|
|
FILE HISTORY:
|
|
t-bilala 04-01-97 Leveraged from perfw3.cxx in \perfmon
|
|
*/
|
|
|
|
#include <windows.h>
|
|
#include <lm.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <ole2.h>
|
|
#include "iisinfo.h"
|
|
#include "perfdll.h"
|
|
|
|
//
|
|
// Public prototypes.
|
|
//
|
|
|
|
PerfFunction GetPerformanceData;
|
|
|
|
DWORD
|
|
GetStatisticsValue(
|
|
IN LPSTR pszValue,
|
|
IN W3_STATISTICS_1 * pW3Stats
|
|
);
|
|
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: GetPerformanceData
|
|
|
|
SYNOPSIS: Get performance counter value from web server.
|
|
|
|
ENTRY: pszValue - The name of the value to retrieve
|
|
pszServerName - Server name
|
|
|
|
RETURNS: DWORD - value of performance counter
|
|
|
|
********************************************************************/
|
|
DWORD
|
|
GetPerformanceData(
|
|
IN LPSTR pszValue,
|
|
IN LPSTR pszServer
|
|
)
|
|
{
|
|
W3_STATISTICS_1 * pW3Stats = NULL;
|
|
NET_API_STATUS neterr;
|
|
DWORD dwValue;
|
|
WCHAR achBuffer[ MAX_PATH ];
|
|
|
|
if ( pszValue == NULL )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if ( pszServer != NULL )
|
|
{
|
|
if ( !MultiByteToWideChar( CP_ACP,
|
|
MB_PRECOMPOSED,
|
|
pszServer,
|
|
-1,
|
|
achBuffer,
|
|
MAX_PATH ) )
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
neterr = W3QueryStatistics2(
|
|
pszServer ? achBuffer : NULL,
|
|
0,
|
|
1, // instance id
|
|
0,
|
|
(LPBYTE *)&pW3Stats );
|
|
|
|
if( neterr != NERR_Success )
|
|
{
|
|
CHAR achBuffer[ 256 ];
|
|
|
|
wsprintf( achBuffer,
|
|
"Error was %d\n",
|
|
neterr );
|
|
|
|
OutputDebugString( achBuffer );
|
|
|
|
dwValue = 0;
|
|
}
|
|
else
|
|
{
|
|
dwValue = GetStatisticsValue( pszValue, pW3Stats );
|
|
}
|
|
|
|
if ( pW3Stats != NULL )
|
|
{
|
|
MIDL_user_free( pW3Stats );
|
|
}
|
|
|
|
return dwValue;
|
|
|
|
}
|
|
|
|
DWORD
|
|
GetStatisticsValue(
|
|
IN LPSTR pszValue,
|
|
IN W3_STATISTICS_1 * pW3Stats
|
|
)
|
|
{
|
|
if ( !_stricmp( pszValue, "TotalUsers" ) )
|
|
{
|
|
return pW3Stats->TotalAnonymousUsers + pW3Stats->TotalNonAnonymousUsers;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalFilesSent" ) )
|
|
{
|
|
return pW3Stats->TotalFilesSent;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalFilesReceived" ) )
|
|
{
|
|
return pW3Stats->TotalFilesReceived;
|
|
}
|
|
else if ( !_stricmp( pszValue, "CurrentAnonymousUsers" ) )
|
|
{
|
|
return pW3Stats->CurrentAnonymousUsers;
|
|
}
|
|
else if ( !_stricmp( pszValue, "CurrentNonAnonymousUsers" ) )
|
|
{
|
|
return pW3Stats->CurrentNonAnonymousUsers;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalAnonymousUsers" ) )
|
|
{
|
|
return pW3Stats->TotalAnonymousUsers;
|
|
}
|
|
else if ( !_stricmp( pszValue, "MaxAnonymousUsers" ) )
|
|
{
|
|
return pW3Stats->MaxAnonymousUsers;
|
|
}
|
|
else if ( !_stricmp( pszValue, "MaxNonAnonymousUsers" ) )
|
|
{
|
|
return pW3Stats->MaxNonAnonymousUsers;
|
|
}
|
|
else if ( !_stricmp( pszValue, "CurrentConnections" ) )
|
|
{
|
|
return pW3Stats->CurrentConnections;
|
|
}
|
|
else if ( !_stricmp( pszValue, "MaxConnections" ) )
|
|
{
|
|
return pW3Stats->MaxConnections;
|
|
}
|
|
else if ( !_stricmp( pszValue, "ConnectionAttempts" ) )
|
|
{
|
|
return pW3Stats->ConnectionAttempts;
|
|
}
|
|
else if ( !_stricmp( pszValue, "LogonAttempts" ) )
|
|
{
|
|
return pW3Stats->LogonAttempts;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalGets" ) )
|
|
{
|
|
return pW3Stats->TotalGets;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalPosts" ) )
|
|
{
|
|
return pW3Stats->TotalPosts;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalHeads" ) )
|
|
{
|
|
return pW3Stats->TotalHeads;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalPuts" ) )
|
|
{
|
|
return pW3Stats->TotalPuts;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalDeletes" ) )
|
|
{
|
|
return pW3Stats->TotalDeletes;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalTraces" ) )
|
|
{
|
|
return pW3Stats->TotalTraces;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalOthers" ) )
|
|
{
|
|
return pW3Stats->TotalOthers;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalCGIRequests" ) )
|
|
{
|
|
return pW3Stats->TotalCGIRequests;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalBGIRequests" ) )
|
|
{
|
|
return pW3Stats->TotalBGIRequests;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalNotFoundErrors" ) )
|
|
{
|
|
return pW3Stats->TotalNotFoundErrors;
|
|
}
|
|
else if ( !_stricmp( pszValue, "CurrentCGIRequests" ) )
|
|
{
|
|
return pW3Stats->CurrentCGIRequests;
|
|
}
|
|
else if ( !_stricmp( pszValue, "CurrentBGIRequests" ) )
|
|
{
|
|
return pW3Stats->CurrentBGIRequests;
|
|
}
|
|
else if ( !_stricmp( pszValue, "MaxCGIRequests" ) )
|
|
{
|
|
return pW3Stats->MaxCGIRequests;
|
|
}
|
|
else if ( !_stricmp( pszValue, "MaxBGIRequests" ) )
|
|
{
|
|
return pW3Stats->MaxBGIRequests;
|
|
}
|
|
else if ( !_stricmp( pszValue, "CurrentBlockedRequests" ) )
|
|
{
|
|
return pW3Stats->CurrentBlockedRequests;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalBlockedRequests" ) )
|
|
{
|
|
return pW3Stats->TotalBlockedRequests;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalAllowedRequests" ) )
|
|
{
|
|
return pW3Stats->TotalAllowedRequests;
|
|
}
|
|
else if ( !_stricmp( pszValue, "TotalRejectedRequests" ) )
|
|
{
|
|
return pW3Stats->TotalRejectedRequests;
|
|
}
|
|
else if ( !_stricmp( pszValue, "MeasuredBw" ) )
|
|
{
|
|
return pW3Stats->MeasuredBw;
|
|
}
|
|
return 0;
|
|
}
|