1 /* ==========================================
2 * JperfProbe : Java Performance Probes
3 * ==========================================
4 *
5 * Project Info: http://jperfprobe.sourceforge.net/
6 * Project Lead: Tor-Erik Larsen (http://sourceforge.net/users/uptime62)
7 *
8 * (C) Copyright 2005, by Tor-Erik Larsen and Contributors.
9 *
10 * This library is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU Lesser General Public License as published by
12 * the Free Software Foundation; either version 2.1 of the License, or
13 * (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
18 * License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with this library; if not, write to the Free Software Foundation, Inc.,
22 * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
23 */
24
25 package net.sf.jperfprobe;
26
27 import org.slf4j.*;
28
29
30 /**
31 * DefaultProbe implements a Probe. It is possible to start and stop a probe
32 * The probe is identified by a name. The probe uses nano seconds for measuring time.
33 */
34 public class DefaultProbe implements Probe {
35 final Logger log = LoggerFactory.getLogger(DefaultProbe.class);
36
37 // indicates if the probe is running.
38 private boolean running;
39
40 // start time stamp of this probe.
41 private long startTime;
42
43 // elapsed time in probe.
44 private long timeElapsed;
45
46 // name of probe.
47 private final String name;
48
49 // probe enable flag.
50 private boolean enabled = true;
51
52 // name of the initiating thread
53 //private String threadName;
54
55 // how to get the time
56 private Time time = TimeFactory.getTime();
57
58 /**
59 * Constructor of probe
60 *
61 * @param name name of probe
62 */
63 public DefaultProbe(String name) {
64 this.name = name;
65 //this.threadName = Thread.currentThread().getName();
66 }
67
68 protected DefaultProbe(String name, Time tim) {
69 this(name);
70 this.time = tim;
71 }
72
73 /**
74 * Get elapsed time for this probe in nanos.
75 *
76 * @return elapsed time
77 */
78 public long getElapsed() {
79 return timeElapsed;
80 }
81
82 /**
83 * Start the probe.
84 * The probe will only start if it is enabled and not running.
85 * Nothing will happen if it is running.
86 */
87 public void start() {
88 if (enabled && !running) {
89 startTime = time.getNanos();
90 running = true;
91 }
92 }
93
94 /**
95 * Stop the probe. It is not poosible to stop the probe if it is disabled
96 */
97 public void stop() {
98 if (enabled) {
99 long ti = this.time.getNanos() - startTime;
100 if (running && ti > 0) {
101 // make sure timeelapsed > 0
102 timeElapsed = ti;
103 running = false;
104 }
105 }
106 }
107
108 /**
109 * Is the probe enabled.
110 *
111 * @return enabled flag
112 */
113 public boolean isEnabled() {
114 return enabled;
115 }
116
117 /**
118 * Enable the probe.
119 */
120 public void enable() {
121 enabled = true;
122 }
123
124 /**
125 * Disable the probe.
126 */
127 public void disable() {
128 enabled = false;
129 running = false;
130 }
131
132 /**
133 * Is the probe running (by start).
134 *
135 * @return running flag
136 */
137 public boolean isRunning() {
138 return running;
139 }
140
141 public String getName() {
142 return name;
143 }
144
145 public Time getTime() {
146 return time;
147 }
148
149 public void setTime(Time time) {
150 this.time = time;
151 }
152
153 /**
154 * Get all info from probe to string
155 *
156 * @return string with all probe info
157 */
158 @Override
159 public String toString() {
160 return "probe name=" + name + ", elapsed:" + timeElapsed + " , running:" + running;
161 }
162 }