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 }