Mercurial > pub > bltoolkit
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] + "<"; | |
54 | |
55 foreach (Type t in type.GetGenericArguments()) | |
56 name += GetName(t) + ","; | |
57 | |
58 name = name.TrimEnd(',') + ">"; | |
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 } |