comparison Demo/Asp.Net/Web/Admin/Counters.aspx.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:f990fcb411a9
1 using System;
2 using System.Collections.Generic;
3 using System.Reflection;
4 using System.Text;
5 using System.Web.UI;
6
7 using BLToolkit.Aspects;
8
9 public partial class Admin_Counters : Page
10 {
11 protected void Page_Load(object sender, EventArgs e)
12 {
13 if (Request["cleanup"] == "1")
14 {
15 CacheAspect.ClearCache();
16 Response.Redirect("Counters.aspx");
17 }
18
19 List<MethodCallCounter> counters = new List<MethodCallCounter>();
20
21 lock (CounterAspect.Counters.SyncRoot)
22 foreach (MethodCallCounter c in CounterAspect.Counters)
23 lock (c.CurrentCalls.SyncRoot)
24 if (c.TotalCount > 0 || c.CachedCount > 0 | c.CurrentCalls.Count > 0)
25 counters.Add(c);
26
27 counters.Sort(delegate(MethodCallCounter x, MethodCallCounter y)
28 {
29 int c = string.Compare(
30 x.MethodInfo.DeclaringType.Name,
31 y.MethodInfo.DeclaringType.Name);
32
33 if (c != 0)
34 return c;
35
36 return string.Compare(x.MethodInfo.Name, y.MethodInfo.Name);
37 });
38
39 counterRepeater.DataSource = counters;
40
41 DataBind();
42 }
43
44 protected string GetName(Type type)
45 {
46 string name = type.Name;
47
48 if (type.IsGenericType || type.Name.IndexOf('_') > 0 && type.BaseType.IsGenericType)
49 {
50 if (!type.IsGenericType)
51 type = type.BaseType;
52
53 name = type.Name.Split('`')[0] + "&lt;";
54
55 foreach (Type t in type.GetGenericArguments())
56 name += GetName(t) + ",";
57
58 name = name.TrimEnd(',') + "&gt;";
59 }
60
61 return name;
62 }
63
64 protected string GetTime(TimeSpan time)
65 {
66 if (time == TimeSpan.MinValue || time == TimeSpan.MaxValue)
67 return "";
68
69 string s = time.ToString();
70
71 if (s.Length > 12)
72 s = s.Substring(0, 12);
73
74 if (time.TotalSeconds <= 1)
75 s = string.Format("<font color=gray>{0}</font>", s);
76
77 return s;
78 }
79
80 protected string GetCurrent(MethodCallCounter counter)
81 {
82 List<InterceptCallInfo> info = new List<InterceptCallInfo>();
83
84 lock (counter.CurrentCalls.SyncRoot)
85 {
86 if (counter.CurrentCalls.Count == 0)
87 return "";
88
89 foreach (InterceptCallInfo c in counter.CurrentCalls)
90 info.Add(c);
91 }
92
93 StringBuilder sb = new StringBuilder();
94
95 sb.Append("<tr><td colspan=8 align=left><table class='grid' cellspacing=0 cellpadding=0 rules=all border=1 style='border-collapse:collapse'>");
96
97 sb.Append("<tr class='gridheader'>");
98 sb.Append("<td>Time</td>");
99 sb.Append("<td>Login</td>");
100
101 foreach (ParameterInfo pi in counter.MethodInfo.GetParameters())
102 sb.AppendFormat("<td>{0}</td>", pi.Name);
103
104 sb.Append("</tr>");
105
106 foreach (InterceptCallInfo c in counter.CurrentCalls)
107 {
108 sb.AppendFormat("<tr>");
109
110 sb.AppendFormat("<td>{0}</td>", DateTime.Now - c.BeginCallTime);
111 sb.AppendFormat("<td>{0}</td>", c.CurrentPrincipal.Identity.Name);
112
113 foreach (object value in c.ParameterValues)
114 {
115 sb.AppendFormat("<td>");
116
117 sb.Append(
118 value == null ? "<null>" :
119 value is string ? "\"" + value.ToString().Replace("\n", "<br>\n") + "\"" :
120 value is char ? "'" + value + "'" :
121 value.ToString());
122
123 sb.AppendFormat("</td>");
124 }
125
126 sb.AppendFormat("</tr>");
127 }
128
129 sb.Append("</td></tr></table>");
130
131 return sb.ToString();
132 }
133 }