1 package org.apache.fulcrum.yaafi.interceptor.jamon;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.lang.reflect.Method;
23
24 import com.jamonapi.Monitor;
25 import com.jamonapi.MonitorFactory;
26 import com.jamonapi.RangeHolder;
27 import org.apache.fulcrum.yaafi.interceptor.util.MethodToStringBuilderImpl;
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public class Jamon2PerformanceMonitorImpl implements JamonPerformanceMonitor
42 {
43
44 private static final String MONITOR_LABEL = "ms.services";
45
46
47 private static RangeHolder rangeHolder;
48
49
50 private boolean isActive;
51
52
53 private Method method;
54
55
56 private Monitor monitor;
57
58
59 private long startTime;
60
61 static
62 {
63 rangeHolder = Jamon2PerformanceMonitorImpl.createMSHolder();
64 }
65
66
67
68
69
70
71
72
73 public Jamon2PerformanceMonitorImpl(String serviceName, Method method, Boolean isActive)
74 {
75 this.method = method;
76 this.isActive = isActive.booleanValue();
77 }
78
79
80
81
82 public void start()
83 {
84 if(this.isActive)
85 {
86
87 MonitorFactory.setRangeDefault(MONITOR_LABEL, Jamon2PerformanceMonitorImpl.rangeHolder);
88
89 this.startTime = System.currentTimeMillis();
90 MethodToStringBuilderImpl methodToStringBuilder = new MethodToStringBuilderImpl(this.method, 0);
91 String methodSignature = methodToStringBuilder.toString();
92 this.monitor = MonitorFactory.getMonitor(methodSignature, MONITOR_LABEL);
93 this.monitor.start();
94 }
95 }
96
97
98
99
100 public void stop()
101 {
102 if(this.isActive)
103 {
104 long duration = System.currentTimeMillis() - this.startTime;
105 this.monitor.add(duration);
106 this.monitor.stop();
107 }
108 }
109
110
111
112
113 public void stop(Throwable throwable)
114 {
115 if(this.isActive)
116 {
117
118 this.monitor.add(-1);
119 this.monitor.stop();
120 }
121 }
122
123
124
125
126
127
128
129 public String createReport() throws Exception
130 {
131 return MonitorFactory.getRootMonitor().getReport();
132 }
133
134
135
136
137 private static RangeHolder createMSHolder() {
138 RangeHolder result = new RangeHolder("<");
139 result.add("Exceptions",0);
140 result.add("0_10ms",10);
141 result.add("10_20ms",20);
142 result.add("20_40ms",40);
143 result.add("40_80ms",80);
144 result.add("80_160ms",160);
145 result.add("160_320ms",320);
146 result.add("320_640ms",640);
147 result.add("640_1280ms",1280);
148 result.add("1280_2560ms",2560);
149 result.add("2560_5120ms",5120);
150 result.add("5120_10240ms",10240);
151 result.add("10240_20480ms",20480);
152 result.addLastHeader("20480ms_");
153
154 return result;
155 }
156 }