e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
437 lines
21 KiB
C#
437 lines
21 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="WebEventCodes.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.Management {
|
|
|
|
using System.Globalization;
|
|
using System.Collections;
|
|
using Debug=System.Web.Util.Debug;
|
|
using System.Security.Permissions;
|
|
|
|
// this class is a container for pre-defined event codes
|
|
// all APIs will take integers so application defined
|
|
// codes or new codes added through servicing are supported
|
|
public sealed class WebEventCodes {
|
|
|
|
private WebEventCodes() {
|
|
}
|
|
|
|
static WebEventCodes()
|
|
{
|
|
InitEventArrayDimensions();
|
|
}
|
|
|
|
// (not bit flags)
|
|
// we're not using an enum for extensibility reasons
|
|
public const int InvalidEventCode = -1;
|
|
public const int UndefinedEventCode = 0;
|
|
public const int UndefinedEventDetailCode = 0;
|
|
|
|
// ----------------------------------
|
|
// Application Codes
|
|
// ----------------------------------
|
|
public const int ApplicationCodeBase = 1000;
|
|
public const int ApplicationStart = ApplicationCodeBase + 1;
|
|
public const int ApplicationShutdown = ApplicationCodeBase + 2;
|
|
public const int ApplicationCompilationStart = ApplicationCodeBase + 3;
|
|
public const int ApplicationCompilationEnd = ApplicationCodeBase + 4;
|
|
public const int ApplicationHeartbeat = ApplicationCodeBase + 5;
|
|
|
|
internal const int ApplicationCodeBaseLast = ApplicationCodeBase + 5;
|
|
|
|
|
|
// ----------------------------------
|
|
// Request Codes
|
|
// ----------------------------------
|
|
public const int RequestCodeBase = 2000;
|
|
public const int RequestTransactionComplete = RequestCodeBase+1;
|
|
public const int RequestTransactionAbort = RequestCodeBase+2;
|
|
|
|
internal const int RequestCodeBaseLast = RequestCodeBase+2;
|
|
|
|
|
|
// ----------------------------------
|
|
// Error Codes
|
|
// ----------------------------------
|
|
public const int ErrorCodeBase = 3000;
|
|
|
|
// Errors during request processing related to client input
|
|
// or behavior
|
|
public const int RuntimeErrorRequestAbort = ErrorCodeBase + 1;
|
|
public const int RuntimeErrorViewStateFailure = ErrorCodeBase + 2;
|
|
public const int RuntimeErrorValidationFailure = ErrorCodeBase + 3;
|
|
public const int RuntimeErrorPostTooLarge = ErrorCodeBase + 4;
|
|
public const int RuntimeErrorUnhandledException = ErrorCodeBase + 5;
|
|
|
|
// Errors related to configuration or invalid code
|
|
public const int WebErrorParserError = ErrorCodeBase + 6;
|
|
public const int WebErrorCompilationError = ErrorCodeBase + 7;
|
|
public const int WebErrorConfigurationError = ErrorCodeBase + 8;
|
|
public const int WebErrorOtherError = ErrorCodeBase + 9;
|
|
public const int WebErrorPropertyDeserializationError = ErrorCodeBase + 10;
|
|
public const int WebErrorObjectStateFormatterDeserializationError = ErrorCodeBase + 11;
|
|
|
|
public const int RuntimeErrorWebResourceFailure = ErrorCodeBase + 12;
|
|
|
|
internal const int ErrorCodeBaseLast = ErrorCodeBase + 12;
|
|
|
|
|
|
// ----------------------------------
|
|
// Audit codes
|
|
// ----------------------------------
|
|
public const int AuditCodeBase = 4000;
|
|
|
|
// success codes
|
|
public const int AuditFormsAuthenticationSuccess = AuditCodeBase + 1;
|
|
public const int AuditMembershipAuthenticationSuccess = AuditCodeBase + 2;
|
|
public const int AuditUrlAuthorizationSuccess = AuditCodeBase + 3;
|
|
public const int AuditFileAuthorizationSuccess = AuditCodeBase + 4;
|
|
|
|
// failure codes
|
|
public const int AuditFormsAuthenticationFailure = AuditCodeBase +5;
|
|
public const int AuditMembershipAuthenticationFailure = AuditCodeBase + 6;
|
|
public const int AuditUrlAuthorizationFailure = AuditCodeBase + 7;
|
|
public const int AuditFileAuthorizationFailure = AuditCodeBase + 8;
|
|
public const int AuditInvalidViewStateFailure = AuditCodeBase + 9;
|
|
public const int AuditUnhandledSecurityException = AuditCodeBase + 10;
|
|
public const int AuditUnhandledAccessException = AuditCodeBase + 11;
|
|
|
|
internal const int AuditCodeBaseLast = AuditCodeBase + 11;
|
|
|
|
// Misc events
|
|
public const int MiscCodeBase = 6000;
|
|
|
|
public const int WebEventProviderInformation = MiscCodeBase + 1;
|
|
|
|
internal const int MiscCodeBaseLast = MiscCodeBase + 1;
|
|
|
|
// Last code base
|
|
internal const int LastCodeBase = 6000;
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
// Detail Codes
|
|
/////////////////////////////////////////////////////
|
|
public const int ApplicationDetailCodeBase = 50000;
|
|
public const int ApplicationShutdownUnknown = ApplicationDetailCodeBase + 1;
|
|
public const int ApplicationShutdownHostingEnvironment = ApplicationDetailCodeBase + 2;
|
|
public const int ApplicationShutdownChangeInGlobalAsax = ApplicationDetailCodeBase + 3;
|
|
public const int ApplicationShutdownConfigurationChange = ApplicationDetailCodeBase + 4;
|
|
public const int ApplicationShutdownUnloadAppDomainCalled = ApplicationDetailCodeBase + 5;
|
|
public const int ApplicationShutdownChangeInSecurityPolicyFile = ApplicationDetailCodeBase + 6;
|
|
public const int ApplicationShutdownBinDirChangeOrDirectoryRename = ApplicationDetailCodeBase + 7;
|
|
public const int ApplicationShutdownBrowsersDirChangeOrDirectoryRename = ApplicationDetailCodeBase + 8;
|
|
public const int ApplicationShutdownCodeDirChangeOrDirectoryRename = ApplicationDetailCodeBase + 9;
|
|
public const int ApplicationShutdownResourcesDirChangeOrDirectoryRename = ApplicationDetailCodeBase + 10;
|
|
public const int ApplicationShutdownIdleTimeout = ApplicationDetailCodeBase + 11;
|
|
public const int ApplicationShutdownPhysicalApplicationPathChanged = ApplicationDetailCodeBase + 12;
|
|
public const int ApplicationShutdownHttpRuntimeClose = ApplicationDetailCodeBase + 13;
|
|
public const int ApplicationShutdownInitializationError = ApplicationDetailCodeBase + 14;
|
|
public const int ApplicationShutdownMaxRecompilationsReached = ApplicationDetailCodeBase + 15;
|
|
public const int StateServerConnectionError = ApplicationDetailCodeBase + 16;
|
|
public const int ApplicationShutdownBuildManagerChange = ApplicationDetailCodeBase + 17;
|
|
|
|
// Audit detail codes
|
|
public const int AuditDetailCodeBase = 50200;
|
|
public const int InvalidTicketFailure = AuditDetailCodeBase + 1;
|
|
public const int ExpiredTicketFailure = AuditDetailCodeBase + 2;
|
|
public const int InvalidViewStateMac = AuditDetailCodeBase + 3;
|
|
public const int InvalidViewState = AuditDetailCodeBase + 4;
|
|
|
|
// Web Event provider detail codes
|
|
public const int WebEventDetailCodeBase = 50300;
|
|
public const int SqlProviderEventsDropped = WebEventDetailCodeBase + 1;
|
|
|
|
// Application extensions should start from here
|
|
public const int WebExtendedBase = 100000;
|
|
|
|
internal static string MessageFromEventCode(int eventCode, int eventDetailCode) {
|
|
string msg = null;
|
|
string detailMsg = null;
|
|
|
|
if (eventDetailCode != 0) {
|
|
switch(eventDetailCode) {
|
|
case ApplicationShutdownUnknown:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownUnknown);
|
|
break;
|
|
|
|
case ApplicationShutdownHostingEnvironment:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownHostingEnvironment);
|
|
break;
|
|
|
|
case ApplicationShutdownChangeInGlobalAsax:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownChangeInGlobalAsax);
|
|
break;
|
|
|
|
case ApplicationShutdownConfigurationChange:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownConfigurationChange);
|
|
break;
|
|
|
|
case ApplicationShutdownUnloadAppDomainCalled:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownUnloadAppDomainCalled);
|
|
break;
|
|
|
|
case ApplicationShutdownChangeInSecurityPolicyFile:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownChangeInSecurityPolicyFile);
|
|
break;
|
|
|
|
case ApplicationShutdownBinDirChangeOrDirectoryRename:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownBinDirChangeOrDirectoryRename);
|
|
break;
|
|
|
|
case ApplicationShutdownBrowsersDirChangeOrDirectoryRename:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownBrowsersDirChangeOrDirectoryRename);
|
|
break;
|
|
|
|
case ApplicationShutdownCodeDirChangeOrDirectoryRename:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownCodeDirChangeOrDirectoryRename);
|
|
break;
|
|
|
|
case ApplicationShutdownResourcesDirChangeOrDirectoryRename:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownResourcesDirChangeOrDirectoryRename);
|
|
break;
|
|
|
|
case ApplicationShutdownIdleTimeout:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownIdleTimeout);
|
|
break;
|
|
|
|
case ApplicationShutdownPhysicalApplicationPathChanged:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownPhysicalApplicationPathChanged);
|
|
break;
|
|
|
|
case ApplicationShutdownHttpRuntimeClose:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownHttpRuntimeClose);
|
|
break;
|
|
|
|
case ApplicationShutdownInitializationError:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownInitializationError);
|
|
break;
|
|
|
|
case ApplicationShutdownMaxRecompilationsReached:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownMaxRecompilationsReached);
|
|
break;
|
|
|
|
case ApplicationShutdownBuildManagerChange:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ApplicationShutdownBuildManagerChange);
|
|
break;
|
|
|
|
case StateServerConnectionError:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_StateServerConnectionError);
|
|
break;
|
|
|
|
case InvalidTicketFailure:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_InvalidTicketFailure);
|
|
break;
|
|
|
|
case ExpiredTicketFailure:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_ExpiredTicketFailure);
|
|
break;
|
|
|
|
case InvalidViewStateMac:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_InvalidViewStateMac);
|
|
break;
|
|
|
|
case InvalidViewState:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_InvalidViewState);
|
|
break;
|
|
|
|
case SqlProviderEventsDropped:
|
|
detailMsg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_detail_SqlProviderEventsDropped);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch(eventCode) {
|
|
case ApplicationStart:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_ApplicationStart);
|
|
break;
|
|
|
|
case ApplicationShutdown:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_ApplicationShutdown);
|
|
break;
|
|
|
|
case ApplicationCompilationStart:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_ApplicationCompilationStart);
|
|
break;
|
|
|
|
case ApplicationCompilationEnd:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_ApplicationCompilationEnd);
|
|
break;
|
|
|
|
case ApplicationHeartbeat:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_ApplicationHeartbeat);
|
|
break;
|
|
|
|
case RequestTransactionComplete:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_RequestTransactionComplete);
|
|
break;
|
|
|
|
case RequestTransactionAbort:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_RequestTransactionAbort);
|
|
break;
|
|
|
|
case RuntimeErrorRequestAbort:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_RuntimeErrorRequestAbort);
|
|
break;
|
|
|
|
case RuntimeErrorViewStateFailure:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_RuntimeErrorViewStateFailure);
|
|
break;
|
|
|
|
case RuntimeErrorValidationFailure:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_RuntimeErrorValidationFailure);
|
|
break;
|
|
|
|
case RuntimeErrorPostTooLarge:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_RuntimeErrorPostTooLarge);
|
|
break;
|
|
|
|
case RuntimeErrorUnhandledException:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_RuntimeErrorUnhandledException);
|
|
break;
|
|
|
|
case WebErrorParserError:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_WebErrorParserError);
|
|
break;
|
|
|
|
case WebErrorCompilationError:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_WebErrorCompilationError);
|
|
break;
|
|
|
|
case WebErrorConfigurationError:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_WebErrorConfigurationError);
|
|
break;
|
|
|
|
case AuditUnhandledSecurityException:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditUnhandledSecurityException);
|
|
break;
|
|
|
|
case AuditInvalidViewStateFailure:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditInvalidViewStateFailure);
|
|
break;
|
|
|
|
case AuditFormsAuthenticationSuccess:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditFormsAuthenticationSuccess);
|
|
break;
|
|
|
|
case AuditUrlAuthorizationSuccess:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditUrlAuthorizationSuccess);
|
|
break;
|
|
|
|
case AuditFileAuthorizationFailure:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditFileAuthorizationFailure);
|
|
break;
|
|
|
|
case AuditFormsAuthenticationFailure:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditFormsAuthenticationFailure);
|
|
break;
|
|
|
|
case AuditFileAuthorizationSuccess:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditFileAuthorizationSuccess);
|
|
break;
|
|
|
|
case AuditMembershipAuthenticationSuccess:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditMembershipAuthenticationSuccess);
|
|
break;
|
|
|
|
case AuditMembershipAuthenticationFailure:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditMembershipAuthenticationFailure);
|
|
break;
|
|
|
|
case AuditUrlAuthorizationFailure:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditUrlAuthorizationFailure);
|
|
break;
|
|
|
|
case AuditUnhandledAccessException:
|
|
msg = WebBaseEvent.FormatResourceStringWithCache(SR.Webevent_msg_AuditUnhandledAccessException);
|
|
break;
|
|
|
|
default:
|
|
Debug.Assert(false, "ASP.NET event code " + eventCode.ToString(CultureInfo.InvariantCulture) + " doesn't have message string mapped to it");
|
|
return String.Empty;
|
|
}
|
|
|
|
if (detailMsg != null) {
|
|
msg += " " + detailMsg;
|
|
}
|
|
|
|
return msg;
|
|
}
|
|
|
|
// Both WebBaseEvents and HealthMonitoringSectionHelper has to store information per {event type, event code}.
|
|
// But for system event type, eventCode and event type has a N:1 relationship. Meaning every event
|
|
// code can be mapped to one and only one event type. So instead of using {event type, event code} as
|
|
// the key, we can use just the event code as the key.
|
|
|
|
// The simplest way is to use a hashtable. But in order to boost performance, we store those
|
|
// information using an array with event code as the key. However, because the event code range is not
|
|
// continuous, and has large gap between categories, instead we use an NxM array, when N is number
|
|
// of major event code categories (e.g. ApplicationCodeBase and RequestCodeBase), and M is the
|
|
// max number of per category event code among all the catogories.
|
|
|
|
// WebBaseEvents and HealthMonitoringSectionHelper will each maintain its own NxM arrays, and it
|
|
// depends on the following functions to calculate the sizes of the array, and to convert an event
|
|
// code into a (x,y) coordinate.
|
|
|
|
internal static int[] s_eventArrayDimensionSizes = new int[2];
|
|
|
|
internal static int GetEventArrayDimensionSize(int dim) {
|
|
Debug.Assert(dim == 0 || dim == 1, "dim == 0 || dim == 1");
|
|
|
|
return s_eventArrayDimensionSizes[dim];
|
|
}
|
|
|
|
// Convert an event code into a (x,y) coordinate.
|
|
internal static void GetEventArrayIndexsFromEventCode(int eventCode, out int index0, out int index1) {
|
|
index0 = eventCode/1000 - 1;
|
|
index1 = eventCode - (eventCode/1000)*1000 - 1;
|
|
|
|
Debug.Assert(index0 >= 0 && index0 < GetEventArrayDimensionSize(0), "Index0 of system eventCode out of expected range: " + eventCode);
|
|
Debug.Assert(index1 >= 0 && index1 < GetEventArrayDimensionSize(1), "Index1 of system eventCode out of expected range: " + eventCode);
|
|
}
|
|
|
|
static void InitEventArrayDimensions()
|
|
{
|
|
int sizeOf2ndDim = 0;
|
|
int size;
|
|
|
|
// Below is the manual way to figure out the size of the 2nd dimension.
|
|
|
|
size = WebEventCodes.ApplicationCodeBaseLast - WebEventCodes.ApplicationCodeBase;
|
|
if (size > sizeOf2ndDim) {
|
|
sizeOf2ndDim = size;
|
|
}
|
|
|
|
size = WebEventCodes.RequestCodeBaseLast - WebEventCodes.RequestCodeBase;
|
|
if (size > sizeOf2ndDim) {
|
|
sizeOf2ndDim = size;
|
|
}
|
|
|
|
size = WebEventCodes.ErrorCodeBaseLast - WebEventCodes.ErrorCodeBase;
|
|
if (size > sizeOf2ndDim) {
|
|
sizeOf2ndDim = size;
|
|
}
|
|
|
|
size = WebEventCodes.AuditCodeBaseLast - WebEventCodes.AuditCodeBase;
|
|
if (size > sizeOf2ndDim) {
|
|
sizeOf2ndDim = size;
|
|
}
|
|
|
|
size = WebEventCodes.MiscCodeBaseLast - WebEventCodes.MiscCodeBase;
|
|
if (size > sizeOf2ndDim) {
|
|
sizeOf2ndDim = size;
|
|
}
|
|
|
|
s_eventArrayDimensionSizes[0] = WebEventCodes.LastCodeBase/1000;
|
|
s_eventArrayDimensionSizes[1] = sizeOf2ndDim;
|
|
}
|
|
}
|
|
}
|
|
|