//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
// 
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Diagnostics;

namespace WebProcessViewer
{
	/// <summary>
	/// Podsumowanie dla WebProcessForm.
	/// </summary>
	public class WebProcessForm : System.Web.UI.Page
	{
		protected System.Web.UI.WebControls.Table ProcessTable;
	
		private void Page_Load(object sender, System.EventArgs e)
		{
			// Wygenerowanie wierszy i komórek           
			TableRow r = new TableRow();
			// Identyfikator procesu
			TableCell c = new TableCell();
			c.Controls.Add(new LiteralControl("Identyfikator procesu"));
			r.Cells.Add(c);
			// Nazwa procesu
			c = new TableCell();
			c.Controls.Add(new LiteralControl("Nazwa procesu"));
			r.Cells.Add(c);
			// Licznik wątków
			c = new TableCell();
			c.Controls.Add(new LiteralControl("Licznik wątków"));
			r.Cells.Add(c);
			// Zestaw roboczy
			c = new TableCell();
			c.Controls.Add(new LiteralControl("Zestaw roboczy"));
			r.Cells.Add(c);
			// Wielkość pamięci wirtualnej
			c = new TableCell();
			c.Controls.Add(new LiteralControl("Wielkość pamięci wirtualnej"));
			r.Cells.Add(c);
			// Całkowity czas procesora
			c = new TableCell();
			c.Controls.Add(new LiteralControl("Czas procesora"));
			r.Cells.Add(c);
			ProcessTable.Rows.Add(r);
			Process [] pa = Process.GetProcesses();
			foreach(Process p in pa)
			{
				ProcessThreadCollection ptc = p.Threads;
				r = new TableRow();
				// Identyfikator procesu
				c = new TableCell();
				c.HorizontalAlign = HorizontalAlign.Right;
				c.Controls.Add(new LiteralControl(p.Id.ToString()));
				r.Cells.Add(c);
				// Nazwa procesu
				c = new TableCell();
				c.HorizontalAlign = HorizontalAlign.Right;
				c.Controls.Add(new LiteralControl(p.ProcessName));
				r.Cells.Add(c);
				// Licznik wątków
				c = new TableCell();
				c.HorizontalAlign = HorizontalAlign.Right;
				c.Controls.Add(new LiteralControl(ptc.Count.ToString("#,#")));
				r.Cells.Add(c);
				// Zestaw roboczy
				c = new TableCell();
				c.HorizontalAlign = HorizontalAlign.Right;
				c.Controls.Add(new LiteralControl(p.WorkingSet.ToString("#,#")));
				r.Cells.Add(c);
				// Wielkość pamięci wirtualnej
				c = new TableCell();
				c.HorizontalAlign = HorizontalAlign.Right;
				c.Controls.Add(new LiteralControl(p.VirtualMemorySize.ToString("#,#")));
				r.Cells.Add(c);
				// Całkowity czas procesora
				c = new TableCell();
				c.HorizontalAlign = HorizontalAlign.Right;
				c.Controls.Add(new LiteralControl(p.TotalProcessorTime.ToString()));
				r.Cells.Add(c);

				ProcessTable.Rows.Add(r);
			}
		}

		#region Web Form Designer generated code
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: To wywołanie jest wymagane przez ASP.NET Web Form Designer.
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		/// Metoda wymagana do obsługi Designera - nie należy modyfikować
		/// zawartości tej metody przy użyciu edytora kodu.
		/// </summary>
		private void InitializeComponent()
		{    
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion
	}
}
