You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
118
mcs/class/referencesource/System.Web/ProcessModelInfo.cs
Normal file
118
mcs/class/referencesource/System.Web/ProcessModelInfo.cs
Normal file
@ -0,0 +1,118 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="ProcessModelInfo.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
* ProcessInfo class
|
||||
*/
|
||||
namespace System.Web {
|
||||
using System.Runtime.Serialization.Formatters;
|
||||
using System.Threading;
|
||||
using System.Security.Permissions;
|
||||
|
||||
public class ProcessModelInfo {
|
||||
|
||||
[AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.High)]
|
||||
static public ProcessInfo GetCurrentProcessInfo() {
|
||||
HttpContext context = HttpContext.Current;
|
||||
if (context == null || context.WorkerRequest == null ||
|
||||
!(context.WorkerRequest is System.Web.Hosting.ISAPIWorkerRequestOutOfProc))
|
||||
{
|
||||
throw new HttpException(SR.GetString(SR.Process_information_not_available));
|
||||
}
|
||||
|
||||
int dwReqExecuted = 0;
|
||||
int dwReqExecuting = 0;
|
||||
long tmCreateTime = 0;
|
||||
int pid = 0;
|
||||
int mem = 0;
|
||||
|
||||
int iRet = UnsafeNativeMethods.PMGetCurrentProcessInfo (
|
||||
ref dwReqExecuted, ref dwReqExecuting, ref mem,
|
||||
ref tmCreateTime, ref pid);
|
||||
|
||||
if (iRet < 0)
|
||||
throw new HttpException(SR.GetString(SR.Process_information_not_available));
|
||||
|
||||
DateTime startTime = DateTime.FromFileTime(tmCreateTime);
|
||||
TimeSpan age = DateTime.Now.Subtract(startTime);
|
||||
|
||||
return new ProcessInfo(startTime, age, pid, dwReqExecuted,
|
||||
ProcessStatus.Alive, ProcessShutdownReason.None, mem);
|
||||
}
|
||||
|
||||
|
||||
[AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.High)]
|
||||
static public ProcessInfo[] GetHistory(int numRecords) {
|
||||
HttpContext context = HttpContext.Current;
|
||||
if (context == null || context.WorkerRequest == null ||
|
||||
!(context.WorkerRequest is System.Web.Hosting.ISAPIWorkerRequestOutOfProc))
|
||||
{
|
||||
throw new HttpException(SR.GetString(SR.Process_information_not_available));
|
||||
}
|
||||
|
||||
if (numRecords < 1)
|
||||
return null;
|
||||
|
||||
int [] dwPID = new int [numRecords];
|
||||
int [] dwExed = new int [numRecords];
|
||||
int [] dwExei = new int [numRecords];
|
||||
int [] dwPend = new int [numRecords];
|
||||
int [] dwReas = new int [numRecords];
|
||||
long [] tmCrea = new long [numRecords];
|
||||
long [] tmDeat = new long [numRecords];
|
||||
int [] mem = new int [numRecords];
|
||||
|
||||
int iRows = UnsafeNativeMethods.PMGetHistoryTable (numRecords, dwPID, dwExed, dwPend, dwExei, dwReas, mem, tmCrea, tmDeat);
|
||||
if (iRows < 0)
|
||||
throw new HttpException(SR.GetString(SR.Process_information_not_available));
|
||||
|
||||
ProcessInfo[] ret = new ProcessInfo[iRows];
|
||||
for (int iter=0; iter<iRows; iter++) {
|
||||
|
||||
DateTime startTime = DateTime.FromFileTime(tmCrea[iter]);
|
||||
TimeSpan age = DateTime.Now.Subtract(startTime);
|
||||
|
||||
ProcessStatus status = ProcessStatus.Alive;
|
||||
ProcessShutdownReason rea = ProcessShutdownReason.None;
|
||||
|
||||
if (dwReas[iter] != 0) {
|
||||
if (tmDeat[iter] > 0)
|
||||
age = DateTime.FromFileTime(tmDeat[iter]).Subtract(startTime);
|
||||
|
||||
if ((dwReas[iter] & 0x0004) != 0)
|
||||
status = ProcessStatus.Terminated;
|
||||
else if ((dwReas[iter] & 0x0002) != 0)
|
||||
status = ProcessStatus.ShutDown;
|
||||
else
|
||||
status = ProcessStatus.ShuttingDown;
|
||||
|
||||
if ((0x0040 & dwReas[iter]) != 0)
|
||||
rea = ProcessShutdownReason.IdleTimeout;
|
||||
else if ((0x0080 & dwReas[iter]) != 0)
|
||||
rea = ProcessShutdownReason.RequestsLimit;
|
||||
else if ((0x0100 & dwReas[iter]) != 0)
|
||||
rea = ProcessShutdownReason.RequestQueueLimit;
|
||||
else if ((0x0020 & dwReas[iter]) != 0)
|
||||
rea = ProcessShutdownReason.Timeout;
|
||||
else if ((0x0200 & dwReas[iter]) != 0)
|
||||
rea = ProcessShutdownReason.MemoryLimitExceeded;
|
||||
else if ((0x0400 & dwReas[iter]) != 0)
|
||||
rea = ProcessShutdownReason.PingFailed;
|
||||
else if ((0x0800 & dwReas[iter]) != 0)
|
||||
rea = ProcessShutdownReason.DeadlockSuspected;
|
||||
else
|
||||
rea = ProcessShutdownReason.Unexpected;
|
||||
}
|
||||
|
||||
ret[iter] = new ProcessInfo(startTime, age, dwPID[iter], dwExed[iter], status, rea, mem[iter]);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user