Example #1
0
		public void Constructor0 ()
		{
			ProcessInfo pi = new ProcessInfo ();
			CheckProperties (pi);
			pi.SetAll (DateTime.MinValue, TimeSpan.Zero, 0, 0, 0, ProcessShutdownReason.None, 0);
			CheckProperties (pi);
		}
Example #2
0
		private void CheckProperties (ProcessInfo pi)
		{
			Assert.AreEqual (TimeSpan.Zero, pi.Age, "Age");
			Assert.AreEqual (0, pi.PeakMemoryUsed, "PeakMemoryUsed");
			Assert.AreEqual (0, pi.ProcessID, "ProcessID");
			Assert.AreEqual (0, pi.RequestCount, "RequestCount");
			Assert.AreEqual (ProcessShutdownReason.None, pi.ShutdownReason, "ShutdownReason");
			Assert.AreEqual (DateTime.MinValue, pi.StartTime, "StartTime");
			Assert.AreEqual (0, (int)pi.Status, "Status");
		}
 public static ProcessInfo[] GetHistory(int numRecords)
 {
     HttpContext current = HttpContext.Current;
     if (((current == null) || (current.WorkerRequest == null)) || !(current.WorkerRequest is ISAPIWorkerRequestOutOfProc))
     {
         throw new HttpException(System.Web.SR.GetString("Process_information_not_available"));
     }
     if (numRecords < 1)
     {
         return null;
     }
     int[] dwPIDArr = new int[numRecords];
     int[] dwReqExecuted = new int[numRecords];
     int[] dwReqExecuting = new int[numRecords];
     int[] dwReqPending = new int[numRecords];
     int[] dwReasonForDeath = new int[numRecords];
     long[] tmCreateTime = new long[numRecords];
     long[] tmDeathTime = new long[numRecords];
     int[] dwPeakMemoryUsed = new int[numRecords];
     int num = System.Web.UnsafeNativeMethods.PMGetHistoryTable(numRecords, dwPIDArr, dwReqExecuted, dwReqPending, dwReqExecuting, dwReasonForDeath, dwPeakMemoryUsed, tmCreateTime, tmDeathTime);
     if (num < 0)
     {
         throw new HttpException(System.Web.SR.GetString("Process_information_not_available"));
     }
     ProcessInfo[] infoArray = new ProcessInfo[num];
     for (int i = 0; i < num; i++)
     {
         DateTime time = DateTime.FromFileTime(tmCreateTime[i]);
         TimeSpan age = DateTime.Now.Subtract(time);
         ProcessStatus alive = ProcessStatus.Alive;
         ProcessShutdownReason none = ProcessShutdownReason.None;
         if (dwReasonForDeath[i] != 0)
         {
             if (tmDeathTime[i] > 0L)
             {
                 age = DateTime.FromFileTime(tmDeathTime[i]).Subtract(time);
             }
             if ((dwReasonForDeath[i] & 4) != 0)
             {
                 alive = ProcessStatus.Terminated;
             }
             else if ((dwReasonForDeath[i] & 2) != 0)
             {
                 alive = ProcessStatus.ShutDown;
             }
             else
             {
                 alive = ProcessStatus.ShuttingDown;
             }
             if ((0x40 & dwReasonForDeath[i]) != 0)
             {
                 none = ProcessShutdownReason.IdleTimeout;
             }
             else if ((0x80 & dwReasonForDeath[i]) != 0)
             {
                 none = ProcessShutdownReason.RequestsLimit;
             }
             else if ((0x100 & dwReasonForDeath[i]) != 0)
             {
                 none = ProcessShutdownReason.RequestQueueLimit;
             }
             else if ((0x20 & dwReasonForDeath[i]) != 0)
             {
                 none = ProcessShutdownReason.Timeout;
             }
             else if ((0x200 & dwReasonForDeath[i]) != 0)
             {
                 none = ProcessShutdownReason.MemoryLimitExceeded;
             }
             else if ((0x400 & dwReasonForDeath[i]) != 0)
             {
                 none = ProcessShutdownReason.PingFailed;
             }
             else if ((0x800 & dwReasonForDeath[i]) != 0)
             {
                 none = ProcessShutdownReason.DeadlockSuspected;
             }
             else
             {
                 none = ProcessShutdownReason.Unexpected;
             }
         }
         infoArray[i] = new ProcessInfo(time, age, dwPIDArr[i], dwReqExecuted[i], alive, none, dwPeakMemoryUsed[i]);
     }
     return infoArray;
 }
Example #4
0
 private IEnumerator<object> DoEval(ProcessInfo process, string pythonText)
 {
     var f = Program.EvalPython(process, pythonText);
     yield return f;
     byte[] result = f.Result;
     if ((result != null) && (result.Length > 0))
         MessageBox.Show(this, result.DecodeUTF8Z(), String.Format("Result from process {0}", process.Process.Id));
 }
        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;
        }