KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > igfay > util > Metric


1 package org.igfay.util;
2
3 import java.text.DateFormat JavaDoc;
4 import java.util.ArrayList JavaDoc;
5 import java.util.Date JavaDoc;
6 import java.util.HashMap JavaDoc;
7 import java.util.List JavaDoc;
8
9 import org.apache.log4j.Level;
10 import org.apache.log4j.Logger;
11 import org.igfay.jfig.JFigUtility;
12
13 /**
14  * Capture metrics Creation date: (12/12/2001 9:35:23 AM)
15  *
16  *@author bconrad
17  *@created December 12, 2001
18  *@author: Bruce Conrad
19  */

20 public class Metric {
21     private static Logger log = Logger.getLogger(Metric.class);
22
23     public final static String JavaDoc DEFAULT = "DEFAULT";
24     public final static String JavaDoc BENCHMARK = "BENCHMARK";
25     public final static String JavaDoc DB = "DB";
26     public final static String JavaDoc EVENT = "EVENT";
27     public final static String JavaDoc LOGIN = "LOGIN";
28     public final static String JavaDoc QUERY = "QUERY";
29     public final static String JavaDoc DOWNLOAD = "DOWNLOAD";
30     public final static String JavaDoc UPLOAD = "UPLOAD";
31     public final static String JavaDoc ACCEPTANCE_MANAGER = "ACCEPTANCE_MANAGER";
32     public final static String JavaDoc NOTIFY_ACTION = "NOTIFY_ACTION";
33     public final static String JavaDoc RULES_ENGINE = "RULES_ENGINE";
34
35     private static java.util.HashMap JavaDoc allGroups;
36
37     private long startTime;
38     private long endTime;
39     private long pauseStartTime;
40     private long pauseElapsedTime;
41     private java.lang.String JavaDoc groupName;
42     private java.lang.String JavaDoc metricName;
43     private boolean isDebugEnabled;
44
45
46     /**
47      * Metric constructor comment.
48      */

49     public Metric() {
50         this(false);
51     }
52
53
54     /**
55      * Metric constructor comment.
56      *
57      *@param groupName Description of Parameter
58      */

59     public Metric(String JavaDoc groupName) {
60         this(groupName, false);
61     }
62
63
64     /**
65      * Metric constructor comment.
66      *
67      *@param groupName Description of Parameter
68      *@param metricName Description of Parameter
69      */

70     public Metric(String JavaDoc groupName, String JavaDoc metricName) {
71         this(groupName, metricName, false);
72     }
73
74
75     /**
76      * Metric constructor comment.
77      *
78      *@param groupName Description of Parameter
79      *@param metricName Description of Parameter
80      *@param isStart Description of Parameter
81      */

82     public Metric(String JavaDoc groupName, String JavaDoc metricName, boolean isStart) {
83         this(groupName, metricName, isStart, false);
84     }
85
86
87     public Metric(String JavaDoc groupName, String JavaDoc metricName, boolean isStart, boolean isDebugEnabled) {
88         this.groupName = groupName;
89         this.metricName = metricName;
90         this.setIsDebugEnabled(isDebugEnabled);
91         // Don't add to group until we have a use for this (and a way to clear the group)
92
// otw, it will never get garbage collected
93
//addToListForGroup(groupName, this);
94
if (isStart) {
95             start();
96         }
97     }
98
99
100     /**
101      * Metric constructor comment.
102      *
103      *@param groupName Description of Parameter
104      *@param isStart Description of Parameter
105      */

106     public Metric(String JavaDoc groupName, boolean isStart) {
107         this(groupName, "unnamed", isStart);
108     }
109
110
111     /**
112      * Metric constructor comment.
113      *
114      *@param isStart Description of Parameter
115      */

116     public Metric(boolean isStart) {
117         this(DEFAULT, isStart);
118     }
119
120
121     /**
122      * Insert the method's description here. Creation date: (12/12/2001 9:38:44
123      * AM)
124      *
125      *@param groupName The feature to be added to the ToListForGroup attribute
126      *@param metric The feature to be added to the ToListForGroup attribute
127      */

128     public static void addToListForGroup(String JavaDoc groupName, Metric metric) {
129         getListForGroup(groupName).add(metric);
130     }
131
132
133     /**
134      * Insert the method's description here. Creation date: (12/12/2001
135      * 11:03:27 AM)
136      *
137      *@param args java.lang.String[]
138      */

139     public static void main(String JavaDoc[] args) {
140         testSimple();
141     }
142
143
144     /**
145      * Insert the method's description here. Creation date: (12/12/2001 9:46:19
146      * AM)
147      *
148      *@param groupName Description of Parameter
149      */

150     public static void printGroup(String JavaDoc groupName) {
151         List JavaDoc list = getListForGroup(groupName);
152         for (int i = 0; i < list.size(); i++) {
153             Metric metric = (Metric) list.get(i);
154             log.info(metric.toStringLong());
155         }
156     }
157
158
159     /**
160      * Insert the method's description here. Creation date: (12/12/2001 9:46:19
161      * AM)
162      */

163     public static void test() {
164         Metric metric = new Metric(Metric.LOGIN, "BRUCE1");
165         Metric bruce2 = new Metric(Metric.LOGIN, "BRUCE2");
166         Metric bruce3 = new Metric(Metric.LOGIN, "BRUCE3");
167         metric.start();
168         bruce2.start();
169         bruce3.start();
170         try {
171             Thread.sleep(300);
172         }
173         catch (InterruptedException JavaDoc e) {
174         }
175         metric.end();
176         bruce2.pause();
177         try {
178             Thread.sleep(300);
179         }
180         catch (InterruptedException JavaDoc e) {
181         }
182         bruce2.resume();
183         bruce2.end();
184         bruce3.end();
185         Metric bruce4 = new Metric(Metric.LOGIN, "BRUCE4", true);
186         printGroup(Metric.LOGIN);
187         bruce4.end();
188         log.info(bruce4.toStringLong());
189
190         bruce4.clear();
191         bruce4.start();
192         for (int i = 0; i < 1000000; i++) {
193         }
194         bruce4.end();
195         log.info(bruce4.toStringLong());
196
197 // if (isMetricLoggingEnabled())
198
bruce4.print();
199         testIsDebugEnabled(bruce4);
200
201     }
202
203
204     public static void testSimple() {
205         Metric metric = new Metric(Metric.LOGIN, "BRUCE1");
206         metric.start();
207         try {
208             Thread.sleep(300);
209         }
210         catch (InterruptedException JavaDoc e) {
211         }
212         metric.endAndPrint();
213     }
214
215     public static void testIsDebugEnabled(Metric bruce4) {
216         log.info("");
217         bruce4.setIsDebugEnabled(true);
218         log.setLevel(Level.INFO);
219         log.info("should not print");
220         bruce4.print();
221         bruce4.setIsDebugEnabled(false);
222         log.info("should print");
223         bruce4.print();
224     }
225
226
227     /**
228      * Insert the method's description here. Creation date: (12/12/2001 9:38:44
229      * AM)
230      *
231      *@param groupName Description of Parameter
232      *@return int
233      */

234     public static List JavaDoc getListForGroup(String JavaDoc groupName) {
235         List JavaDoc list = (List JavaDoc) getAllGroups().get(groupName);
236         if (list == null) {
237             list = new ArrayList JavaDoc();
238             getAllGroups().put(groupName, list);
239         }
240         return list;
241     }
242
243
244     /**
245      * Insert the method's description here. Creation date: (12/12/2001 9:46:19
246      * AM)
247      *
248      *@return The MetricLoggingEnabled value
249      */

250     public static boolean isMetricLoggingEnabled() {
251         /*
252           
253          if (isMetricLoggingEnabled == null) {
254             isMetricLoggingEnabled = new Boolean(com.bc.config.BCConfigImpl.getConfig().getValue("Logging", "metricLogging", "false").equalsIgnoreCase("true"));
255         }
256         return isMetricLoggingEnabled.booleanValue();
257         */

258         return true;
259     }
260
261
262     /**
263      * Insert the method's description here. Creation date: (12/12/2001
264      * 10:07:54 AM)
265      *
266      *@return java.util.HashMap
267      */

268     private static HashMap JavaDoc getAllGroups() {
269         if (allGroups == null) {
270             allGroups = new HashMap JavaDoc();
271         }
272
273         return allGroups;
274     }
275
276
277     /**
278      * Insert the method's description here. Creation date: (12/12/2001
279      * 10:07:54 AM)
280      *
281      *@param newAllGroups java.util.HashMap
282      */

283     private static void setAllGroups(HashMap JavaDoc newAllGroups) {
284         allGroups = newAllGroups;
285     }
286
287
288     /**
289      * Insert the method's description here. Creation date: (12/12/2001 9:46:19
290      * AM)
291      */

292     public void clear() {
293         setStartTime(0);
294         setEndTime(0);
295         setPauseElapsedTime(0);
296         setPauseStartTime(0);
297
298     }
299
300
301     /**
302      * Insert the method's description here. Creation date: (12/12/2001 9:46:19
303      * AM)
304      */

305     public void end() {
306         setEndTime(System.currentTimeMillis());
307
308     }
309
310
311     public void stop() {
312         end();
313
314     }
315
316
317     public void endAndPrint() {
318         end();
319         print();
320
321     }
322
323
324     /**
325      * Insert the method's description here. Creation date: (12/12/2001 9:49:00
326      * AM)
327      */

328     public void pause() {
329         setPauseStartTime(System.currentTimeMillis());
330     }
331
332
333     /**
334      * Insert the method's description here. Creation date: (12/12/2001 9:46:19
335      * AM)
336      */

337     public void print() {
338         if (isMetricLoggingEnabled() ) {
339             if (isDebugEnabled() && !log.isDebugEnabled())
340                 return;
341             log.info(toStringLong());
342         }
343
344     }
345
346
347     /**
348      * Insert the method's description here. Creation date: (12/12/2001 9:49:00
349      * AM)
350      */

351     public void resume() {
352         if (getPauseStartTime() > 0) {
353             setPauseElapsedTime(getPauseElapsedTime() + System.currentTimeMillis() - getPauseStartTime());
354             setPauseStartTime(0);
355         }
356     }
357
358
359     /**
360      * Insert the method's description here. Creation date: (12/12/2001 9:46:19
361      * AM)
362      */

363     public void start() {
364         clear();
365         setStartTime(System.currentTimeMillis());
366
367     }
368
369
370     /**
371      * Insert the method's description here. Creation date: (12/12/2001 9:38:44
372      * AM)
373      *
374      *@return int
375      */

376     public String JavaDoc toString() {
377         return toStringBuffer().toString();
378     }
379
380
381     /**
382      * Insert the method's description here. Creation date: (12/12/2001 9:38:44
383      * AM)
384      *
385      *@return int
386      */

387     public StringBuffer JavaDoc toStringBuffer() {
388         StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
389         String JavaDoc blank = " ";
390         String JavaDoc elapsedTimeString = "---";
391 // if (isComplete()) {
392
elapsedTimeString = Long.toString(getElapsedTime());
393  // }
394
buffer.append(getGroupName()).append(blank).append(getMetricName()).append(blank).append(elapsedTimeString);
395         return buffer;
396     }
397
398
399     /**
400      * Insert the method's description here. Creation date: (12/12/2001 9:38:44
401      * AM)
402      *
403      *@return int
404      */

405     public String JavaDoc toStringLong() {
406         StringBuffer JavaDoc buffer = toStringBuffer();
407
408         DateFormat JavaDoc dateFormat = JFigUtility.getDateFormat();
409         String JavaDoc startDate = dateFormat.format(new Date JavaDoc(getStartTime()));
410         String JavaDoc endDate = dateFormat.format(new Date JavaDoc(getEndTime()));
411         String JavaDoc blank = " ";
412
413         buffer.append(blank).append(startDate).append(blank).append(endDate).append(blank).
414                 append(getPauseElapsedTime()).append(blank);
415         return buffer.toString();
416     }
417
418
419     /**
420      * Insert the method's description here. Creation date: (12/12/2001
421      * 10:01:21 AM)
422      *
423      *@return java.lang.String
424      */

425     public String JavaDoc getGroupName() {
426         return groupName;
427     }
428
429
430     /**
431      * Insert the method's description here. Creation date: (12/12/2001
432      * 10:01:55 AM)
433      *
434      *@return java.lang.String
435      */

436     public String JavaDoc getMetricName() {
437         return metricName;
438     }
439
440
441     /**
442      * Insert the method's description here. Creation date: (12/12/2001 9:38:44
443      * AM)
444      *
445      *@return int
446      */

447     public long getElapsedTime() {
448         return getEndTime() - getStartTime() - getPauseElapsedTime();
449     }
450
451
452     /**
453      * Insert the method's description here. Creation date: (12/12/2001 9:36:34
454      * AM)
455      *
456      *@return java.lang.Long
457      */

458     protected long getEndTime() {
459         return endTime;
460     }
461
462
463     /**
464      * Insert the method's description here. Creation date: (12/12/2001 9:50:37
465      * AM)
466      *
467      *@return long
468      */

469     protected long getPauseElapsedTime() {
470         return pauseElapsedTime;
471     }
472
473
474     /**
475      * Insert the method's description here. Creation date: (12/12/2001 9:49:46
476      * AM)
477      *
478      *@return long
479      */

480     protected long getPauseStartTime() {
481         return pauseStartTime;
482     }
483
484
485     /**
486      * Insert the method's description here. Creation date: (12/12/2001 9:36:14
487      * AM)
488      *
489      *@return java.lang.Long
490      */

491     protected long getStartTime() {
492         return startTime;
493     }
494
495
496     /**
497      * Insert the method's description here. Creation date: (12/12/2001 9:36:34
498      * AM)
499      *
500      *@param newEndTime java.lang.Long
501      */

502     public void setEndTime(long newEndTime) {
503         endTime = newEndTime;
504     }
505
506
507     /**
508      * Insert the method's description here. Creation date: (12/12/2001
509      * 10:01:21 AM)
510      *
511      *@param newGroup java.lang.String
512      */

513     public void setGroupName(String JavaDoc newGroup) {
514         groupName = newGroup;
515     }
516
517
518     /**
519      * Insert the method's description here. Creation date: (12/12/2001
520      * 10:01:55 AM)
521      *
522      *@param newName java.lang.String
523      */

524     public void setMetricName(String JavaDoc newName) {
525         metricName = newName;
526     }
527
528
529     public void setMetricNameFailed() {
530         metricName += "-failed";
531     }
532     /**
533      * Insert the method's description here. Creation date: (12/12/2001 9:36:14
534      * AM)
535      *
536      *@param newStartTime java.lang.Long
537      */

538     public void setStartTime(long newStartTime) {
539         startTime = newStartTime;
540     }
541
542
543     /**
544      * Insert the method's description here. Creation date: (12/12/2001 9:50:37
545      * AM)
546      *
547      *@param newPauseElapsedTime long
548      */

549     protected void setPauseElapsedTime(long newPauseElapsedTime) {
550         pauseElapsedTime = newPauseElapsedTime;
551     }
552
553
554     /**
555      * Insert the method's description here. Creation date: (12/12/2001 9:49:46
556      * AM)
557      *
558      *@param newPauseStartTime long
559      */

560     protected void setPauseStartTime(long newPauseStartTime) {
561         pauseStartTime = newPauseStartTime;
562     }
563     /**
564      * Returns the isDebugEnabled.
565      * @return boolean
566      */

567     protected boolean isDebugEnabled() {
568         return isDebugEnabled;
569     }
570
571     /**
572      * Sets the isDebugEnabled.
573      * @param isDebugEnabled The isDebugEnabled to set
574      */

575     public void setIsDebugEnabled(boolean isDebugEnabled) {
576         this.isDebugEnabled = isDebugEnabled;
577     }
578
579 }
580
Popular Tags