KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > ubik > rmi > server > perf > PerfAnalyzer


1 package org.sapia.ubik.rmi.server.perf;
2
3 import org.sapia.taskman.Task;
4 import org.sapia.taskman.TaskContext;
5
6 import org.sapia.ubik.rmi.server.Log;
7
8 import java.util.Arrays JavaDoc;
9 import java.util.Collections JavaDoc;
10 import java.util.HashMap JavaDoc;
11 import java.util.Map JavaDoc;
12
13
14 /**
15  * @author Yanick Duchesne
16  * <dl>
17  * <dt><b>Copyright:</b><dd>Copyright &#169; 2002-2003 <a HREF="http://www.sapia-oss.org">Sapia Open Source Software</a>. All Rights Reserved.</dd></dt>
18  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
19  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
20  * </dl>
21  */

22 public class PerfAnalyzer implements Task {
23   private static final PerfAnalyzer _perf = new PerfAnalyzer();
24   private boolean _isEnabled;
25   private Map JavaDoc _avgs = Collections.synchronizedMap(new HashMap JavaDoc());
26
27   /**
28    * Constructor for PerfAnalyer.
29    */

30   private PerfAnalyzer() {
31     super();
32   }
33
34   public boolean isEnabled() {
35     return _isEnabled;
36   }
37
38   public void setEnabled(boolean enabled) {
39     _isEnabled = enabled;
40   }
41
42   public Topic getTopic(String JavaDoc name) {
43     Topic t = (Topic) _avgs.get(name);
44
45     if (t == null) {
46       synchronized (_avgs) {
47         if ((t = (Topic) _avgs.get(name)) == null) {
48           t = new Topic(name);
49           _avgs.put(name, t);
50
51           return t;
52         } else {
53           return t;
54         }
55       }
56     } else {
57       return t;
58     }
59   }
60
61   /**
62    * @see org.sapia.taskman.Task#exec(TaskContext)
63    */

64   public void exec(TaskContext ctx) {
65     if (!Log.isWarning()) {
66       _avgs.clear();
67
68       return;
69     }
70
71     if (_avgs.size() == 0) {
72       return;
73     }
74
75     ctx.getTaskOutput().warning("=======================");
76     ctx.getTaskOutput().warning("Ubik Performance Report");
77     ctx.getTaskOutput().warning("=======================");
78
79     Topic[] topics;
80
81     synchronized (_avgs) {
82       topics = (Topic[]) _avgs.values().toArray(new Topic[_avgs.size()]);
83       _avgs.clear();
84     }
85
86     long duration;
87     Arrays.sort(topics);
88
89     for (int i = 0; i < topics.length; i++) {
90       duration = topics[i].duration();
91
92       if (duration > -1) {
93         ctx.getTaskOutput().warning(topics[i].getName() + ": " + duration +
94           "ms");
95       }
96     }
97   }
98
99   public static PerfAnalyzer getInstance() {
100     return _perf;
101   }
102 }
103
Popular Tags