/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.core.util;
import java.util.HashMap;
import java.util.Iterator;
import org.teiid.core.util.PerformanceTracker;
import org.teiid.core.util.PerformanceTrackerManager;
/**
* @since 5.0
*/
public class PerformanceTrackerManager {
private HashMap trackers = new HashMap(10);
private static final PerformanceTrackerManager instance = new PerformanceTrackerManager();
public static final PerformanceTrackerManager getInstance() {
return instance;
}
/**
*
* @since 5.0
*/
public PerformanceTrackerManager() {
super();
}
/**
* Returns a
* @param id
* @return
* @since 5.0
*/
public PerformanceTracker getTracker(String id) {
return getTracker(id, true);
}
/**
* Returns a PerformanceTracker with the given String ID. If one does not exists, it is created.
* @param id
* @param doTime
* @return
* @since 5.0
*/
public PerformanceTracker getTracker(String id, boolean doTime) {
PerformanceTracker tracker = null;
boolean createTracker = false;
if( trackers.isEmpty() ) {
createTracker = true;
} else {
tracker = (PerformanceTracker)trackers.get(id);
if( tracker == null ) {
createTracker = true;
}
}
if( createTracker ) {
tracker = new PerformanceTracker(id, doTime);
trackers.put(id, tracker);
}
return tracker;
}
// -----------------------------------
// Tracker Cache Management
// -----------------------------------
/**
* Add an existing tracker to the manager
* @param tracker
* @since 5.0
*/
public void addTracker(PerformanceTracker tracker) {
trackers.put(tracker.getID(), tracker);
}
/**
* Remove an existing tracker from the manager
* @param tracker
* @since 5.0
*/
public void removeTracker(PerformanceTracker tracker) {
trackers.remove(tracker.getID());
}
/**
* Remove an existing tracker with the given ID from the manager
* @param tracker
* @since 5.0
*/
public void removeTracker(String trackerID) {
trackers.remove(trackerID);
}
/**
* Reset's the count and timers for the tracker with the given ID
* @param trackerID
* @since 5.0
*/
public void reset(String trackerID) {
PerformanceTracker tracker = getTracker(trackerID);
if( tracker != null ) {
tracker.reset();
}
}
public void resetAll() {
for( Iterator iter = trackers.values().iterator(); iter.hasNext(); ) {
PerformanceTracker tracker = (PerformanceTracker)iter.next();
tracker.reset();
}
}
public void clear() {
trackers.clear();
}
// -----------------------------------
// Individual Tracker utility method calls
// -----------------------------------
/**
* @param trackerID
* @param methodID
* @since 5.0
*/
public void start(String trackerID, String methodID) {
PerformanceTracker tracker = getTracker(trackerID);
if( tracker != null ) {
tracker.start(methodID);
}
}
/**
*
* @param trackerID
* @param methodID
* @since 5.0
*/
public void stop(String trackerID, String methodID) {
PerformanceTracker tracker = getTracker(trackerID);
if( tracker != null ) {
tracker.start(methodID);
}
}
/**
*
* @param trackerID
* @since 5.0
*/
public void print(String trackerID) {
PerformanceTracker tracker = getTracker(trackerID);
if( tracker != null ) {
tracker.print();
}
}
public void print(boolean clear) {
for( Iterator iter = trackers.keySet().iterator(); iter.hasNext(); ) {
String trackerID = (String)iter.next();
print(trackerID);
}
if( clear ) {
resetAll();
}
}
}