Imports System.Web.UI.WebControls Namespace ABC Public Class DeveloperPanel Inherits Panel Public Sub New() Dim t As Table = New Table() Dim r As HttpRequest = HttpContext.Current.Request t.CellPadding = 1 t.BorderWidth = New Unit(0, UnitType.Pixel) t.Rows.Add(NewRow("Server", Environment.MachineName)) t.Rows.Add(NewRow("Time", DateTime.Now.ToString("MM/dd/yy h:mm tt"))) t.Rows.Add(NewRow("Conn", SqlDatabaseWeb.GetConnName("MYDB"))) t.Rows.Add(NewRow("Client", r.UserHostAddress)) t.Rows.Add(NewRow(" ", r.UserHostName)) t.Rows.Add(NewRow("User", r.LogonUserIdentity.Name)) Me.Controls.Add(t) End Sub Private Function NewRow(ByVal label As String, ByVal value As String) As TableRow Dim result As TableRow = New TableRow() Dim cell As TableCell = New TableCell() cell.Text = label cell.Font.Bold = True cell.Font.Size = New FontUnit(8) result.Cells.Add(cell) cell = New TableCell() cell.Text = value cell.Font.Size = New FontUnit(8) result.Cells.Add(cell) Return result End Function End Class End Namespace
private const string dateFormat = "MM/dd/yyyy hh:mm tt (zzz)"; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { Table t = uxTable; HttpRequest r = HttpContext.Current.Request; t.CellPadding = 1; t.BorderWidth = new Unit(1, UnitType.Pixel); t.Rows.Add(NewRow("URL:", AppRootUrl())); t.Rows.Add(NewRow("Server:", HttpContext.Current.Server.MachineName)); t.Rows.Add(NewRow("Server IP:", GetServerIP())); t.Rows.Add(NewRow("App Root:", Server.MapPath("~/"))); t.Rows.Add(NewRow("Deployed:", DeploymentTimestamp())); t.Rows.Add(NewRow("Server Time:", DateTime.Now.ToString(dateFormat))); t.Rows.AddRange(NewRows("Database Connections:", GetConnections())); t.Rows.Add(NewRow("Client:", r.UserHostAddress)); t.Rows.Add(NewRow(" ", r.UserHostName)); t.Rows.Add(NewRow("OS User:", r.LogonUserIdentity == null ? "" : r.LogonUserIdentity.Name)); t.Rows.Add(NewRow("ASP.NET User:", GetAspNetUserName())); } } private TableRow NewRow(string label, string value) { TableRow result = new TableRow(); TableCell cell = new TableCell(); cell.Text = label; cell.Font.Bold = true; cell.Font.Size = new FontUnit(10); cell.VerticalAlign = VerticalAlign.Top; cell.HorizontalAlign = HorizontalAlign.Right; cell.Width = new Unit(12, UnitType.Em); result.Cells.Add(cell); cell = new TableCell(); cell.Text = value; cell.Font.Size = new FontUnit(10); cell.VerticalAlign = VerticalAlign.Top; cell.ColumnSpan = 2; result.Cells.Add(cell); return result; } private TableRow[] NewRows(string label, Dictionary<string, string> items) { List<TableRow> result = new List<TableRow>(); TableCell cell; TableRow row; bool first = true; foreach (string key in items.Keys) { row = new TableRow(); /*--- Cell #1 ---*/ cell = new TableCell(); if (first) cell.Text = label; else cell.Text = " "; cell.Font.Bold = true; cell.Font.Size = new FontUnit(10); cell.VerticalAlign = VerticalAlign.Top; cell.HorizontalAlign = HorizontalAlign.Right; cell.Width = new Unit(12, UnitType.Em); row.Cells.Add(cell); /*--- Cell #2 ---*/ cell = new TableCell(); cell.Text = key; cell.Font.Size = new FontUnit(10); cell.VerticalAlign = VerticalAlign.Top; cell.Width = new Unit(8, UnitType.Em); row.Cells.Add(cell); /*--- Cell #3 ---*/ cell = new TableCell(); cell.Text = items[key]; cell.Font.Size = new FontUnit(10); cell.VerticalAlign = VerticalAlign.Top; row.Cells.Add(cell); /*--- Clean Up ---*/ result.Add(row); first = false; } return result.ToArray<TableRow>(); } private string GetServerIP() { string result = ""; IPAddress[] addresses = Dns.GetHostAddresses(HttpContext.Current.Server.MachineName); if (addresses.Length > 0) { result = addresses[0].ToString(); } return result; } private string GetAspNetUserName() { string result = ""; result = HttpContext.Current.User.Identity.Name; return result; } private string ParseConnection(string conn) { string result = ""; //-- Handle Connection String for EntityFramework (?) --- Regex regex = new Regex("connection string=\"(?<conn>.+?)\""); MatchCollection mc = regex.Matches(conn); if (mc.Count > 0) conn = mc[0].Groups["conn"].Value; //-- Extract info of interest --- SqlConnectionStringBuilder b = new SqlConnectionStringBuilder(conn); result = "[" + b.DataSource + "].[" + b.InitialCatalog + "]"; return result; } private string GetConnection(string key) { string result = ""; ConnectionStringSettings css = ConfigurationManager.ConnectionStrings[key]; if (css != null) result = ParseConnection(css.ConnectionString); return result; } private Dictionary<string, string> GetConnections() { Dictionary<string, string> result = new Dictionary<string, string>(); ConnectionStringSettingsCollection items = ConfigurationManager.ConnectionStrings; /* Not sure where the "LocalSqlServer" connection keeps coming from, but we just exclude it here. */ foreach (ConnectionStringSettings item in items) if (item.Name.ToUpper() != "LOCALSQLSERVER") result.Add(item.Name, ParseConnection(item.ConnectionString)); return result; } private string AppRootUrl() { string result = ""; HttpRequest r = HttpContext.Current.Request; result += r.Url.Scheme; result += System.Uri.SchemeDelimiter; result += r.Url.Authority; result += r.ApplicationPath; if (result.EndsWith("/")) result = result.Substring(0, result.Length - 1); return result; } private string GetUrlRewriterConnection() { string result = ""; try { string configPath = Path.Combine(HttpContext.Current.Server.MapPath("~"), "web.config"); XmlDocument doc = new XmlDocument(); doc.Load(configPath); XmlNamespaceManager nsm = new XmlNamespaceManager(doc.NameTable); nsm.AddNamespace("url", "http://www.urlrewriting.net/schemas/config/2006/07"); string xPath = "/configuration/url:urlrewritingnet/url:rewrites/url:add[@name='Rule1']"; XmlNode node = doc.SelectSingleNode(xPath, nsm); string conn = node.Attributes["connString"].Value; result = ParseConnection(conn); } catch { } return result; } private string DeploymentTimestamp() { string result = ""; string path = Server.MapPath("~/bin"); DirectoryInfo di = new DirectoryInfo(path); result = di.CreationTime.ToString(dateFormat); return result; }
ScrewTurn Wiki version 3.0.1.400. Some of the icons created by FamFamFam. Except where noted, all contents Copyright © 1999-2024, Patrick Jasinski.