View Javadoc

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  package net.sf.jperfprobe;
25  
26  import org.slf4j.Logger;
27  import org.slf4j.LoggerFactory;
28  
29  import java.util.Collection;
30  
31  /**
32   * The ProbeManager is the probe factory. It makes it possible start start and stop a probe.
33   * The probe can be started in different ways:<br><br>
34   * <p/>
35   * 1. Start and stop from same scope, same thread, via probe name<br>
36   * 2. Start probes multithreaded from same scope, via probe name<br>
37   * 3. Start in one scope and stop in another scope singlethreaded via probe name<br>
38   * 4. Start in one scope and stop in another scope multithreaded via probe instance<br>
39   */
40  
41  public final class StaticProbeManager {
42      final Logger log = LoggerFactory.getLogger(StaticProbeManager.class);
43  
44      private static ProbeManager probeManager = new ProbeManagerImpl();
45  
46      private StaticProbeManager() {
47      }
48  
49      /**
50       * Put a probe into the manager, if the probe exist it will be overwritten. This makes it possible
51       * to create a Probe outside the ProbeManager and insert it later.
52       *
53       * @param probeName
54       * @param probe
55       */
56      public static void put(String probeName, Probe probe) {
57          probeManager.put(probeName, probe);
58      }
59  
60  
61      /**
62       * Get a result for a given probe
63       *
64       * @param probeName
65       * @return Result
66       */
67      public static Result getResult(String probeName) {
68          return probeManager.getResult(probeName);
69      }
70  
71      /**
72       * Get all the results
73       *
74       * @return
75       */
76      public static Collection<Result> getResults() {
77          return probeManager.getResults();
78      }
79  
80      /**
81       * Get instance of a named probe, if it is non existent, a default probe will be created.
82       * And time will be set to null.
83       *
84       * @param probeName identifying name of probe
85       * @return probe, null if it cant look it up
86       */
87      public static Probe getProbeInstance(String probeName) {
88          return probeManager.getProbeInstance(probeName);
89      }
90  
91      /**
92       * Start probe, identified by probeName, if the probe does not exist, it will be created.
93       *
94       * @param probeName name of existing or new probe.
95       */
96      public static Probe start(String probeName) {
97          return probeManager.start(probeName);
98      }
99  
100     public static Probe startSingle(String probeName) {
101         return probeManager.startSingle(probeName);
102     }
103 
104     /**
105      * Stop timing. If its non existent, no time or sample will be registered.
106      *
107      * @param probeName name of probe to stop
108      */
109     public static void stop(String probeName) {
110         probeManager.stop(probeName);
111     }
112 
113     /**
114      * Add a sample from a probe. The probe does not need to be managed by ProbeManager
115      *
116      * @param p
117      */
118     public static void addSampleFromProbe(Probe p) {
119         probeManager.addSampleFromProbe(p);
120     }
121 
122     /**
123      * Clear all probes, all results and probes will be removed.
124      */
125     public static void clear() {
126         probeManager.clear();
127     }
128 
129     /**
130      * Disable all probes.
131      */
132     public static void disableAll() {
133         probeManager.disable();
134     }
135 
136     /**
137      * Enable all probes.
138      */
139     public static void enableAll() {
140         probeManager.enable();
141     }
142 
143     /**
144      * Set the presentation unit for presentation.
145      *
146      * @param p presentation to set
147      */
148     public static void setPresentation(ProbeManagerImpl.Presentation p) {
149         probeManager.setPresentation(p);
150     }
151 
152     public static int getFirstSamplesToSkip() {
153         return probeManager.getFirstSamplesToSkip();
154     }
155 
156     /**
157      * Set how many samples to skip in the calculation of statistics. If set to ie. 5, the first 5 samples will
158      * not be taken into account when calculating max/min/n#samples and average.
159      *
160      * @param _firstSamplesToSkip
161      */
162     public static void setFirstSamplesToSkip(int _firstSamplesToSkip) {
163         probeManager.setFirstSamplesToSkip(_firstSamplesToSkip);
164     }
165 
166     /**
167      * Get the current presentation for the manager
168      *
169      * @return presentation
170      */
171     public static ProbeManagerImpl.Presentation getPresentation() {
172         return probeManager.getPresentation();
173     }
174 
175     /**
176      * Set the Time implementation.
177      *
178      * @param tim
179      */
180     public static void setTime(Time tim) {
181         probeManager.setTime(tim);
182     }
183 
184     /**
185      * Get result as a string
186      *
187      * @param probe
188      * @return result
189      */
190     public static String toString(String probe) {
191         return probeManager.toString(probe);
192     }
193 
194     /**
195      * Get all samples from a probe, as a string newline delimited
196      *
197      * @param probe
198      * @return samples
199      */
200     public static long[] getSamples(String probe) {
201         return probeManager.getSamples(probe);
202     }
203 
204     /**
205      * Get all probe names in the ProbeManager
206      *
207      * @return probename
208      */
209     public static String[] getNames() {
210         return probeManager.getNames();
211     }
212 }