windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/w3/scale/perfdll.cxx
2020-09-26 16:20:57 +08:00

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;
}