Windows2003-3790/inetsrv/query/cicat/statmon.cxx
2020-09-30 16:53:55 +02:00

248 lines
6.3 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1994.
//
// File: statmon.cxx
//
// Contents:
//
// Classes:
//
// Functions:
//
// History: 3-20-96 srikants Created
//
//----------------------------------------------------------------------------
#include <pch.cxx>
#pragma hdrstop
#include <ciregkey.hxx>
#include <statmon.hxx>
#include <cievtmsg.h>
#include <eventlog.hxx>
#include <pathpars.hxx>
//+---------------------------------------------------------------------------
//
// Member: CCiStatusMonitor::ReportInitFailure
//
// Synopsis:
//
// Arguments: [status] -
//
// Returns:
//
// Modifies:
//
// History: 3-20-96 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
void CCiStatusMonitor::ReportInitFailure()
{
Win4Assert( STATUS_SUCCESS != _status );
if ( CI_CORRUPT_DATABASE == _status || CI_CORRUPT_CATALOG == _status )
{
LogEvent( eCorrupt, _status );
}
else
{
LogEvent( eInitFailed, _status );
}
_fDontLog = TRUE;
}
//+---------------------------------------------------------------------------
//
// Member: CCiStatusMonitor::ReportFailure
//
// Synopsis:
//
// Arguments: [status] -
//
// Returns:
//
// Modifies:
//
// History: 3-20-96 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
void CCiStatusMonitor::ReportFailure( NTSTATUS status )
{
if ( !_fDontLog )
{
if ( CI_CORRUPT_DATABASE == status || CI_CORRUPT_CATALOG == status )
{
LogEvent( eCorrupt, status );
}
else
{
LogEvent( eCiError, status );
}
_fDontLog = TRUE;
}
}
//+---------------------------------------------------------------------------
//
// Member: CCiStatusMonitor::LogEvent
//
// Synopsis:
//
// Arguments: [type] -
// [status] -
//
// Returns:
//
// Modifies:
//
// History: 3-20-96 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
void CCiStatusMonitor::LogEvent( EMessageType type, DWORD status, ULONG val )
{
TRY
{
USHORT nParams = 1;
DWORD msgId;
USHORT usLevel = EVENTLOG_WARNING_TYPE;
switch ( type )
{
case eCorrupt:
usLevel = EVENTLOG_ERROR_TYPE;
msgId = MSG_CI_CORRUPT_INDEX_DOWNLEVEL;
break;
case eCIStarted:
usLevel = EVENTLOG_INFORMATION_TYPE;
msgId = MSG_CI_STARTED;
break;
case eInitFailed:
usLevel = EVENTLOG_ERROR_TYPE;
msgId = MSG_CI_INIT_INDEX_DOWNLEVEL_FAILED;
nParams = 2;
break;
case eCiRemoved:
usLevel = EVENTLOG_ERROR_TYPE;
msgId = MSG_CI_CORRUPT_INDEX_DOWNLEVEL_REMOVED;
break;
case eCiError:
usLevel = EVENTLOG_ERROR_TYPE;
msgId = MSG_CI_INDEX_DOWNLEVEL_ERROR;
nParams = 2;
break;
case ePropStoreRecoveryStart:
usLevel = EVENTLOG_INFORMATION_TYPE;
msgId = MSG_CI_PROPSTORE_RECOVERY_START;
break;
case ePropStoreRecoveryEnd:
usLevel = EVENTLOG_INFORMATION_TYPE;
msgId = MSG_CI_PROPSTORE_RECOVERY_COMPLETED;
break;
case ePropStoreError:
usLevel = EVENTLOG_ERROR_TYPE;
msgId = MSG_CI_PROPSTORE_INCONSISTENT;
break;
case ePropStoreRecoveryError:
msgId = MSG_CI_PROPSTORE_RECOVERY_INCONSISTENT;
nParams = 2;
break;
default:
ciDebugOut(( DEB_IERROR, "Unknown message type. %d\n", type ));
return;
}
CEventLog eventLog( NULL, wcsCiEventSource );
CEventItem item( usLevel,
CI_SERVICE_CATEGORY,
msgId,
nParams );
switch (msgId)
{
case MSG_CI_CORRUPT_INDEX_DOWNLEVEL:
case MSG_CI_CORRUPT_INDEX_DOWNLEVEL_REMOVED:
case MSG_CI_PROPSTORE_INCONSISTENT:
case MSG_CI_PROPSTORE_RECOVERY_START:
case MSG_CI_PROPSTORE_RECOVERY_COMPLETED:
case MSG_CI_STARTED:
item.AddArg( _wcsCatDir );
break;
case MSG_CI_INIT_INDEX_DOWNLEVEL_FAILED:
item.AddArg( _wcsCatDir );
item.AddArg( status );
break;
case MSG_CI_INDEX_DOWNLEVEL_ERROR:
item.AddArg( status );
item.AddArg( _wcsCatDir );
break;
case MSG_CI_PROPSTORE_RECOVERY_INCONSISTENT:
item.AddArg( val );
item.AddArg( _wcsCatDir );
break;
default:
Win4Assert( !"Impossible case stmt" );
break;
}
eventLog.ReportEvent( item );
}
CATCH( CException,e )
{
ciDebugOut(( DEB_ERROR, "Exception 0x%X while writing to event log\n",
e.GetErrorCode() ));
}
END_CATCH
}
void CCiStatusMonitor::ReportPathTooLong( WCHAR const * pwszPath )
{
TRY
{
CEventLog eventLog( NULL, wcsCiEventSource );
CEventItem item( EVENTLOG_ERROR_TYPE,
CI_SERVICE_CATEGORY,
MSG_CI_PATH_TOO_LONG,
1 );
item.AddArg( pwszPath );
eventLog.ReportEvent( item );
}
CATCH( CException,e )
{
ciDebugOut(( DEB_ERROR, "Exception 0x%X while writing to event log\n",
e.GetErrorCode() ));
}
END_CATCH
}