You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by rm...@apache.org on 2013/11/04 11:23:23 UTC
svn commit: r1538543 - in /incubator/sirona/trunk:
aop/src/test/java/org/apache/sirona/aop/ collector/src/main/resources/
collector/src/test/java/org/apache/sirona/collector/server/
core/src/main/java/org/apache/sirona/gauges/ core/src/main/java/org/ap...
Author: rmannibucau
Date: Mon Nov 4 10:23:22 2013
New Revision: 1538543
URL: http://svn.apache.org/r1538543
Log:
adding gauge report
Added:
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/GaugeEndpoints.java
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/GaugePlugin.java
incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/
incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/detail.vm
incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/home.vm
incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/GaugesTest.java
- copied, changed from r1538515, incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/ThreadsTest.java
Removed:
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/jvm/gauges/
Modified:
incubator/sirona/trunk/aop/src/test/java/org/apache/sirona/aop/DynamicInterceptionTest.java
incubator/sirona/trunk/aop/src/test/java/org/apache/sirona/aop/MonitoringProxyFactoryTest.java
incubator/sirona/trunk/collector/src/main/resources/collector-sirona.properties
incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/DefaultGaugeManager.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/Gauge.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/GaugeManager.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/Repository.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchCounterDataStore.java
incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeCounterDataStore.java
incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteCounterDataStore.java
incubator/sirona/trunk/jpa/src/test/java/org/apache/sirona/jpa/EMFTest.java
incubator/sirona/trunk/jpa/src/test/java/org/apache/sirona/jpa/QueryTest.java
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/handler/api/Template.java
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/JSONFormat.java
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/MapFormat.java
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/XMLFormat.java
incubator/sirona/trunk/reporting/src/main/resources/META-INF/services/org.apache.sirona.reporting.web.plugin.Plugin
incubator/sirona/trunk/reporting/src/main/resources/resources/js/sirona.js
incubator/sirona/trunk/reporting/src/main/resources/templates/jta/jta.vm
incubator/sirona/trunk/reporting/src/main/resources/templates/jvm/jvm.vm
incubator/sirona/trunk/reporting/src/main/resources/templates/web/web.vm
incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/discovery/GaugeDiscoveryListener.java
incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/session/MonitoringSessionListener.java
Modified: incubator/sirona/trunk/aop/src/test/java/org/apache/sirona/aop/DynamicInterceptionTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/aop/src/test/java/org/apache/sirona/aop/DynamicInterceptionTest.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/aop/src/test/java/org/apache/sirona/aop/DynamicInterceptionTest.java (original)
+++ incubator/sirona/trunk/aop/src/test/java/org/apache/sirona/aop/DynamicInterceptionTest.java Mon Nov 4 10:23:22 2013
@@ -44,32 +44,32 @@ public class DynamicInterceptionTest {
@Test
public void playWithInterceptor() throws Throwable {
final ConfigurablePerfInterceptor interceptor = new ConfigurablePerfInterceptor();
- assertFalse(repository.iterator().hasNext());
+ assertFalse(repository.counters().iterator().hasNext());
interceptor.invoke(THRESHOLD * 5);
- assertTrue(repository.iterator().hasNext());
- assertEquals(1, repository.iterator().next().getHits());
- assertEquals("dynamic", repository.iterator().next().getKey().getName());
+ assertTrue(repository.counters().iterator().hasNext());
+ assertEquals(1, repository.counters().iterator().next().getHits());
+ assertEquals("dynamic", repository.counters().iterator().next().getKey().getName());
interceptor.invoke(THRESHOLD / 20);
- assertEquals(2, repository.iterator().next().getHits());
+ assertEquals(2, repository.counters().iterator().next().getHits());
for (int i = 0; i < MAX_IT; i++) {
interceptor.invoke(THRESHOLD * 5);
}
- assertEquals(2, repository.iterator().next().getHits());
+ assertEquals(2, repository.counters().iterator().next().getHits());
interceptor.invoke(THRESHOLD / 5);
- assertEquals(3, repository.iterator().next().getHits());
+ assertEquals(3, repository.counters().iterator().next().getHits());
for (int i = 0; i < MAX_IT; i++) {
interceptor.invoke(THRESHOLD * 2);
}
- assertEquals(3, repository.iterator().next().getHits());
+ assertEquals(3, repository.counters().iterator().next().getHits());
interceptor.invoke(THRESHOLD * 5);
interceptor.invoke(THRESHOLD * 5);
- assertEquals(5, repository.iterator().next().getHits());
+ assertEquals(5, repository.counters().iterator().next().getHits());
}
public static class ConfigurablePerfInterceptor extends AbstractPerformanceInterceptor<Long> {
Modified: incubator/sirona/trunk/aop/src/test/java/org/apache/sirona/aop/MonitoringProxyFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/aop/src/test/java/org/apache/sirona/aop/MonitoringProxyFactoryTest.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/aop/src/test/java/org/apache/sirona/aop/MonitoringProxyFactoryTest.java (original)
+++ incubator/sirona/trunk/aop/src/test/java/org/apache/sirona/aop/MonitoringProxyFactoryTest.java Mon Nov 4 10:23:22 2013
@@ -52,7 +52,7 @@ public class MonitoringProxyFactoryTest
}
Counter failures = null;
- for (final Counter c : Repository.INSTANCE) {
+ for (final Counter c : Repository.INSTANCE.counters()) {
if (c.getKey().getName().contains("UnsupportedOperationException")) {
if (failures != null) {
fail();
Modified: incubator/sirona/trunk/collector/src/main/resources/collector-sirona.properties
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/main/resources/collector-sirona.properties?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/main/resources/collector-sirona.properties (original)
+++ incubator/sirona/trunk/collector/src/main/resources/collector-sirona.properties Mon Nov 4 10:23:22 2013
@@ -21,3 +21,7 @@ org.apache.sirona.store.DataStoreFactory
# web module doesn't need to register locally otherwise locally it will not set a marker and all will fail
org.apache.sirona.web.activated = false
org.apache.sirona.core.gauge.activated = false
+
+# deactivate plugins which are local since we can only rely on gauges and counters here
+JMX.activated = false
+Threads.activated = false
Modified: incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java (original)
+++ incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java Mon Nov 4 10:23:22 2013
@@ -17,13 +17,12 @@
package org.apache.sirona.collector.server;
import org.apache.sirona.Role;
-import org.apache.sirona.counters.CollectorCounterStore;
import org.apache.sirona.configuration.Configuration;
+import org.apache.sirona.counters.CollectorCounterStore;
import org.apache.sirona.counters.Counter;
import org.apache.sirona.counters.DefaultCounter;
import org.apache.sirona.counters.Unit;
import org.apache.sirona.cube.CubeCounterDataStore;
-import org.apache.sirona.repositories.DefaultRepository;
import org.apache.sirona.repositories.Repository;
import org.apache.sirona.store.CounterDataStore;
import org.junit.After;
@@ -31,7 +30,6 @@ import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
-import java.util.Iterator;
import static org.junit.Assert.assertEquals;
@@ -64,17 +62,14 @@ public class CubeDataStoreCompatibilityT
private static class SeeMyProtectedStuffStore extends CubeCounterDataStore {
public void doPush() {
- pushCountersByBatch(new DefaultRepository() {
- @Override
- public Iterator<Counter> iterator() {
- return Arrays.<Counter>asList(new DefaultCounter(new Counter.Key(new Role("cube", Unit.UNARY), "client"), null) {
- @Override
- public long getHits() {
- return 50;
- }
- }).iterator();
- }
- });
+ pushCountersByBatch(Arrays.<Counter>asList(
+ new DefaultCounter(new Counter.Key(new Role("cube", Unit.UNARY), "client"), null) {
+ @Override
+ public long getHits() {
+ return 50;
+ }
+ })
+ );
}
}
}
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/DefaultGaugeManager.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/DefaultGaugeManager.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/DefaultGaugeManager.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/DefaultGaugeManager.java Mon Nov 4 10:23:22 2013
@@ -22,13 +22,16 @@ import org.apache.sirona.gauges.jvm.CPUG
import org.apache.sirona.gauges.jvm.UsedMemoryGauge;
import org.apache.sirona.store.GaugeDataStore;
+import java.util.Collection;
+import java.util.Iterator;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;
public final class DefaultGaugeManager implements GaugeManager {
- private final Map<Role, Timer> timers = new ConcurrentHashMap<Role, Timer>();
+ private final Map<Gauge, Timer> timers = new ConcurrentHashMap<Gauge, Timer>();
+ private final Map<String, Role> roleMapping = new ConcurrentHashMap<String, Role>();
private final GaugeDataStore store;
public DefaultGaugeManager(final GaugeDataStore dataStore) {
@@ -48,16 +51,23 @@ public final class DefaultGaugeManager i
}
@Override
- public void stopGauge(final Role role) {
- final Timer timer = timers.remove(role);
+ public void stopGauge(final Gauge gauge) {
+ final Timer timer = timers.remove(gauge);
+ roleMapping.remove(gauge.role().getName());
if (timer != null) {
timer.cancel();
}
}
@Override
+ public Role findGaugeRole(final String name) {
+ return roleMapping.get(name);
+ }
+
+ @Override
public void addGauge(final Gauge gauge) {
final Role role = gauge.role();
+ roleMapping.put(role.getName(), role);
this.store.createOrNoopGauge(role);
@@ -65,13 +75,18 @@ public final class DefaultGaugeManager i
Thread.currentThread().setContextClassLoader(gauge.getClass().getClassLoader());
try {
final Timer timer = new Timer("gauge-" + role.getName() + "-timer", true); // this starts a thread so ensure the loader is the right one
- timers.put(role, timer);
+ timers.put(gauge, timer);
timer.scheduleAtFixedRate(new GaugeTask(store, gauge), 0, gauge.period());
} finally {
Thread.currentThread().setContextClassLoader(old);
}
}
+ @Override
+ public Collection<Gauge> gauges() {
+ return timers.keySet();
+ }
+
private static class GaugeTask extends TimerTask {
private final Gauge gauge;
private final GaugeDataStore store;
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/Gauge.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/Gauge.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/Gauge.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/Gauge.java Mon Nov 4 10:23:22 2013
@@ -80,7 +80,7 @@ public interface Gauge {
public void destroy() {
for (final Gauge gauge : gauges) {
- Repository.INSTANCE.stopGauge(gauge.role());
+ Repository.INSTANCE.stopGauge(gauge);
}
gauges.clear();
}
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/GaugeManager.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/GaugeManager.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/GaugeManager.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/GaugeManager.java Mon Nov 4 10:23:22 2013
@@ -18,10 +18,16 @@ package org.apache.sirona.gauges;
import org.apache.sirona.Role;
+import java.util.Collection;
+
public interface GaugeManager {
void stop();
void addGauge(Gauge gauge);
- void stopGauge(Role role);
+ void stopGauge(Gauge role);
+
+ Collection<Gauge> gauges();
+
+ Role findGaugeRole(String name);
}
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java Mon Nov 4 10:23:22 2013
@@ -31,6 +31,7 @@ import org.apache.sirona.store.DataStore
import org.apache.sirona.store.GaugeDataStore;
import org.apache.sirona.store.GaugeValuesRequest;
+import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
@@ -85,6 +86,11 @@ public class DefaultRepository implement
}
@Override
+ public Collection<Counter> counters() {
+ return counterDataStore.getCounters();
+ }
+
+ @Override
public void clear() {
counterDataStore.clearCounters();
}
@@ -95,13 +101,18 @@ public class DefaultRepository implement
}
@Override
- public Iterator<Counter> iterator() {
- return counterDataStore.getCounters().iterator();
+ public Map<Long, Double> getGaugeValues(final long start, final long end, final Role role) {
+ return gaugeDataStore.getGaugeValues(new GaugeValuesRequest(start, end, role));
+ }
+
+ @Override
+ public Collection<Gauge> gauges() {
+ return gaugeManager.gauges();
}
@Override
- public Map<Long, Double> getGaugeValues(final long start, final long end, final Role role) {
- return gaugeDataStore.getGaugeValues(new GaugeValuesRequest(start, end, role));
+ public Role findGaugeRole(final String name) {
+ return gaugeManager.findGaugeRole(name);
}
@Override
@@ -110,7 +121,7 @@ public class DefaultRepository implement
}
@Override
- public void stopGauge(final Role role) {
+ public void stopGauge(final Gauge role) {
gaugeManager.stopGauge(role);
}
}
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/Repository.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/Repository.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/Repository.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/Repository.java Mon Nov 4 10:23:22 2013
@@ -23,20 +23,27 @@ import org.apache.sirona.counters.Counte
import org.apache.sirona.gauges.Gauge;
import org.apache.sirona.stopwatches.StopWatch;
+import java.util.Collection;
import java.util.Map;
-public interface Repository extends Iterable<Counter> {
+public interface Repository {
Repository INSTANCE = Configuration.findOrCreateInstance(Repository.class);
Counter getCounter(Counter.Key key);
+ Collection<Counter> counters();
+
void clear();
StopWatch start(Counter counter);
void addGauge(final Gauge gauge);
- void stopGauge(Role role);
+ void stopGauge(Gauge role);
Map<Long, Double> getGaugeValues(long start, long end, Role role);
+
+ Collection<Gauge> gauges();
+
+ Role findGaugeRole(String name);
}
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchCounterDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchCounterDataStore.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchCounterDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchCounterDataStore.java Mon Nov 4 10:23:22 2013
@@ -17,9 +17,11 @@
package org.apache.sirona.store;
import org.apache.sirona.configuration.Configuration;
+import org.apache.sirona.counters.Counter;
import org.apache.sirona.repositories.Repository;
import org.apache.sirona.util.DaemonThreadFactory;
+import java.util.Collection;
import java.util.Locale;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -52,13 +54,13 @@ public abstract class BatchCounterDataSt
scheduledTask.done();
}
- protected abstract void pushCountersByBatch(final Repository instance);
+ protected abstract void pushCountersByBatch(final Collection<Counter> instance);
private class BatchPushCountersTask implements Runnable {
@Override
public void run() {
try {
- pushCountersByBatch(Repository.INSTANCE);
+ pushCountersByBatch(Repository.INSTANCE.counters());
} catch (final Exception e) {
LOGGER.log(Level.SEVERE, e.getMessage(), e);
}
Modified: incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeCounterDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeCounterDataStore.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeCounterDataStore.java (original)
+++ incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeCounterDataStore.java Mon Nov 4 10:23:22 2013
@@ -18,9 +18,10 @@ package org.apache.sirona.cube;
import org.apache.sirona.configuration.Configuration;
import org.apache.sirona.counters.Counter;
-import org.apache.sirona.repositories.Repository;
import org.apache.sirona.store.BatchCounterDataStore;
+import java.util.Collection;
+
public class CubeCounterDataStore extends BatchCounterDataStore {
private static final String COUNTER_TYPE = "counter";
@@ -39,10 +40,10 @@ public class CubeCounterDataStore extend
private final Cube cube = Configuration.findOrCreateInstance(CubeBuilder.class).build();
@Override
- protected synchronized void pushCountersByBatch(final Repository instance) {
+ protected synchronized void pushCountersByBatch(final Collection<Counter> instances) {
final long ts = System.currentTimeMillis();
final StringBuilder events = cube.newEventStream();
- for (final Counter counter : instance) {
+ for (final Counter counter : instances) {
cube.buildEvent(events, COUNTER_TYPE, ts, new MapBuilder()
.add(NAME, counter.getKey().getName())
.add(ROLE, counter.getKey().getRole().getName())
Modified: incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteCounterDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteCounterDataStore.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteCounterDataStore.java (original)
+++ incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteCounterDataStore.java Mon Nov 4 10:23:22 2013
@@ -19,10 +19,10 @@ package org.apache.sirona.graphite;
import org.apache.sirona.configuration.Configuration;
import org.apache.sirona.counters.Counter;
import org.apache.sirona.counters.MetricData;
-import org.apache.sirona.repositories.Repository;
import org.apache.sirona.store.BatchCounterDataStore;
import java.io.IOException;
+import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -35,13 +35,13 @@ public class GraphiteCounterDataStore ex
private final Graphite graphite = Configuration.findOrCreateInstance(GraphiteBuilder.class).build();
@Override
- protected synchronized void pushCountersByBatch(final Repository instance) {
+ protected synchronized void pushCountersByBatch(final Collection<Counter> instances) {
try {
graphite.open();
final long ts = System.currentTimeMillis();
- for (final Counter counter : instance) {
+ for (final Counter counter : instances) {
final Counter.Key key = counter.getKey();
final String prefix = COUNTER_PREFIX + key.getRole().getName() + SEP + key.getName() + SEP;
Modified: incubator/sirona/trunk/jpa/src/test/java/org/apache/sirona/jpa/EMFTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/jpa/src/test/java/org/apache/sirona/jpa/EMFTest.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/jpa/src/test/java/org/apache/sirona/jpa/EMFTest.java (original)
+++ incubator/sirona/trunk/jpa/src/test/java/org/apache/sirona/jpa/EMFTest.java Mon Nov 4 10:23:22 2013
@@ -30,6 +30,7 @@ import javax.persistence.spi.Persistence
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
+import java.util.Collection;
import java.util.List;
import static org.junit.Assert.assertEquals;
@@ -70,7 +71,7 @@ public class EMFTest {
}
private static void assertCreateCalled() {
- final List<Counter> counters = IteratorUtils.toList(Repository.INSTANCE.iterator());
+ final Collection<Counter> counters = Repository.INSTANCE.counters();
assertEquals(1, counters.size());
final Counter counter = counters.iterator().next();
Modified: incubator/sirona/trunk/jpa/src/test/java/org/apache/sirona/jpa/QueryTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/jpa/src/test/java/org/apache/sirona/jpa/QueryTest.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/jpa/src/test/java/org/apache/sirona/jpa/QueryTest.java (original)
+++ incubator/sirona/trunk/jpa/src/test/java/org/apache/sirona/jpa/QueryTest.java Mon Nov 4 10:23:22 2013
@@ -110,9 +110,9 @@ public class QueryTest {
}
private static void assertCounter(final String method) {
- assertTrue(Repository.INSTANCE.iterator().hasNext());
+ assertTrue(Repository.INSTANCE.counters().iterator().hasNext());
- final Counter counter = Repository.INSTANCE.iterator().next();
+ final Counter counter = Repository.INSTANCE.counters().iterator().next();
assertEquals(1, counter.getHits());
assertThat(counter.getKey().getName(), containsString(method));
}
Modified: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/handler/api/Template.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/handler/api/Template.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/handler/api/Template.java (original)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/handler/api/Template.java Mon Nov 4 10:23:22 2013
@@ -16,19 +16,22 @@
*/
package org.apache.sirona.reporting.web.handler.api;
+import org.apache.sirona.reporting.web.template.MapBuilder;
+
import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
public class Template {
private final String template;
- private final Map<String, ?> userParams;
+ private final Map<String, Object> userParams;
private final boolean html;
public Template(final String template) {
- this(template, Collections.<String, Object>emptyMap());
+ this(template, new HashMap<String, Object>());
}
- public Template(final String template, final Map<String, ?> userParams) {
+ public Template(final String template, final Map<String, Object> userParams) {
this(template, userParams, true);
}
@@ -37,7 +40,7 @@ public class Template {
* @param userParams variables used by the template
* @param isHtml should the template be rendered with the site them or not (= is it a page fragment).
*/
- public Template(final String template, final Map<String, ?> userParams, final boolean isHtml) {
+ public Template(final String template, final Map<String, Object> userParams, final boolean isHtml) {
this.template = template;
this.userParams = userParams;
this.html = isHtml;
@@ -54,4 +57,9 @@ public class Template {
public boolean isHtml() {
return html;
}
+
+ public Template set(final String attribute, final Object value) {
+ userParams.put(attribute, value);
+ return this;
+ }
}
Added: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/GaugeEndpoints.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/GaugeEndpoints.java?rev=1538543&view=auto
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/GaugeEndpoints.java (added)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/GaugeEndpoints.java Mon Nov 4 10:23:22 2013
@@ -0,0 +1,81 @@
+/*
+ * 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.sirona.reporting.web.plugin.gauge;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.sirona.gauges.Gauge;
+import org.apache.sirona.reporting.web.handler.api.Regex;
+import org.apache.sirona.reporting.web.handler.api.Template;
+import org.apache.sirona.repositories.Repository;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.Collection;
+import java.util.Map;
+import java.util.TreeMap;
+
+import static org.apache.sirona.reporting.web.graph.Line.generateReport;
+
+// gauge names can be not so URL friendly so using urlencode(base64), encoding is not in an utility class since it can change depending the data
+public class GaugeEndpoints {
+ private static final String UTF8 = "UTF-8";
+
+ @Regex
+ public Template home() {
+ return new Template("gauge/home.vm").set("gauges", sortNames(Repository.INSTANCE.gauges()));
+ }
+
+ @Regex("/([^/]*)")
+ public Template detail(final String role) {
+ return new Template("gauge/detail.vm")
+ .set("gauge", decode(role))
+ .set("gauge64", role);
+ }
+
+ @Regex("/([^/]*)/([0-9]*)/([0-9]*)")
+ public String jsonDetail(final String base64Role, final long start, final long end) {
+ final String role = decode(base64Role);
+ return generateReport(role, Repository.INSTANCE.findGaugeRole(role), start, end);
+ }
+
+ private static String decode(final String base64Role) {
+ try {
+ return new String(Base64.decodeBase64(URLDecoder.decode(base64Role, UTF8)));
+ } catch (final UnsupportedEncodingException e) {
+ return base64Role; // shouldn't occur
+ }
+ }
+
+ private static String encode(final String role) {
+ final String base64 = new String(Base64.encodeBase64(role.getBytes()));
+ try {
+ return URLEncoder.encode(base64, UTF8);
+ } catch (final UnsupportedEncodingException e) {
+ return base64; // shouldn't occur
+ }
+ }
+
+ private static Map<String, String> sortNames(final Collection<Gauge> gauges) {
+ final Map<String, String> names = new TreeMap<String, String>();
+ for (final Gauge gauge : gauges) {
+ final String name = gauge.role().getName();
+ names.put(name, encode(name));
+ }
+ return names;
+ }
+}
Added: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/GaugePlugin.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/GaugePlugin.java?rev=1538543&view=auto
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/GaugePlugin.java (added)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/gauge/GaugePlugin.java Mon Nov 4 10:23:22 2013
@@ -0,0 +1,36 @@
+/*
+ * 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.sirona.reporting.web.plugin.gauge;
+
+import org.apache.sirona.reporting.web.plugin.Plugin;
+
+public class GaugePlugin implements Plugin {
+ @Override
+ public String name() {
+ return "Gauges";
+ }
+
+ @Override
+ public Class<?> endpoints() {
+ return GaugeEndpoints.class;
+ }
+
+ @Override
+ public String mapping() {
+ return "/gauges";
+ }
+}
Modified: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/JSONFormat.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/JSONFormat.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/JSONFormat.java (original)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/JSONFormat.java Mon Nov 4 10:23:22 2013
@@ -30,7 +30,7 @@ public class JSONFormat implements Forma
return new Template("/templates/report/report-json.vm",
new MapBuilder<String, Object>()
.set("MetricData", MetricData.class)
- .set("counters", Repository.INSTANCE.iterator())
+ .set("counters", Repository.INSTANCE.counters())
.build(), false);
}
Modified: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/MapFormat.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/MapFormat.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/MapFormat.java (original)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/MapFormat.java Mon Nov 4 10:23:22 2013
@@ -102,7 +102,7 @@ public abstract class MapFormat {
protected static Map<String, Collection<String>> snapshotByPath(final Unit timeUnit, final String format) {
final Map<String, Collection<String>> data = new TreeMap<String, Collection<String>>();
- for (final Counter counter : Repository.INSTANCE) {
+ for (final Counter counter : Repository.INSTANCE.counters()) {
final Counter.Key key = counter.getKey();
data.put(generateCounterKeyString(key), generateLine(counter, timeUnit, format));
}
@@ -120,7 +120,7 @@ public abstract class MapFormat {
protected static Collection<Collection<String>> snapshot(final Unit timeUnit, final String format) {
final Collection<Collection<String>> data = new ArrayList<Collection<String>>();
- for (final Counter counter : Repository.INSTANCE) {
+ for (final Counter counter : Repository.INSTANCE.counters()) {
data.add(generateLine(counter, timeUnit, format));
}
return data;
Modified: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/XMLFormat.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/XMLFormat.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/XMLFormat.java (original)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/report/format/XMLFormat.java Mon Nov 4 10:23:22 2013
@@ -30,7 +30,7 @@ public class XMLFormat implements Format
return new Template("/templates/report/report-xml.vm",
new MapBuilder<String, Object>()
.set("MetricData", MetricData.class)
- .set("counters", Repository.INSTANCE.iterator())
+ .set("counters", Repository.INSTANCE.counters())
.build(), false);
}
Modified: incubator/sirona/trunk/reporting/src/main/resources/META-INF/services/org.apache.sirona.reporting.web.plugin.Plugin
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/resources/META-INF/services/org.apache.sirona.reporting.web.plugin.Plugin?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/resources/META-INF/services/org.apache.sirona.reporting.web.plugin.Plugin (original)
+++ incubator/sirona/trunk/reporting/src/main/resources/META-INF/services/org.apache.sirona.reporting.web.plugin.Plugin Mon Nov 4 10:23:22 2013
@@ -1,4 +1,5 @@
org.apache.sirona.reporting.web.plugin.report.ReportPlugin
+org.apache.sirona.reporting.web.plugin.gauge.GaugePlugin
org.apache.sirona.reporting.web.plugin.jmx.JMXPlugin
org.apache.sirona.reporting.web.plugin.jvm.JVMPlugin
org.apache.sirona.reporting.web.plugin.jta.JTAPlugin
Modified: incubator/sirona/trunk/reporting/src/main/resources/resources/js/sirona.js
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/resources/resources/js/sirona.js?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/resources/resources/js/sirona.js (original)
+++ incubator/sirona/trunk/reporting/src/main/resources/resources/js/sirona.js Mon Nov 4 10:23:22 2013
@@ -17,6 +17,10 @@
(function (Sirona, $, undefined) {
var dayDuration = 24 * 3600 * 1000;
+ Sirona.escapeId = function (id) { // we use base64 etc so we need escaping
+ return id.replace( /(%|:|\.|\[|\])/g, "\\$1" );
+ };
+
Sirona.extractTimeFromPicker = function (picker) {
return picker.data('datetimepicker').getLocalDate().getTime();
};
@@ -27,7 +31,7 @@
type: "GET",
dataType: "json",
success: function (data) {
- $.plot("#" + graph + "-graph", data, options);
+ $.plot("#" + Sirona.escapeId(graph + "-graph"), data, options);
},
//complete: complete, // TODO: find a better way to refresh the plot
timeout: timeout
@@ -35,19 +39,24 @@
};
Sirona.initGraph = function(mapping, plugin, graph, options) {
+ var startDateTimePicker = $('#' + Sirona.escapeId(graph + '-datetimepicker-start'));
+ var endDateTimePicker = $('#' + Sirona.escapeId(graph + '-datetimepicker-end'));
+ startDateTimePicker.datetimepicker();
+ endDateTimePicker.datetimepicker();
+
var yesterday = new Date();
yesterday.setTime(yesterday.getTime() - dayDuration);
var tomorrow = new Date();
tomorrow.setTime(tomorrow.getTime() + dayDuration);
- $('#' + graph + '-datetimepicker-start').data('datetimepicker').setLocalDate(yesterday);
- $('#' + graph + '-datetimepicker-end').data('datetimepicker').setLocalDate(tomorrow);
+ startDateTimePicker.data('datetimepicker').setLocalDate(yesterday);
+ endDateTimePicker.data('datetimepicker').setLocalDate(tomorrow);
(function doUpdateGraph() {
Sirona.updateGraph(mapping, plugin, graph,
- Sirona.extractTimeFromPicker($('#' + graph + '-datetimepicker-start')),
- Sirona.extractTimeFromPicker($('#' + graph + '-datetimepicker-end')),
+ Sirona.extractTimeFromPicker(startDateTimePicker),
+ Sirona.extractTimeFromPicker(endDateTimePicker),
options, doUpdateGraph, 4000); // refresh interval = 4s
})();
};
Added: incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/detail.vm
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/detail.vm?rev=1538543&view=auto
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/detail.vm (added)
+++ incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/detail.vm Mon Nov 4 10:23:22 2013
@@ -0,0 +1,36 @@
+#*
+ 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.
+*#
+<div class="container-fluid">
+ <div class="row-fluid">
+ #graphBlock("$gauge", "$gauge64")
+ </div>
+</div>
+
+<script type="text/javascript" src="$mapping/resources/js/bootstrap-datetimepicker.min.js"></script>
+<script type="text/javascript" src="$mapping/resources/js/jquery.flot.min.js"></script>
+<script type="text/javascript" src="$mapping/resources/js/jquery.flot.time.min.js"></script>
+<script type="text/javascript">
+ $(function() {
+ Sirona.initGraph("$mapping", 'gauges', "$gauge64", {
+ canvas: true,
+ series: { lines: { show: true }, points: { show: true } },
+ grid: { hoverable: true, clickable: true },
+ xaxes: [ { mode: "time", timezone: "browser" } ],
+ yaxes: [ { min: 0 } ]
+ });
+ });
+</script>
Added: incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/home.vm
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/home.vm?rev=1538543&view=auto
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/home.vm (added)
+++ incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/home.vm Mon Nov 4 10:23:22 2013
@@ -0,0 +1,26 @@
+#*
+ 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.
+*#
+<h1>Gauges</h1>
+
+<div>
+ Here is the list of available gauges, click on one of them to get its details:
+ <ul>
+ #foreach ($gauge in $gauges.entrySet())
+ <li><a href="$mapping/gauges/$gauge.value">$gauge.key<a/></li>
+ #end
+ </ul>
+</div>
Modified: incubator/sirona/trunk/reporting/src/main/resources/templates/jta/jta.vm
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/resources/templates/jta/jta.vm?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/resources/templates/jta/jta.vm (original)
+++ incubator/sirona/trunk/reporting/src/main/resources/templates/jta/jta.vm Mon Nov 4 10:23:22 2013
@@ -35,11 +35,6 @@
<script type="text/javascript" src="$mapping/resources/js/jquery.flot.time.min.js"></script>
<script type="text/javascript">
$(function() {
- #foreach ($item in $parts )
- $('#${item}-datetimepicker-start').datetimepicker();
- $('#${item}-datetimepicker-end').datetimepicker();
- #end
-
var options = {
canvas: true,
series: { lines: { show: true }, points: { show: true } },
Modified: incubator/sirona/trunk/reporting/src/main/resources/templates/jvm/jvm.vm
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/resources/templates/jvm/jvm.vm?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/resources/templates/jvm/jvm.vm (original)
+++ incubator/sirona/trunk/reporting/src/main/resources/templates/jvm/jvm.vm Mon Nov 4 10:23:22 2013
@@ -68,11 +68,6 @@
<script type="text/javascript" src="$mapping/resources/js/jquery.flot.time.min.js"></script>
<script type="text/javascript">
$(function() {
- $('#memory-datetimepicker-start').datetimepicker();
- $('#memory-datetimepicker-end').datetimepicker();
- $('#cpu-datetimepicker-start').datetimepicker();
- $('#cpu-datetimepicker-end').datetimepicker();
-
var cpuOptions = {
canvas: true,
series: { lines: { show: true }, points: { show: true } },
Modified: incubator/sirona/trunk/reporting/src/main/resources/templates/web/web.vm
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/resources/templates/web/web.vm?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/resources/templates/web/web.vm (original)
+++ incubator/sirona/trunk/reporting/src/main/resources/templates/web/web.vm Mon Nov 4 10:23:22 2013
@@ -27,9 +27,6 @@
<script type="text/javascript" src="$mapping/resources/js/jquery.flot.time.min.js"></script>
<script type="text/javascript">
$(function() {
- $('#sessions-datetimepicker-start').datetimepicker();
- $('#sessions-datetimepicker-end').datetimepicker();
-
var options = {
canvas: true,
series: { lines: { show: true }, points: { show: true } },
Copied: incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/GaugesTest.java (from r1538515, incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/ThreadsTest.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/GaugesTest.java?p2=incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/GaugesTest.java&p1=incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/ThreadsTest.java&r1=1538515&r2=1538543&rev=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/ThreadsTest.java (original)
+++ incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/GaugesTest.java Mon Nov 4 10:23:22 2013
@@ -22,23 +22,31 @@ import org.junit.Test;
import java.io.IOException;
-import static com.gargoylesoftware.htmlunit.WebAssert.assertElementPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-public class ThreadsTest extends SironaReportingTestBase {
- private static final String CONTAINER_BACKGROUND_THREAD = "Q29udGFpbmVyQmFja2dyb3VuZFByb2Nlc3NvcltTdGFuZGFyZEVuZ2luZVthcnF1aWxsaWFuLXRvbWNhdC1lbWJlZGRlZC03XV0="; // always exists
+public class GaugesTest extends SironaReportingTestBase {
+ private static final String CPU_GAUGE_ENCODED = "Q1BV";
@Test
- public void checkThreadsAreListed() throws IOException {
- final HtmlPage page = page("threads");
- assertElementPresent(page, CONTAINER_BACKGROUND_THREAD);
+ public void checkGaugesAreListed() throws IOException {
+ final HtmlPage page = page("gauges");
+ final String content = page.getWebResponse().getContentAsString();
+ assertThat(content, containsString("<a href=\"/sirona-test/monitoring/gauges/" + CPU_GAUGE_ENCODED + "\">"));
+ assertThat(content, containsString("CPU"));
}
@Test
public void checkDetail() throws IOException {
- final TextPage page = page("threads/" + CONTAINER_BACKGROUND_THREAD);
- assertThat(page.getWebResponse().getContentAsString(), containsString("org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run"));
+ final HtmlPage page = page("gauges/" + CPU_GAUGE_ENCODED);
+ assertThat(page.getWebResponse().getContentAsString(), containsString("id=\"" + CPU_GAUGE_ENCODED + "-graph\""));
+ }
+
+ @Test
+ public void checkJsonDetail() throws IOException {
+ final TextPage page = page("gauges/" + CPU_GAUGE_ENCODED + "/0/" + (System.currentTimeMillis() + 1000));
+ final String json = page.getWebResponse().getContentAsString();
+ assertThat(json, containsString("[{\"label\":\"CPU\",\"color\":"));
+ assertThat(json, containsString("\"data\":"));
}
}
Modified: incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/discovery/GaugeDiscoveryListener.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/discovery/GaugeDiscoveryListener.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/discovery/GaugeDiscoveryListener.java (original)
+++ incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/discovery/GaugeDiscoveryListener.java Mon Nov 4 10:23:22 2013
@@ -53,9 +53,15 @@ public class GaugeDiscoveryListener impl
final ConcurrentMap<Integer, StatusGauge> gauges = new ConcurrentHashMap<Integer, StatusGauge>(35);
if ("true".equalsIgnoreCase((String) sce.getServletContext().getAttribute(MonitoringFilter.MONITOR_STATUS))) {
final String monitoredStatuses = sce.getServletContext().getInitParameter(Configuration.CONFIG_PROPERTY_PREFIX + "web.monitored-statuses");
+
+ String contextPath = sce.getServletContext().getContextPath();
+ if (contextPath == null || contextPath.isEmpty()) {
+ contextPath = "/";
+ }
+
if (monitoredStatuses == null) {
for (final int status : DEFAULT_STATUSES) {
- gauges.put(status, statusGauge(sce.getServletContext().getContextPath(), gauges, status));
+ gauges.put(status, statusGauge(contextPath, gauges, status));
}
/* we could use it but it defines 25 statuses, surely too much
for (final Field f : HttpURLConnection.class.getDeclaredFields()) {
@@ -74,7 +80,7 @@ public class GaugeDiscoveryListener impl
} else {
for (final String status : monitoredStatuses.split(",")) {
final int statusInt = Integer.parseInt(status.trim());
- gauges.put(statusInt, statusGauge(sce.getServletContext().getContextPath(), gauges, statusInt));
+ gauges.put(statusInt, statusGauge(contextPath, gauges, statusInt));
}
}
sce.getServletContext().setAttribute(STATUS_GAUGES_ATTRIBUTE, gauges);
Modified: incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/session/MonitoringSessionListener.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/session/MonitoringSessionListener.java?rev=1538543&r1=1538542&r2=1538543&view=diff
==============================================================================
--- incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/session/MonitoringSessionListener.java (original)
+++ incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/session/MonitoringSessionListener.java Mon Nov 4 10:23:22 2013
@@ -68,6 +68,6 @@ public class MonitoringSessionListener i
@Override
public void contextDestroyed(final ServletContextEvent sce) {
- Repository.INSTANCE.stopGauge(gauge.role());
+ Repository.INSTANCE.stopGauge(gauge);
}
}