180 lines
8.3 KiB
C
180 lines
8.3 KiB
C
|
// --monitor.h------------------------------------------------------------------
|
||
|
//
|
||
|
// Header file for module containing performance monitoring functions.
|
||
|
//
|
||
|
// Copyright 1986 - 1998 Microsoft Corporation. All Rights Reserved.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
#if !defined(_MONITOR_H)
|
||
|
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
|
||
|
#define _MONITOR_H
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif // __cplusplus
|
||
|
|
||
|
//
|
||
|
// Enumerated Types
|
||
|
//
|
||
|
|
||
|
//$--DIRECTIONTYPE--------------------------------------------------------------
|
||
|
// Tells shether a statistic applies to messages going into or out of Exchange.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
typedef enum _DirectionType // (hungarian notation = dir)
|
||
|
{
|
||
|
DIRECTIONTYPE_IN = 0, // coming into Exchange
|
||
|
DIRECTIONTYPE_OUT, // going out of Exchange
|
||
|
DIRECTIONTYPE_LAST // all direction types less than this
|
||
|
} DIRECTIONTYPE;
|
||
|
|
||
|
//$--COUNTERTYPE----------------------------------------------------------------
|
||
|
// Tells what statistic is to be counted.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
typedef enum _CounterType // (hungarian notation = ct)
|
||
|
{
|
||
|
COUNTERTYPE_MESSAGES_IN_FOLDER = 0, // total number of messages in folder
|
||
|
COUNTERTYPE_BYTES_IN_FOLDER, // total number of bytes in folder
|
||
|
COUNTERTYPE_MESSAGES_ENTERING_FOLDER, // number of messages entering folder
|
||
|
COUNTERTYPE_BYTES_ENTERING_FOLDER, // number of bytes entering folder
|
||
|
COUNTERTYPE_MESSAGES_LEAVING_FOLDER, // number of messages leaving folder
|
||
|
COUNTERTYPE_BYTES_LEAVING_FOLDER, // NOT IMPLEMENTED!!! (placeholder)
|
||
|
COUNTERTYPE_MESSAGES_TRANSFERRED_IN, // messages transferred into Exchange
|
||
|
COUNTERTYPE_BYTES_TRANSFERRED_IN, // bytes transferred into Exchange
|
||
|
COUNTERTYPE_MESSAGES_TRANSFERRED_OUT, // msgs transferred out of Exchange
|
||
|
COUNTERTYPE_BYTES_TRANSFERRED_OUT, // bytes transferred out of Exchange
|
||
|
COUNTERTYPE_NDRS_IN, // number of NDRs into Exchange
|
||
|
COUNTERTYPE_NDRS_OUT, // number of NDRs out of Exchange
|
||
|
COUNTERTYPE_ASSOCIATIONS, // total number of associations
|
||
|
COUNTERTYPE_USER_DEFINED, // counter maintained by user
|
||
|
COUNTERTYPE_LAST // all counter types are less than this
|
||
|
} COUNTERTYPE;
|
||
|
|
||
|
//$--PERIODTYPE-----------------------------------------------------------------
|
||
|
// Tells what period the given statistic is to be totaled over.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
typedef enum _PeriodType // (hungarian notation = per)
|
||
|
{
|
||
|
PERIODTYPE_NONE = 0, // not a period statistic
|
||
|
PERIODTYPE_CONTINUOUS, // last Perf. Monitor sampling period
|
||
|
PERIODTYPE_LAST_N_MINUTES, // past N 1-minute intervals
|
||
|
PERIODTYPE_TOTAL, // since gateway started
|
||
|
PERIODTYPE_LAST // all period types are less than this
|
||
|
} PERIODTYPE;
|
||
|
|
||
|
//
|
||
|
// Structure Definitions
|
||
|
//
|
||
|
|
||
|
//$--COUNTER--------------------------------------------------------------------
|
||
|
// The type for a variable that is being used as a counter.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
typedef DWORD COUNTER, *LPCOUNTER; // (hungarian notation = cnt)
|
||
|
|
||
|
//$--COUNTERDEF-----------------------------------------------------------------
|
||
|
// A table of these structures is passed into rcMonitorInit() to describe the
|
||
|
// counters used in performance monitoring. A counter table consisting of a
|
||
|
// table of COUNTER's is created, and it is guaranteed that the counters will
|
||
|
// be contiguous and in the same order as they are described in this table.
|
||
|
// Contiguity is needed for some cases of calculated counters using user
|
||
|
// defined counters.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
typedef struct _CounterDef // (hungarian notation = cd)
|
||
|
{
|
||
|
DWORD iCounterTitleOffset; // index to counter name in registry
|
||
|
// (offset from First Counter)
|
||
|
COUNTERTYPE ctStatistic; // which statistic this counter monitors
|
||
|
LPMAPIFOLDER lpFolder; // folder that counter is from (if
|
||
|
// applicable)
|
||
|
PERIODTYPE perPeriod; // Period to total statistic (if
|
||
|
// applicable)
|
||
|
DWORD cMinutes; // N for PERIODTYPE_LAST_N_MINUTES
|
||
|
LPCOUNTER * lppcntUserCounter; // address to return a pointer to
|
||
|
// actual counter (for a user defined
|
||
|
// counter), or NULL if not needed
|
||
|
DWORD dwUserCounterType; // counter type as defined in winperf.h
|
||
|
// (for a user defined counter)
|
||
|
DWORD dwDetailLevel; // counter complexity (from winperf.h)
|
||
|
DWORD dwDefaultScale; // default scale (from winperf.h)
|
||
|
} COUNTERDEF, *LPCOUNTERDEF;
|
||
|
|
||
|
//
|
||
|
// Public Function Declarations
|
||
|
//
|
||
|
|
||
|
//$--HrMonInit--------------------------------------------------------------
|
||
|
// Begins performance monitoring of the current monitored object.
|
||
|
//
|
||
|
// If lpszObjectClass != NULL, then use lpszObjectClass as the class of the
|
||
|
// monitored object.
|
||
|
// If lpszObjectClass == NULL, then read the object class from the
|
||
|
// Parameters\ObjectClass value under the object's registry key, or if
|
||
|
// it's not present, assume that the object class is the same as the object
|
||
|
// name.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
HRESULT HrMonInit( // RETURNS: HRESULT
|
||
|
IN DWORD dwFlags, // for future use--must be zero
|
||
|
IN LPSTR lpszObjectClass, // class of monitored object, or NULL
|
||
|
IN LPSTR lpszObjectName, // gateway instance name
|
||
|
IN DWORD dwObjectTitleOffset, // index number of object name in
|
||
|
// the registry database (offset from
|
||
|
// First Counter)
|
||
|
IN DWORD dwObjectDetailLevel, // complexity of object (see winperf.h)
|
||
|
IN LONG dwDefaultCounter, // zero-based number of default counter
|
||
|
// for this object
|
||
|
IN DWORD ccdNumberOfCounters, // number of counter structures
|
||
|
// being passed in
|
||
|
IN LPCOUNTERDEF lpcdCounters); // pointer to array of counter
|
||
|
// structures
|
||
|
|
||
|
//$--HrMonUninit----------------------------------------------------------
|
||
|
// Ends performance monitoring of the current gateway.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
HRESULT HrMonUninit(void); // RETURNS: HRESULT
|
||
|
|
||
|
//$--HrMonCollectNDRStats----------------------------------------------------
|
||
|
// Call this after processing an NDR.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
HRESULT HrMonCollectNDRStats( // RETURNS: HRESULT
|
||
|
IN DWORD cNDRs, // number of NDR's processed
|
||
|
IN DIRECTIONTYPE dir); // direction of NDR's
|
||
|
|
||
|
//$--HrMonCollectMessageXferStats-------------------------------------
|
||
|
// Call this after transferring a message.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
HRESULT HrMonCollectMessageXferStats( // RETURNS: HRESULT
|
||
|
IN DWORD cMessages, // number of messages transferred
|
||
|
IN DWORD cBytes, // number of bytes transferred
|
||
|
IN DIRECTIONTYPE dir); // direction of message transfer
|
||
|
|
||
|
//$--HrMonCollectAssociationStats--------------------------------------------
|
||
|
// Call this after making or breaking an association, or to set a new total
|
||
|
// number of associations.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
HRESULT HrMonCollectAssociationStats( // RETURNS: HRESULT
|
||
|
IN BOOL fSetNewTotal, // if TRUE, iAssociations becomes
|
||
|
// the new total of associations.
|
||
|
// if FALSE, iAssociations is added
|
||
|
// to the number of associations.
|
||
|
|
||
|
IN LONG cAssociations); // number of associations to add to
|
||
|
// total (can be negative), or new
|
||
|
// total if fSetNewTotal == TRUE
|
||
|
|
||
|
//$--HrMonLockCounters------------------------------------------------------
|
||
|
// Locks the block of counters against access by other threads/processes.
|
||
|
// This should be called before accessing a user defined counter.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
HRESULT HrMonLockCounters(void); // RETURNS: HRESULT
|
||
|
|
||
|
//$--HrMonUnlockCounters----------------------------------------------------
|
||
|
// Unlocks the block of counters to allow access by other threads/processes.
|
||
|
// This should be called after accessing a user defined counter.
|
||
|
// -----------------------------------------------------------------------------
|
||
|
HRESULT HrMonUnlockCounters(void); // RETURNS: HRESULT
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#pragma option pop /*P_O_Pop*/
|
||
|
#endif
|