de.mcs.jmeasurement.DefaultMonitor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of JMeasurement Show documentation
Show all versions of JMeasurement Show documentation
JMeasurement profiling programs in production enviroment
/*
* MCS Media Computer Software Copyright (c) 2005 by MCS
* -------------------------------------- Created on 23.04.2005 by w.klaas
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package de.mcs.jmeasurement;
import java.text.SimpleDateFormat;
import java.util.Date;
import de.mcs.utils.StringFormat;
/**
* This is the default implementation of the monitor class. Here all measurement
* will be done. This monitor is not thread safe. Threadsafty will be
* implemented thru the monitorFactory and the MeasurePoint class
* implementation.
*
* @author w.klaas
*/
public class DefaultMonitor implements Monitor {
/** time when the monitor starts measurement. */
private long startTime;
/** time when the monitor starts measurement. */
private long pauseTime;
/** measurement is actually running. */
private boolean running;
/** measurement is actually paused. */
private boolean paused;
/** time elapsed since last measuremtent. */
private long accrued;
/** the parent MeasurePoint (for call back functions). */
private MeasurePoint point;
/** id of this monitor. */
private String monitorId;
/** this monitor has recorded an exception. */
private boolean isException;
/** the text of the exception. */
private String exceptionText;
/**
* This is the default constructor.
*/
public DefaultMonitor() {
reset();
point = null;
monitorId = "";
}
/**
* This is the default constructor.
*
* @param aPoint
* the measure point (for callback functions)
*/
public DefaultMonitor(final MeasurePoint aPoint) {
this();
point = aPoint;
}
/**
* This is the default constructor.
*
* @param aPoint
* the measure point (for callback functions)
* @param aMonitorId
* id of this monitor
*/
public DefaultMonitor(final MeasurePoint aPoint, final String aMonitorId) {
this(aPoint);
monitorId = aMonitorId;
}
/**
* This is the default constructor.
*
* @param aMonitorId
* id of this monitor
*/
public DefaultMonitor(final String aMonitorId) {
this();
monitorId = aMonitorId;
}
/**
* starting the measurement of this monitor.
*
* @return boolean true
if the monitor could be startet,
* otherwise false
* @see de.mcs.jmeasurement.Monitor#start()
*/
public final boolean start() {
startTime = System.currentTimeMillis();
running = true;
if (null != point) {
point.activateMonitor(this);
}
return true;
}
/**
* pausing the measurement.
*
* @return boolean true
if the monitor could be paused,
* otherwise false
* @see de.mcs.jmeasurement.Monitor#pause()
*/
public final boolean pause() {
if (running) {
pauseTime = System.currentTimeMillis();
paused = true;
return true;
} else {
return false;
}
}
/**
* resume the measurement.
*
* @return boolean true
if the monitor could be resumed,
* otherwise false
* @see de.mcs.jmeasurement.Monitor#resume()
*/
public final boolean resume() {
if (running) {
accrued += pauseTime - startTime;
startTime = System.currentTimeMillis();
paused = false;
return true;
} else {
return false;
}
}
/**
* @see de.mcs.jmeasurement.Monitor#increase(long)
* @param msec
* time to increase
*/
public final void increase(final long msec) {
accrued += msec;
}
/**
* @see de.mcs.jmeasurement.Monitor#decrease(long)
* @param msec
* time to decrease
*/
public final void decrease(final long msec) {
accrued -= msec;
}
/**
* stopping the measurment.
*
* @return boolean true
if the monitor could be stopped,
* otherwise false
* @see de.mcs.jmeasurement.Monitor#stop()
*/
public final boolean stop() {
if (running) {
accrued = accrued + timeElapsed();
running = false;
if (null != point) {
point.processMonitor(this);
}
return true;
} else {
return false;
}
}
/**
* @return long the time elapsed since last call to start() or resume().
*/
private long timeElapsed() {
return System.currentTimeMillis() - startTime;
}
/**
* @return long getting the measured time.
* @see de.mcs.jmeasurement.Monitor#getAccrued()
*/
public final long getAccrued() {
return accrued;
}
/**
* @see de.mcs.jmeasurement.Monitor#reset()
*/
public final void reset() {
accrued = 0;
running = false;
startTime = 0;
isException = false;
}
/**
* @return boolean the monitor is actual running
* @see de.mcs.jmeasurement.Monitor#isRunning()
*/
public final boolean isRunning() {
return running;
}
/**
* @return boolean the monitor is actual paused
* @see de.mcs.jmeasurement.Monitor#isPaused()
*/
public final boolean isPaused() {
return paused;
}
/**
* This methode will be called if the garbage collector will be remove this
* object. So we can use the callback to add a death object if the monitor
* is still runnning.
*
* @throws Throwable
* if something goes wrong
* @see java.lang.Object#finalize()
*/
protected final void finalize() throws Throwable {
super.finalize();
if (running) {
point.deathMonitor(this);
}
}
/**
* @return the id of this monitor
* @see de.mcs.jmeasurement.Monitor#getMonitoId()
*/
public final String getMonitoId() {
return monitorId;
}
/**
* @return the striong representation of this monitor.
* @see java.lang.Object#toString()
*/
public final String toString() {
return getMonitoId() + ":" + getAccrued();
}
/**
* @return if this monitor has get an exception.
* @see de.mcs.jmeasurement.Monitor#hasException()
* @since 0.64
*/
public final boolean hasException() {
return isException;
}
/**
* @return the exception text.
* @see de.mcs.jmeasurement.Monitor#getException()
* @since 0.64
*/
public final String getException() {
return exceptionText;
}
/**
* @param text
* the text to set for the exception.
* @see de.mcs.jmeasurement.Monitor#setException(String)
* @since 0.64
*/
public final void setException(final String text) {
isException = true;
exceptionText = text;
stop();
}
/**
* @param throwable
* the exception to set.
* @see de.mcs.jmeasurement.Monitor#setException(String)
* @since 0.64
*/
public final void setException(final Throwable throwable) {
isException = true;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
switch (MeasureFactory.getExceptionHandling()) {
case JMConfig.EXCEPTION_COUNT:
exceptionText = "";
break;
case JMConfig.EXCEPTION_NAME:
exceptionText = simpleDateFormat.format(new Date()) + ':' + throwable.toString();
break;
case JMConfig.EXCEPTION_TRACE:
exceptionText = simpleDateFormat.format(new Date()) + ':' + StringFormat.getStackTrace(throwable);
break;
default:
exceptionText = "";
break;
}
;
stop();
}
}