You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by rm...@apache.org on 2013/10/21 14:54:18 UTC
svn commit: r1534136 [2/2] - in /commons/sandbox/monitoring/trunk: ./
collector/
collector/src/main/java/org/apache/commons/monitoring/collector/rest/
collector/src/main/java/org/apache/commons/monitoring/collector/server/
collector/src/main/java/org/a...
Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counters/DefaultCounter.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counters/DefaultCounter.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counters/DefaultCounter.java (original)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counters/DefaultCounter.java Mon Oct 21 12:54:16 2013
@@ -21,7 +21,8 @@ import org.apache.commons.monitoring.sto
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
public class DefaultCounter implements Counter {
private final AtomicInteger concurrency = new AtomicInteger(0);
@@ -29,7 +30,7 @@ public class DefaultCounter implements C
private final CounterDataStore dataStore;
private volatile int maxConcurrency = 0;
protected SummaryStatistics statistics;
- protected Lock lock = new ReentrantLock();
+ protected ReadWriteLock lock = new ReentrantReadWriteLock();
public DefaultCounter(final Key key, final CounterDataStore store) {
this.key = key;
@@ -81,55 +82,93 @@ public class DefaultCounter implements C
@Override
public double getMax() {
- return statistics.getMax();
+ final Lock rl = lock.readLock();
+ rl.lock();
+ try {
+ return statistics.getMax();
+ } finally {
+ rl.unlock();
+ }
}
@Override
public double getMin() {
- return statistics.getMin();
+ final Lock rl = lock.readLock();
+ rl.lock();
+ try {
+ return statistics.getMin();
+ } finally {
+ rl.unlock();
+ }
}
@Override
public double getSum() {
- return statistics.getSum();
+ final Lock rl = lock.readLock();
+ rl.lock();
+ try {
+ return statistics.getSum();
+ } finally {
+ rl.unlock();
+ }
}
@Override
public double getStandardDeviation() {
- return statistics.getStandardDeviation();
+ final Lock rl = lock.readLock();
+ rl.lock();
+ try {
+ return statistics.getStandardDeviation();
+ } finally {
+ rl.unlock();
+ }
}
@Override
public double getVariance() {
- return statistics.getVariance();
+ final Lock rl = lock.readLock();
+ rl.lock();
+ try {
+ return statistics.getVariance();
+ } finally {
+ rl.unlock();
+ }
}
@Override
public double getMean() {
- return statistics.getMean();
- }
-
- @Override
- public double getGeometricMean() {
- return statistics.getGeometricMean();
- }
-
- @Override
- public double getSumOfLogs() {
- return statistics.getSumOfLogs();
+ final Lock rl = lock.readLock();
+ rl.lock();
+ try {
+ return statistics.getMean();
+ } finally {
+ rl.unlock();
+ }
}
@Override
- public double getSumOfSquares() {
- return statistics.getSumOfLogs();
+ public double getSecondMoment() {
+ final Lock rl = lock.readLock();
+ rl.lock();
+ try {
+ return statistics.getSecondMoment();
+ } finally {
+ rl.unlock();
+ }
}
@Override
public long getHits() {
- return statistics.getN();
+ final Lock rl = lock.readLock();
+ rl.lock();
+ try {
+ return statistics.getN();
+ } finally {
+ rl.unlock();
+ }
}
- public Lock getLock() {
+ public ReadWriteLock getLock() {
return lock;
}
}
Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counters/MetricData.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counters/MetricData.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counters/MetricData.java (original)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counters/MetricData.java Mon Oct 21 12:54:16 2013
@@ -98,28 +98,6 @@ public enum MetricData {
return true;
}
},
- SumOfLogs {
- @Override
- public double value(final Counter counter) {
- return counter.getSumOfLogs();
- }
-
- @Override
- public boolean isTime() {
- return false;
- }
- },
- SumOfSquares {
- @Override
- public double value(final Counter counter) {
- return counter.getSumOfSquares();
- }
-
- @Override
- public boolean isTime() {
- return false;
- }
- },
Variance {
@Override
public double value(final Counter counter) {
@@ -131,17 +109,6 @@ public enum MetricData {
return false;
}
},
- GeometricMean {
- @Override
- public double value(final Counter counter) {
- return counter.getGeometricMean();
- }
-
- @Override
- public boolean isTime() {
- return false;
- }
- },
Value {
@Override
public double value(final Counter counter) {
Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/gauges/DefaultGaugeManager.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/gauges/DefaultGaugeManager.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/gauges/DefaultGaugeManager.java (original)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/gauges/DefaultGaugeManager.java Mon Oct 21 12:54:16 2013
@@ -73,7 +73,8 @@ public final class DefaultGaugeManager i
final long time = System.currentTimeMillis();
final double value = gauge.value();
- store.addToGauge(gauge, time, value);
+ // role could be dynamic...even if not advised
+ store.addToGauge(gauge.role(), time, value);
}
}
}
Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/gauges/Gauge.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/gauges/Gauge.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/gauges/Gauge.java (original)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/gauges/Gauge.java Mon Oct 21 12:54:16 2013
@@ -18,9 +18,9 @@ package org.apache.commons.monitoring.ga
import org.apache.commons.monitoring.Role;
import org.apache.commons.monitoring.repositories.Repository;
+import org.apache.commons.monitoring.spi.SPI;
import java.util.LinkedList;
-import java.util.ServiceLoader;
public interface Gauge {
Role role();
@@ -35,10 +35,10 @@ public interface Gauge {
public LoaderHelper(final boolean excludeParent, final String... includedPrefixes) {
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- for (final Gauge g : ServiceLoader.load(Gauge.class, classLoader)) {
+ for (final Gauge g : SPI.INSTANCE.find(Gauge.class, classLoader)) {
addGaugeIfNecessary(classLoader, g, excludeParent, includedPrefixes);
}
- for (final GaugeFactory gf : ServiceLoader.load(GaugeFactory.class, classLoader)) {
+ for (final GaugeFactory gf : SPI.INSTANCE.find(GaugeFactory.class, classLoader)) {
for (final Gauge g : gf.gauges()) {
addGaugeIfNecessary(classLoader, g, excludeParent, includedPrefixes);
}
Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/DefaultRepository.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/DefaultRepository.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/DefaultRepository.java (original)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/DefaultRepository.java Mon Oct 21 12:54:16 2013
@@ -54,10 +54,12 @@ public class DefaultRepository implement
if (counter == null) {
counter = Configuration.findOrCreateInstance(DataStoreFactory.class).getCounterDataStore();
+ Configuration.setSingletonInstance(CounterDataStore.class, counter);
}
if (gauge == null) {
gauge = Configuration.findOrCreateInstance(DataStoreFactory.class).getGaugeDataStore();
+ Configuration.setSingletonInstance(GaugeDataStore.class, gauge);
}
this.counterDataStore = counter;
this.gaugeDataStore = gauge;
Added: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/spi/DefaultSPI.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/spi/DefaultSPI.java?rev=1534136&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/spi/DefaultSPI.java (added)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/spi/DefaultSPI.java Mon Oct 21 12:54:16 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.
+ */
+package org.apache.commons.monitoring.spi;
+
+import java.util.ServiceLoader;
+
+public class DefaultSPI implements SPI {
+ @Override
+ public <T> Iterable<T> find(final Class<T> api, final ClassLoader loader) {
+ return ServiceLoader.load(api, loader);
+ }
+}
Added: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/spi/SPI.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/spi/SPI.java?rev=1534136&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/spi/SPI.java (added)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/spi/SPI.java Mon Oct 21 12:54:16 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.
+ */
+package org.apache.commons.monitoring.spi;
+
+import org.apache.commons.monitoring.configuration.Configuration;
+
+// ServiceLoader is sometimes just wrong
+public interface SPI {
+ SPI INSTANCE = Configuration.findOrCreateInstance(SPI.class);
+
+ <T> Iterable<T> find(Class<T> api, ClassLoader loader);
+}
Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/GaugeDataStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/GaugeDataStore.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/GaugeDataStore.java (original)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/GaugeDataStore.java Mon Oct 21 12:54:16 2013
@@ -26,5 +26,5 @@ public interface GaugeDataStore {
void createOrNoopGauge(Role role);
- void addToGauge(Gauge gauge, long time, double value);
+ void addToGauge(Role role, long time, double value);
}
Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryCounterDataStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryCounterDataStore.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryCounterDataStore.java (original)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryCounterDataStore.java Mon Oct 21 12:54:16 2013
@@ -25,7 +25,15 @@ import java.util.concurrent.ConcurrentMa
import java.util.concurrent.locks.Lock;
public class InMemoryCounterDataStore implements CounterDataStore {
- protected final ConcurrentMap<Counter.Key, Counter> counters = new ConcurrentHashMap<Counter.Key, Counter>(50);
+ protected final ConcurrentMap<Counter.Key, Counter> counters = newCounterMap();
+
+ protected ConcurrentMap<Counter.Key, Counter> newCounterMap() {
+ return new ConcurrentHashMap<Counter.Key, Counter>(50);
+ }
+
+ protected Counter newCounter(final Counter.Key key) {
+ return new DefaultCounter(key, this);
+ }
@Override
public Counter getOrCreateCounter(final Counter.Key key) {
@@ -50,10 +58,6 @@ public class InMemoryCounterDataStore im
return counters.values();
}
- protected Counter newCounter(final Counter.Key key) {
- return new DefaultCounter(key, this);
- }
-
@Override
public void addToCounter(final Counter counter, final double delta) {
if (!DefaultCounter.class.isInstance(counter)) {
@@ -61,7 +65,7 @@ public class InMemoryCounterDataStore im
}
final DefaultCounter defaultCounter = DefaultCounter.class.cast(counter);
- final Lock lock = defaultCounter.getLock();
+ final Lock lock = defaultCounter.getLock().writeLock();
lock.lock();
try {
defaultCounter.addInternal(delta);
Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryGaugeDataStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryGaugeDataStore.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryGaugeDataStore.java (original)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryGaugeDataStore.java Mon Oct 21 12:54:16 2013
@@ -18,7 +18,6 @@ package org.apache.commons.monitoring.st
import org.apache.commons.monitoring.Role;
import org.apache.commons.monitoring.configuration.Configuration;
-import org.apache.commons.monitoring.gauges.Gauge;
import java.util.Collections;
import java.util.Map;
@@ -53,15 +52,11 @@ public class InMemoryGaugeDataStore impl
gauges.put(role, new FixedSizedMap());
}
+ @Override
public void addToGauge(final Role role, final long time, final double value) {
gauges.get(role).put(time, value);
}
- @Override
- public void addToGauge(final Gauge gauge, final long time, final double value) {
- addToGauge(gauge.role(), time, value);
- }
-
// no perf issues here normally since add is called not that often
protected static class FixedSizedMap extends ConcurrentSkipListMap<Long, Double> {
private static final int MAX_SIZE = Configuration.getInteger(Configuration.COMMONS_MONITORING_PREFIX + "gauge.max-size", 100);
Modified: commons/sandbox/monitoring/trunk/cube/pom.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/cube/pom.xml?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/cube/pom.xml (original)
+++ commons/sandbox/monitoring/trunk/cube/pom.xml Mon Oct 21 12:54:16 2013
@@ -43,8 +43,6 @@
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-codec-http</artifactId>
- <version>4.0.9.Final</version>
- <scope>test</scope>
</dependency>
</dependencies>
</project>
Modified: commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeCounterDataStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeCounterDataStore.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeCounterDataStore.java (original)
+++ commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeCounterDataStore.java Mon Oct 21 12:54:16 2013
@@ -22,33 +22,22 @@ import org.apache.commons.monitoring.cou
import org.apache.commons.monitoring.repositories.Repository;
import org.apache.commons.monitoring.store.BatchCounterDataStore;
-import java.util.concurrent.locks.Lock;
-
public class CubeCounterDataStore extends BatchCounterDataStore {
private static final String COUNTER_TYPE = "counter";
- private final Cube cube = Configuration.findOrCreateInstance(CubeBuilder.class).build();
-
- @Override
- protected Counter newCounter(final Counter.Key key) {
- return new CubeCounter(key, this);
- }
+ private static final String NAME = "name";
+ private static final String ROLE = "role";
+ private static final String UNIT = "unit";
+ private static final String CONCURRENCY = "concurrency";
+ private static final String MEAN = "mean";
+ private static final String VARIANCE = "variance";
+ private static final String HITS = "hits";
+ private static final String MAX = "max";
+ private static final String MIN = "min";
+ private static final String SUM = "sum";
+ private static final String M_2 = "m2";
- @Override
- public void addToCounter(final Counter counter, final double delta) {
- if (!CubeCounter.class.isInstance(counter)) {
- throw new IllegalArgumentException(getClass().getName() + " only supports " + CubeCounter.class.getName());
- }
-
- final CubeCounter cubeCounter = CubeCounter.class.cast(counter);
- final Lock lock = cubeCounter.getLock();
- lock.lock();
- try {
- cubeCounter.addInternal(delta);
- } finally {
- lock.unlock();
- }
- }
+ private final Cube cube = Configuration.findOrCreateInstance(CubeBuilder.class).build();
@Override
protected synchronized void pushCountersByBatch(final Repository instance) {
@@ -56,14 +45,18 @@ public class CubeCounterDataStore extend
final StringBuilder events = cube.newEventStream();
for (final Counter counter : instance) {
cube.buildEvent(events, COUNTER_TYPE, ts, new MapBuilder()
- .add("name", counter.getKey().getName())
- .add("role", counter.getKey().getRole().getName())
- .add("unit", counter.getKey().getRole().getUnit())
- // other metrics are not handled by CubeCounter and useless since cube re-aggregate
- // so to reduce overhead we just store it locally
- .add("concurrency", MetricData.Concurrency.value(counter))
- .add("sum", MetricData.Sum.value(counter))
- .add("hits", MetricData.Hits.value(counter))
+ .add(NAME, counter.getKey().getName())
+ .add(ROLE, counter.getKey().getRole().getName())
+ .add(UNIT, counter.getKey().getRole().getUnit().getName())
+ // minimum metrics to be able to aggregate counters later
+ .add(CONCURRENCY, counter.currentConcurrency().intValue())
+ .add(MEAN, counter.getMean())
+ .add(VARIANCE, counter.getVariance())
+ .add(HITS, counter.getHits())
+ .add(MAX, counter.getMax())
+ .add(MIN, counter.getMin())
+ .add(SUM, counter.getSum())
+ .add(M_2, counter.getSecondMoment())
.map());
}
cube.post(events);
Modified: commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeDataStoreFactory.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeDataStoreFactory.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeDataStoreFactory.java (original)
+++ commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeDataStoreFactory.java Mon Oct 21 12:54:16 2013
@@ -16,13 +16,9 @@
*/
package org.apache.commons.monitoring.cube;
-import org.apache.commons.monitoring.store.CounterDataStore;
-import org.apache.commons.monitoring.store.DataStoreFactory;
import org.apache.commons.monitoring.store.DelegateDataStoreFactory;
-import org.apache.commons.monitoring.store.GaugeDataStore;
public class CubeDataStoreFactory extends DelegateDataStoreFactory {
-
public CubeDataStoreFactory() {
super(new CubeCounterDataStore(), new CubeGaugeDataStore());
}
Modified: commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeGaugeDataStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeGaugeDataStore.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeGaugeDataStore.java (original)
+++ commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeGaugeDataStore.java Mon Oct 21 12:54:16 2013
@@ -18,7 +18,6 @@ package org.apache.commons.monitoring.cu
import org.apache.commons.monitoring.Role;
import org.apache.commons.monitoring.configuration.Configuration;
-import org.apache.commons.monitoring.gauges.Gauge;
import org.apache.commons.monitoring.store.GaugeDataStore;
import org.apache.commons.monitoring.store.GaugeValuesRequest;
@@ -41,9 +40,7 @@ public class CubeGaugeDataStore implemen
}
@Override
- public void addToGauge(final Gauge gauge, final long time, final double value) {
- final Role role = gauge.role();
-
+ public void addToGauge(final Role role, final long time, final double value) {
cube.post(
cube.buildEvent(new StringBuilder(), GAUGE_TYPE, time,
new MapBuilder()
Modified: commons/sandbox/monitoring/trunk/cube/src/test/java/org/apache/commons/monitoring/cube/CubeDataStoreTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/cube/src/test/java/org/apache/commons/monitoring/cube/CubeDataStoreTest.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/cube/src/test/java/org/apache/commons/monitoring/cube/CubeDataStoreTest.java (original)
+++ commons/sandbox/monitoring/trunk/cube/src/test/java/org/apache/commons/monitoring/cube/CubeDataStoreTest.java Mon Oct 21 12:54:16 2013
@@ -39,7 +39,6 @@ public class CubeDataStoreTest {
private CubeServer server;
private Gauge.LoaderHelper gauges;
-
@Before
public void startCube() throws IOException {
server = new CubeServer("localhost", 1234).start();
Modified: commons/sandbox/monitoring/trunk/cube/src/test/java/org/apache/commons/monitoring/cube/CubeServer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/cube/src/test/java/org/apache/commons/monitoring/cube/CubeServer.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/cube/src/test/java/org/apache/commons/monitoring/cube/CubeServer.java (original)
+++ commons/sandbox/monitoring/trunk/cube/src/test/java/org/apache/commons/monitoring/cube/CubeServer.java Mon Oct 21 12:54:16 2013
@@ -40,6 +40,7 @@ import io.netty.handler.stream.ChunkedWr
import java.io.IOException;
import java.net.ServerSocket;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
@@ -161,7 +162,7 @@ public class CubeServer {
final ChannelFuture future;
if (HttpMethod.POST.equals(fullHttpRequest.getMethod())) {
synchronized (messages) {
- messages.add(new String(fullHttpRequest.content().array()));
+ messages.add(fullHttpRequest.content().toString(Charset.defaultCharset()));
}
final HttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
future = ctx.writeAndFlush(response);
Modified: commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/GraphiteGaugeDataStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/GraphiteGaugeDataStore.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/GraphiteGaugeDataStore.java (original)
+++ commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/GraphiteGaugeDataStore.java Mon Oct 21 12:54:16 2013
@@ -18,7 +18,6 @@ package org.apache.commons.monitoring.gr
import org.apache.commons.monitoring.Role;
import org.apache.commons.monitoring.configuration.Configuration;
-import org.apache.commons.monitoring.gauges.Gauge;
import org.apache.commons.monitoring.store.GaugeDataStore;
import org.apache.commons.monitoring.store.GaugeValuesRequest;
@@ -35,9 +34,9 @@ public class GraphiteGaugeDataStore impl
private final Graphite graphite = Configuration.findOrCreateInstance(GraphiteBuilder.class).build();
@Override
- public void addToGauge(final Gauge gauge, final long time, final double value) {
+ public void addToGauge(final Role role, final long time, final double value) {
try {
- graphite.simplePush(GAUGE_PREFIX + gauge.role().getName(), value, time);
+ graphite.simplePush(GAUGE_PREFIX + role.getName(), value, time);
} catch (final IOException e) {
LOGGER.log(Level.SEVERE, e.getMessage(), e);
}
Modified: commons/sandbox/monitoring/trunk/graphite/src/test/java/org/apache/commons/monitoring/graphite/GraphiteTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/graphite/src/test/java/org/apache/commons/monitoring/graphite/GraphiteTest.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/graphite/src/test/java/org/apache/commons/monitoring/graphite/GraphiteTest.java (original)
+++ commons/sandbox/monitoring/trunk/graphite/src/test/java/org/apache/commons/monitoring/graphite/GraphiteTest.java Mon Oct 21 12:54:16 2013
@@ -54,7 +54,7 @@ public class GraphiteTest extends Graphi
}
{ // counters
- assertEquals(39, counters.size());
+ assertEquals(30, counters.size());
assertTrue(counters.contains("counter-performances-test-Hits 2.00"));
assertTrue(counters.contains("counter-performances-test-Max 1.60"));
assertTrue(counters.contains("counter-performances-test-Mean 1.50"));
Modified: commons/sandbox/monitoring/trunk/pom.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/pom.xml?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/pom.xml (original)
+++ commons/sandbox/monitoring/trunk/pom.xml Mon Oct 21 12:54:16 2013
@@ -152,6 +152,11 @@
<dependencyManagement>
<dependencies>
<dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-math3</artifactId>
+ <version>3.2</version>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
@@ -183,6 +188,12 @@
<artifactId>commons-monitoring-web</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-codec-http</artifactId>
+ <version>4.0.11.Final</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</dependencyManagement>
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginRepository.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginRepository.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginRepository.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginRepository.java Mon Oct 21 12:54:16 2013
@@ -19,6 +19,7 @@ package org.apache.commons.monitoring.re
import org.apache.commons.monitoring.configuration.Configuration;
import org.apache.commons.monitoring.reporting.web.handler.internal.EndpointInfo;
import org.apache.commons.monitoring.reporting.web.handler.internal.Invoker;
+import org.apache.commons.monitoring.spi.SPI;
import java.util.Collection;
import java.util.Map;
@@ -35,7 +36,7 @@ public final class PluginRepository {
public static final String ACTIVATED_FLAG = ".activated";
static {
- for (final Plugin plugin : ServiceLoader.load(Plugin.class, Plugin.class.getClassLoader())) {
+ for (final Plugin plugin : SPI.INSTANCE.find(Plugin.class, Plugin.class.getClassLoader())) {
final String name = plugin.name();
if (name == null) {
throw new IllegalArgumentException("plugin name can't be null");
Modified: commons/sandbox/monitoring/trunk/reporting/src/test/java/org/apache/commons/monitoring/reporting/FormatsTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/test/java/org/apache/commons/monitoring/reporting/FormatsTest.java?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/test/java/org/apache/commons/monitoring/reporting/FormatsTest.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/test/java/org/apache/commons/monitoring/reporting/FormatsTest.java Mon Oct 21 12:54:16 2013
@@ -59,8 +59,8 @@ public class FormatsTest {
helper.renderPlain(template.getTemplate(), template.getUserParams());
assertEquals("<?xml version=\"1.0\"?> <repository> " +
- "<counter name=\"RendererTest\" role=\"failures\" unit=\"u\" Hits=\"1.0\" Max=\"1.0\" Mean=\"1.0\" Min=\"1.0\" StandardDeviation=\"0.0\" Sum=\"1.0\" " +
- "SumOfLogs=\"0.0\" SumOfSquares=\"0.0\" Variance=\"0.0\" GeometricMean=\"1.0\" Value=\"1.0\" Concurrency=\"0.0\" MaxConcurrency=\"1.0\" />" +
+ "<counter name=\"RendererTest\" role=\"failures\" unit=\"u\" Hits=\"1.0\" Max=\"1.0\" Mean=\"1.0\" Min=\"1.0\" " +
+ "StandardDeviation=\"0.0\" Sum=\"1.0\" Variance=\"0.0\" Value=\"1.0\" Concurrency=\"0.0\" MaxConcurrency=\"1.0\" />" +
" </repository>", inline(out));
}
@@ -73,8 +73,8 @@ public class FormatsTest {
assertEquals("{\"counters\":[" +
" {\"name\":\"RendererTest\", \"role\":\"failures\",\"unit\":\"u\",\"Hits\":\"1.0\",\"Max\":\"1.0\",\"Mean\":\"1.0\",\"Min\":\"1.0\"," +
- "\"StandardDeviation\":\"0.0\",\"Sum\":\"1.0\",\"SumOfLogs\":\"0.0\",\"SumOfSquares\":\"0.0\",\"Variance\":\"0.0\"," +
- "\"GeometricMean\":\"1.0\",\"Value\":\"1.0\",\"Concurrency\":\"0.0\",\"MaxConcurrency\":\"1.0\"} ]}", inline(out));
+ "\"StandardDeviation\":\"0.0\",\"Sum\":\"1.0\",\"Variance\":\"0.0\"," +
+ "\"Value\":\"1.0\",\"Concurrency\":\"0.0\",\"MaxConcurrency\":\"1.0\"} ]}", inline(out));
}
@Test
@@ -85,7 +85,7 @@ public class FormatsTest {
helper.renderPlain(template.getTemplate(), template.getUserParams());
assertEquals(CSVFormat.HEADER +
- "RendererTest;failures (u);1.0;1.0;1.0;1.0;0.0;1.0;0.0;0.0;0.0;1.0;1.0;0.0;1.0\n",
+ "RendererTest;failures (u);1.0;1.0;1.0;1.0;0.0;1.0;0.0;1.0;0.0;1.0\n",
out.toString());
}
Added: commons/sandbox/monitoring/trunk/src/site/markdown/collector.md
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/markdown/collector.md?rev=1534136&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/src/site/markdown/collector.md (added)
+++ commons/sandbox/monitoring/trunk/src/site/markdown/collector.md Mon Oct 21 12:54:16 2013
@@ -0,0 +1,64 @@
+<!---
+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.
+-->
+# Collector
+
+Collector modules aims to aggregate data from multiple instances.
+
+## Features
+
+Default implementation only store data in memory.
+
+## Configuration
+
+Just use the collector `DataStoreFactory`: `org.apache.commons.monitoring.collector.server.store.CollectorDataStoreFactory`.
+
+For instance your `commons-monitoring.properties` can look like:
+
+```
+org.apache.commons.monitoring.store.DataStore = org.apache.commons.monitoring.collector.server.store.CollectorDataStoreFactory
+```
+
+The `GaugeDataStore` can be configured through `org.apache.commons.monitoring.collector.gauge.store-class` property.
+By default it uses the in memory implementation but you can set your own one if you want.
+
+Note: if your `GaugeDataStore` has a constructor with a `String`, the marker of the store will be passed to the `GaugeDataStore`.
+
+The `CounterDataStore` needs to be an instance of `org.apache.commons.monitoring.collector.server.store.counter.CollectorCounterStore`.
+By default it is in memory too but it is easily extensible to be persisted if needed.
+
+## Installing the collector
+
+To setup the collector you just need to configure the `DataStoreFactory` (see configuration part) and configure the
+servlet `org.apache.commons.monitoring.collector.server.Collector`.
+
+## Pushing data
+
+The input is an array of event. Events are either gauges or counters.
+
+Here is an array with a single gauge:
+
+```json
+[{"type": "gauge","time": "-","data": {"unit":"u","marker":"client1","value":0.0,"role":"mock"}}]
+```
+
+And here is an array with a single counter:
+
+```json
+[{"type": "counter","time": "2013-10-21T12:50:40Z","data": {"min":1.4,"unit":"ns","hits":4,"max":2.9,"marker":"client1","name":"test","concurrency":0,"m2":1.4099999999999997,"sum":8.2,"mean":2.05,"role":"performances","variance":0.4699999999999999}}]
+```
Modified: commons/sandbox/monitoring/trunk/src/site/markdown/index.md
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/markdown/index.md?rev=1534136&r1=1534135&r2=1534136&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/site/markdown/index.md (original)
+++ commons/sandbox/monitoring/trunk/src/site/markdown/index.md Mon Oct 21 12:54:16 2013
@@ -42,4 +42,6 @@ How to start?
[See Cube](./cube.html)
+[See Collector](./collector.html)
+