Author: nicolas
Date: Mon Jan 28 08:34:14 2008
New Revision: 615936
URL: http://svn.apache.org/viewvc?rev=615936&view=rev
Log:
- txt renderer (for logs)
- simplified renderer testing
- composite Gauge & Counter (required for period based monitoring)
- cleaner separation between simpleGauge and simpleCounter
Added:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/ExecutionStack.java
(with props)
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/events/
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java
(with props)
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java
(with props)
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
(with props)
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java
(with props)
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java
(with props)
commons/sandbox/monitoring/trunk/src/test/resources/org/
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js
(with props)
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.txt
(with props)
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.xml
(with props)
Modified:
commons/sandbox/monitoring/trunk/pom.xml
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/StopWatch.java
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleCounter.java
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleGauge.java
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleValue.java
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/StopWatchTest.java
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleGaugeTest.java
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java
Modified: commons/sandbox/monitoring/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/pom.xml?rev=615936&r1=615935&r2=615936&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/pom.xml (original)
+++ commons/sandbox/monitoring/trunk/pom.xml Mon Jan 28 08:34:14 2008
@@ -41,6 +41,19 @@
<version>3.8.1</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.4</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.3</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<developers>
Added:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/ExecutionStack.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/ExecutionStack.java?rev=615936&view=auto
==============================================================================
---
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/ExecutionStack.java
(added)
+++
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/ExecutionStack.java
Mon Jan 28 08:34:14 2008
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.commons.monitoring;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Sometime we need to compare elapsed time from a high level process with
fine-grained
+ * sub-processes to find bottlenecks or errors. The
<code>ExecutionStack</code> allows
+ * the application to store the running StopWatches and maintain an execution
plan, where
+ * it can later retrieve all StopWatches and compare times.
+ * <p>
+ * It can also be used to exclude waiting time when an external service is
called, simply by
+ * retrieving all running stopWatches and pause/resume then.
+ * <p>
+ * The <code>clear</code> method MUST be called after process has finished to
+ * clear the stack as the thread may start another process.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
+ */
+public class ExecutionStack
+{
+ private ExecutionStack()
+ {
+ super();
+ }
+
+ private static ThreadLocal<List<StopWatch>> local = new
ThreadLocal<List<StopWatch>>();
+
+ public static void push( StopWatch stopWatch )
+ {
+ getExecution().add( stopWatch );
+ }
+
+ /**
+ * Pause all running stopWatches
+ */
+ public static void pause()
+ {
+ for ( StopWatch stopWatch : getExecution() )
+ {
+ stopWatch.pause();
+ }
+ }
+
+ /**
+ * Resume all stopWatches
+ */
+ public static void resume()
+ {
+ for ( StopWatch stopWatch : getExecution() )
+ {
+ stopWatch.resume();
+ }
+ }
+
+ /**
+ * @return the ordered list of StopWatches used during execution
+ */
+ public static List<StopWatch> getExecution()
+ {
+ List<StopWatch> exec = local.get();
+ if (exec == null)
+ {
+ exec = new LinkedList<StopWatch>();
+ local.set( exec );
+ }
+ return local.get();
+ }
+
+ public static void clear()
+ {
+ getExecution().clear();
+ }
+
+}
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/ExecutionStack.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/ExecutionStack.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/ExecutionStack.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/StopWatch.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/StopWatch.java?rev=615936&r1=615935&r2=615936&view=diff
==============================================================================
---
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/StopWatch.java
(original)
+++
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/StopWatch.java
Mon Jan 28 08:34:14 2008
@@ -20,7 +20,7 @@
/**
* Estimates the time required for process execution (monitored method, service
* invocation, database request...)
- *
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
*/
public class StopWatch
@@ -48,7 +48,7 @@
* <p>
* The monitor can be set to null to use the StopWatch without the
* monitoring infrastructure.
- *
+ *
* @param monitor the monitor associated with the process to be monitored
*/
public StopWatch( Monitor monitor )
@@ -132,7 +132,7 @@
/**
* Convenience method to stop or cancel a Stopwatch depending on success of
* monitored operation
- *
+ *
* @param canceled
* @return time elapsed since the probe has been started
*/
@@ -181,7 +181,7 @@
* when an exception occurs. To avoid StopWatches to keep running if the
* application didn't follow this recommandation, the finalizer is used to
* cancel the StopWatch and will log a educational warning.
- *
+ *
* @see java.lang.Object#finalize()
*/
protected void finalize()
@@ -200,7 +200,7 @@
* nanoseconds. The real precision depends on the JVM and the underlying
* system. On JRE before java5, <tt>backport-util-concurrent</tt> provides
* some limited support for equivalent timer.
- *
+ *
* @see System#nanoTime()
* @return time in nanosecond
*/
@@ -223,5 +223,29 @@
public boolean isPaused()
{
return paused;
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuffer stb = new StringBuffer();
+ if ( monitor != null )
+ {
+ stb.append( "Execution for " ).append( monitor.getKey().toString()
).append( " " );
+ }
+ if ( paused )
+ {
+ stb.append( "paused after " ).append( getElapsedTime() ).append(
"ns" );
+ }
+ else if ( stoped )
+ {
+ stb.append( "stoped after " ).append( getElapsedTime() ).append(
"ns" );
+ }
+ else
+ {
+ stb.append( "running for " ).append( getElapsedTime() ).append(
"ns" );
+ }
+ return stb.toString();
+
}
}
Added:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java?rev=615936&view=auto
==============================================================================
---
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java
(added)
+++
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java
Mon Jan 28 08:34:14 2008
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.commons.monitoring.impl;
+
+import java.util.Collection;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.commons.monitoring.Counter;
+
+/**
+ * A composite implementation of [EMAIL PROTECTED] Counter} that delegates to
a primary
+ * implementation and maintains a collection of secondary counters.
+ * <p>
+ * Typical use is to create monitoring graphs : On regular time intervals, a
+ * new secondary counter is registered to computes stats for the current
period,
+ * and then removed.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
+ */
+public class CompositeCounter implements Counter
+{
+ private Counter primary;
+
+ private Collection<Counter> secondary;
+
+ public CompositeCounter( Counter primary )
+ {
+ super();
+ this.primary = primary;
+ this.secondary = new CopyOnWriteArrayList<Counter>();
+ }
+
+ public void addSecondary( Counter counter )
+ {
+ secondary.add( counter );
+ }
+
+ public void removeSecondary( Counter counter )
+ {
+ secondary.remove( counter );
+ }
+
+ public void add( long delta )
+ {
+ primary.add( delta );
+ for ( Counter counter : secondary )
+ {
+ counter.add( delta );
+ }
+ }
+
+ public void set( long l )
+ {
+ primary.set( l );
+ for ( Counter counter : secondary )
+ {
+ counter.set( l );
+ }
+ }
+
+ public long get()
+ {
+ return primary.get();
+ }
+
+ public int getHits()
+ {
+ return primary.getHits();
+ }
+
+ public long getMax()
+ {
+ return primary.getMax();
+ }
+
+ public double getMean()
+ {
+ return primary.getMean();
+ }
+
+ public long getMin()
+ {
+ return primary.getMin();
+ }
+
+ public double getStandardDeviation()
+ {
+ return primary.getStandardDeviation();
+ }
+
+ public long getSum()
+ {
+ return primary.getSum();
+ }
+
+ public String getUnit()
+ {
+ return primary.getUnit();
+ }
+
+
+
+}
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java?rev=615936&view=auto
==============================================================================
---
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java
(added)
+++
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java
Mon Jan 28 08:34:14 2008
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.commons.monitoring.impl;
+
+import java.util.Collection;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.commons.monitoring.Gauge;
+
+/**
+ * A composite implementation of [EMAIL PROTECTED] Gauge} that delegates to a
primary
+ * implementation and maintains a collection of secondary Gauges.
+ * <p>
+ * Typical use is to create monitoring graphs : On regular time intervals, a
+ * new secondary Gauge is registered to computes stats for the current period,
+ * and then removed.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
+ */
+public class CompositeGauge implements Gauge
+{
+ private Gauge primary;
+
+ private Collection<Gauge> secondary;
+
+
+
+ public CompositeGauge( Gauge primary )
+ {
+ super();
+ this.primary = primary;
+ this.secondary = new CopyOnWriteArrayList<Gauge>();
+ }
+
+ public synchronized void addSecondary( Gauge gauge )
+ {
+ gauge.set( primary.get() );
+ secondary.add( gauge );
+ }
+
+ public void removeSecondary( Gauge gauge )
+ {
+ secondary.remove( gauge );
+ }
+
+ public synchronized void increment()
+ {
+ primary.increment();
+ for ( Gauge gauge : secondary )
+ {
+ gauge.increment();
+ }
+ }
+
+ public synchronized void decrement()
+ {
+ primary.decrement();
+ for ( Gauge gauge : secondary )
+ {
+ gauge.increment();
+ }
+ }
+
+ public synchronized void set( long l )
+ {
+ primary.set( l );
+ for ( Gauge gauge : secondary )
+ {
+ gauge.set( l );
+ }
+ }
+
+ public long get()
+ {
+ return primary.get();
+ }
+
+ public long getMax()
+ {
+ return primary.getMax();
+ }
+
+ public double getMean()
+ {
+ return primary.getMean();
+ }
+
+ public long getMin()
+ {
+ return primary.getMin();
+ }
+
+ public double getStandardDeviation()
+ {
+ return primary.getStandardDeviation();
+ }
+
+ public String getUnit()
+ {
+ return primary.getUnit();
+ }
+
+}
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleCounter.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleCounter.java?rev=615936&r1=615935&r2=615936&view=diff
==============================================================================
---
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleCounter.java
(original)
+++
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleCounter.java
Mon Jan 28 08:34:14 2008
@@ -22,7 +22,62 @@
public class SimpleCounter
extends SimpleValue implements Counter
{
+ private long value;
+
+ private long sum;
+
+ private long sumOfSquares;
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public long get()
+ {
+ return value;
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public synchronized void set( long l )
+ {
+ value = l;
+ computeStats( l );
+ }
+
+ public synchronized void add( long delta )
+ {
+ value += delta;
+ computeStats( delta );
+ }
+
+ @Override
+ protected void computeStats( long l )
+ {
+ sum += l;
+ sumOfSquares += l * l;
+ super.computeStats( l );
+ }
+
+ @Override
+ public double getMean()
+ {
+ return ((double) sum) / getHits();
+ }
+
+ @Override
+ protected long getSquares()
+ {
+ return sumOfSquares;
+ }
+
+ @Override
+ public long getSum()
+ {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
- // Nothing to do : Counter method already implemented by SimpleValue
}
Modified:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleGauge.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleGauge.java?rev=615936&r1=615935&r2=615936&view=diff
==============================================================================
---
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleGauge.java
(original)
+++
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleGauge.java
Mon Jan 28 08:34:14 2008
@@ -29,17 +29,27 @@
extends SimpleValue
implements Gauge
{
- private long total;
+ private long value;
+
+ private long sum;
+
+ private long sumOfSquares;
private long lastUse;
// Use a double so that unset can be detected as "Not a Number"
private double firstUse = Double.NaN;
- @Override
public synchronized void increment()
{
long now = nanoTime();
+ computeSums( now );
+ computeStats( ++value );
+ lastUse = now;
+ }
+
+ private void computeSums( long now )
+ {
if ( Double.isNaN( firstUse ) )
{
firstUse = now;
@@ -47,10 +57,10 @@
else
{
long delta = now - lastUse;
- total += get() * delta;
+ long s = get() * delta;
+ sum += s;
+ sumOfSquares += s * s;
}
- super.increment();
- lastUse = now;
}
protected long nanoTime()
@@ -58,19 +68,46 @@
return System.nanoTime();
}
- @Override
public synchronized void decrement()
{
long now = nanoTime();
- long delta = now - lastUse;
- total += get() * delta;
- super.decrement();
+ computeSums( now );
+ computeStats( --value );
lastUse = now;
}
@Override
public synchronized double getMean()
{
- return ( (double) total ) / ( nanoTime() - firstUse );
+ return ( (double) sum ) / ( nanoTime() - firstUse );
}
+
+ @Override
+ protected long getSquares()
+ {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public long getSum()
+ {
+ return sum;
+ }
+
+ public long get()
+ {
+ return value;
+ }
+
+ public void set( long l )
+ {
+ long now = nanoTime();
+ computeSums( now );
+ computeStats( ++value );
+ value = l;
+ lastUse = now;
+ }
+
+
}
Modified:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleValue.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleValue.java?rev=615936&r1=615935&r2=615936&view=diff
==============================================================================
---
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleValue.java
(original)
+++
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleValue.java
Mon Jan 28 08:34:14 2008
@@ -20,46 +20,27 @@
import org.apache.commons.monitoring.StatValue;
/**
- * A simple implementation of [EMAIL PROTECTED] StatValue}
+ * A simple implementation of [EMAIL PROTECTED] StatValue}. Only provide
methods to compute stats from
+ * sum provided by derived classes.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
*/
public abstract class SimpleValue
implements StatValue
{
- private long value;
-
- private long sum;
-
private int hits;
private long max;
private long min;
- private long sumOfSquares;
-
private String unit;
/**
* [EMAIL PROTECTED]
*/
- public double getMean()
- {
- if ( hits == 0 )
- {
- return Double.NaN;
- }
- return ( (double) sum ) / hits;
- }
+ public abstract double getMean();
- /**
- * [EMAIL PROTECTED]
- */
- public long get()
- {
- return value;
- }
/**
* [EMAIL PROTECTED]
@@ -77,24 +58,15 @@
return min;
}
- /**
- * [EMAIL PROTECTED]
- */
- public synchronized void set( long l )
- {
- value = l;
- onValueSet( l );
- }
-
- protected void onValueSet(long l)
+ protected void computeStats( long l )
{
if ( ( hits == 0 ) || ( l < min ) )
{
- min = value;
+ min = l;
}
- if ( ( hits == 0 ) || ( value > max ) )
+ if ( ( hits == 0 ) || ( l > max ) )
{
- max = value;
+ max = l;
}
hits++;
}
@@ -113,39 +85,20 @@
{
return Double.NaN;
}
- double variance = ( sumOfSquares - sum * getMean() ) / ( n - 1 );
+ double variance = ( getSquares() - getSum() * getMean() ) / ( n - 1 );
return Math.sqrt( variance );
}
- protected long getSquares()
- {
- return sumOfSquares;
- }
+ protected abstract long getSquares();
- public synchronized void increment()
- {
- onValueSet( ++value );
- }
- public synchronized void decrement()
- {
- onValueSet( --value );
- }
public String getUnit()
{
return unit;
}
- public void add( long delta )
- {
- onValueSet( value += delta );
- }
-
- public long getSum()
- {
- return sum;
- }
+ public abstract long getSum();
public int getHits()
{
Added:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java?rev=615936&view=auto
==============================================================================
---
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
(added)
+++
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
Mon Jan 28 08:34:14 2008
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.commons.monitoring.reporting;
+
+import java.io.PrintWriter;
+import java.util.Collection;
+
+import org.apache.commons.monitoring.Counter;
+import org.apache.commons.monitoring.StatValue;
+import org.apache.commons.monitoring.Monitor.Key;
+
+/**
+ * A simple TXT renderer, typically to dump monitoring status in a log file
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
+ */
+public class TxtRenderer
+ extends AbstractRenderer
+{
+ private static final String HR =
"\n--------------------------------------------------------------------------------\n";
+
+ public TxtRenderer( PrintWriter writer, Collection<String> roles )
+ {
+ super( writer, roles );
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ * @see
org.apache.commons.monitoring.reporting.AbstractRenderer#render(org.apache.commons.monitoring.StatValue,
java.lang.String)
+ */
+ @Override
+ public void render( StatValue value, String role )
+ {
+ write( role );
+ write( "\n value : " );
+ write( String.valueOf( value.get() ) );
+ write( "\n min : " );
+ write( String.valueOf( value.getMin() ) );
+ write( "\n max : " );
+ write( String.valueOf( value.getMax() ) );
+ write( "\n mean : " );
+ write( String.valueOf( value.getMean() ) );
+ write( "\n stdDev : " );
+ write( String.valueOf( value.getStandardDeviation() ) );
+ if ( value instanceof Counter )
+ {
+ Counter counter = (Counter) value;
+ write( "\n total : " );
+ write( String.valueOf( counter.getSum() ) );
+ write( "\n hits : " );
+ write( String.valueOf( counter.getHits() ) );
+ }
+ write( "\n" );
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ * @see
org.apache.commons.monitoring.reporting.AbstractRenderer#render(org.apache.commons.monitoring.Monitor.Key)
+ */
+ @Override
+ public void render( Key key )
+ {
+ write( HR );
+ write( key.toString() );
+ write( HR );
+ }
+
+}
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java?rev=615936&view=auto
==============================================================================
---
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java
(added)
+++
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java
Mon Jan 28 08:34:14 2008
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.commons.monitoring;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
+ */
+public class ExecutionStackTest
+ extends TestCase
+{
+ public void testExcution()
+ throws Exception
+ {
+ StopWatch s1 = new StopWatch( null );
+ ExecutionStack.push( s1 );
+ StopWatch s2 = new StopWatch( null );
+ ExecutionStack.push( s2 );
+ StopWatch s3 = new StopWatch( null );
+ ExecutionStack.push( s3 );
+
+ ExecutionStack.pause();
+ assertTrue( s1.isPaused() );
+ assertTrue( s2.isPaused() );
+ assertTrue( s3.isPaused() );
+
+ ExecutionStack.resume();
+ assertTrue( ! s1.isPaused() );
+ assertTrue( ! s2.isPaused() );
+ assertTrue( ! s3.isPaused() );
+
+ ExecutionStack.clear();
+ }
+}
Propchange:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/StopWatchTest.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/StopWatchTest.java?rev=615936&r1=615935&r2=615936&view=diff
==============================================================================
---
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/StopWatchTest.java
(original)
+++
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/StopWatchTest.java
Mon Jan 28 08:34:14 2008
@@ -30,7 +30,7 @@
/**
* assert the StopWatch computes the time elapsed during the monitored
* process execution. User a MockTimeWatch to make timing predictable
- *
+ *
* @throws Exception
*/
public void testComputeTime()
@@ -41,19 +41,22 @@
time++;
stopWatch.pause();
assertTrue( stopWatch.isPaused() );
+ System.out.println( stopWatch.toString() );
time++;
stopWatch.resume();
assertTrue( !stopWatch.isPaused() );
+ System.out.println( stopWatch.toString() );
time++;
stopWatch.stop();
assertEquals( 2, stopWatch.getElapsedTime() );
assertTrue( stopWatch.isStoped() );
+ System.out.println( stopWatch.toString() );
}
/**
* Check that the elapsed time computed by the WtopWatch is not affected by
* unexpected method calls.
- *
+ *
* @throws Exception
*/
public void testSupportUnexpectedCalls()
Added:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java?rev=615936&view=auto
==============================================================================
---
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java
(added)
+++
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java
Mon Jan 28 08:34:14 2008
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.commons.monitoring.impl;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.monitoring.Counter;
+
+public class SimpleCounterTest
+ extends TestCase
+{
+
+ public void testValue()
+ throws Exception
+ {
+ Counter counter = new SimpleCounter();
+
+ counter.set( 1 );
+ assertEquals( 1, counter.getMin() );
+ assertEquals( 1, counter.getMax() );
+ assertEquals( 1, counter.get() );
+
+ counter.add( 10 );
+ assertEquals( 1, counter.getMin() );
+ assertEquals( 10, counter.getMax() );
+ assertEquals( 11, counter.get() );
+
+ counter.add( -2 );
+ assertEquals( -2, counter.getMin() );
+ assertEquals( 10, counter.getMax() );
+ assertEquals( 9, counter.get() );
+
+ assertEquals( 3, counter.getHits() );
+ assertEquals( 3.0D, counter.getMean(), 0D );
+ }
+
+
+}
Propchange:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleGaugeTest.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleGaugeTest.java?rev=615936&r1=615935&r2=615936&view=diff
==============================================================================
---
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleGaugeTest.java
(original)
+++
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleGaugeTest.java
Mon Jan 28 08:34:14 2008
@@ -26,6 +26,28 @@
{
private long time;
+ public void testValue()
+ throws Exception
+ {
+ Gauge gauge = new SimpleGauge();
+
+ gauge.set( 1 );
+ assertEquals( 1, gauge.getMin() );
+ assertEquals( 1, gauge.getMax() );
+ assertEquals( 1, gauge.get() );
+
+ gauge.increment();
+ assertEquals( 1, gauge.getMin() );
+ assertEquals( 2, gauge.getMax() );
+ assertEquals( 2, gauge.get() );
+
+ gauge.decrement();
+ gauge.decrement();
+ assertEquals( 0, gauge.getMin() );
+ assertEquals( 2, gauge.getMax() );
+ assertEquals( 0, gauge.get() );
+ }
+
/**
* Use a fake time to emulate to concurrent threads
* <ul>
Modified:
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java?rev=615936&r1=615935&r2=615936&view=diff
==============================================================================
---
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java
(original)
+++
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java
Mon Jan 28 08:34:14 2008
@@ -17,6 +17,7 @@
package org.apache.commons.monitoring.reporting;
+import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
@@ -25,6 +26,8 @@
import junit.framework.TestCase;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.monitoring.Monitor;
import org.apache.commons.monitoring.impl.SimpleCounter;
import org.apache.commons.monitoring.impl.SimpleGauge;
@@ -61,15 +64,7 @@
StringWriter out = new StringWriter();
Renderer renderer = new JsonRenderer( new PrintWriter( out ), roles );
renderer.render( monitors );
- assertEquals(
- "["
- +
"{key:{name:\"JsonRendererTest.setUp\",category:\"test\",subsystem:\"reporting\"},"
- +
"concurrency:{value:\"0\",min:\"0\",max:\"0\",mean:\"NaN\",stdDev:\"NaN\"},"
- +
"performances:{value:\"10\",min:\"10\",max:\"10\",mean:\"0.0\",stdDev:\"NaN\",total:\"0\",hits:\"1\"}},"
- +
"{key:{name:\"TestCase\",category:\"test\",subsystem:\"junit\"},"
- +
"concurrency:{value:\"1\",min:\"1\",max:\"1\",mean:\"0.0\",stdDev:\"NaN\"},"
- +
"performances:{value:\"0\",min:\"0\",max:\"0\",mean:\"NaN\",stdDev:\"NaN\",total:\"0\",hits:\"0\"}}"
- + "]", out.toString() );
+ assertEqualsIgnoreLineEnds( expected( "js" ), out.toString() );
}
public void testRenderToXml()
@@ -78,15 +73,30 @@
StringWriter out = new StringWriter();
Renderer renderer = new XmlRenderer( new PrintWriter( out ), roles );
renderer.render( monitors );
- assertEquals(
- "<monitors>"
- + "<monitor name=\"JsonRendererTest.setUp\" category=\"test\"
subsystem=\"reporting\">"
- + "<concurrency value=\"0\" min=\"0\" max=\"0\" mean=\"NaN\"
stdDev=\"NaN\"/>"
- + "<performances value=\"10\" min=\"10\" max=\"10\"
mean=\"0.0\" stdDev=\"NaN\" total=\"0\" hits=\"1\"/>"
- + "</monitor>"
- + "<monitor name=\"TestCase\" category=\"test\"
subsystem=\"junit\">"
- + "<concurrency value=\"1\" min=\"1\" max=\"1\" mean=\"0.0\"
stdDev=\"NaN\"/>"
- + "<performances value=\"0\" min=\"0\" max=\"0\" mean=\"NaN\"
stdDev=\"NaN\" total=\"0\" hits=\"0\"/>"
- + "</monitor></monitors>", out.toString() );
+ assertEqualsIgnoreLineEnds( expected( "xml" ), out.toString() );
+ }
+
+ public void testRenderToTxt()
+ throws Exception
+ {
+ StringWriter out = new StringWriter();
+ Renderer renderer = new TxtRenderer( new PrintWriter( out ), roles );
+ renderer.render( monitors );
+ assertEqualsIgnoreLineEnds( expected( "txt" ), out.toString() );
+ }
+
+ private void assertEqualsIgnoreLineEnds( String expected, String actual )
+ {
+ expected = StringUtils.remove( StringUtils.remove( expected, "\n" ),
"\r" );
+ actual = StringUtils.remove( StringUtils.remove( actual, "\n" ), "\r"
);
+ assertEquals( expected, actual );
+ }
+
+ private String expected( String format )
+ throws IOException
+ {
+ String expected = IOUtils.toString( getClass().getResourceAsStream(
"RendererTest." + format ) );
+ expected = StringUtils.remove( StringUtils.remove( expected, '\n' ),
'\r' );
+ return expected;
}
}
Added:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js?rev=615936&view=auto
==============================================================================
---
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js
(added)
+++
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js
Mon Jan 28 08:34:14 2008
@@ -0,0 +1,7 @@
+[{key:{name:"JsonRendererTest.setUp",category:"test",subsystem:"reporting"},
+concurrency:{value:"0",min:"0",max:"0",mean:"NaN",stdDev:"NaN"},
+performances:{value:"10",min:"10",max:"10",mean:"10.0",stdDev:"NaN",total:"0",hits:"1"}},
+{key:{name:"TestCase",category:"test",subsystem:"junit"},
+concurrency:{value:"1",min:"1",max:"1",mean:"0.0",stdDev:"NaN"},
+performances:{value:"0",min:"0",max:"0",mean:"NaN",stdDev:"NaN",total:"0",hits:"0"}}
+]
\ No newline at end of file
Propchange:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.txt
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.txt?rev=615936&view=auto
==============================================================================
---
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.txt
(added)
+++
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.txt
Mon Jan 28 08:34:14 2008
@@ -0,0 +1,39 @@
+--------------------------------------------------------------------------------
+name=JsonRendererTest.setUp
+category=test
+subsystem=reporting
+--------------------------------------------------------------------------------
+concurrency
+ value : 0
+ min : 0
+ max : 0
+ mean : NaN
+ stdDev : NaN
+performances
+ value : 10
+ min : 10
+ max : 10
+ mean : 10.0
+ stdDev : NaN
+ total : 0
+ hits : 1
+
+--------------------------------------------------------------------------------
+name=TestCase
+category=test
+subsystem=junit
+--------------------------------------------------------------------------------
+concurrency
+ value : 1
+ min : 1
+ max : 1
+ mean : 0.0
+ stdDev : NaN
+performances
+ value : 0
+ min : 0
+ max : 0
+ mean : NaN
+ stdDev : NaN
+ total : 0
+ hits : 0
\ No newline at end of file
Propchange:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.txt
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.txt
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.xml
URL:
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.xml?rev=615936&view=auto
==============================================================================
---
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.xml
(added)
+++
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.xml
Mon Jan 28 08:34:14 2008
@@ -0,0 +1,10 @@
+<monitors>
+<monitor name="JsonRendererTest.setUp" category="test" subsystem="reporting">
+<concurrency value="0" min="0" max="0" mean="NaN" stdDev="NaN"/>
+<performances value="10" min="10" max="10" mean="10.0" stdDev="NaN" total="0"
hits="1"/>
+</monitor>
+<monitor name="TestCase" category="test" subsystem="junit">
+<concurrency value="1" min="1" max="1" mean="0.0" stdDev="NaN"/>
+<performances value="0" min="0" max="0" mean="NaN" stdDev="NaN" total="0"
hits="0"/>
+</monitor>
+</monitors>
\ No newline at end of file
Propchange:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.xml
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml