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/14 08:35:02 UTC
svn commit: r1531797 - in /commons/sandbox/monitoring/trunk:
core/src/main/java/org/apache/commons/monitoring/configuration/
core/src/main/java/org/apache/commons/monitoring/gauges/
core/src/main/java/org/apache/commons/monitoring/store/ graphite/src/m...
Author: rmannibucau
Date: Mon Oct 14 06:35:01 2013
New Revision: 1531797
URL: http://svn.apache.org/r1531797
Log:
removing GaugeObserver and using DataStore API to write a GraphiteDataStore
Added:
commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/BatchCounterDataStore.java
commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryCounterBaseStore.java
commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/GraphiteDataStore.java
Removed:
commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/gauges/GaugeObserver.java
commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/GraphiteGaugeObserver.java
commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/Graphites.java
Modified:
commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java
commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/gauges/DefaultGaugeManager.java
commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/DefaultDataStore.java
commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/Graphite.java
commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/lifecycle/GraphiteLifecycle.java
commons/sandbox/monitoring/trunk/graphite/src/test/java/org/apache/commons/monitoring/graphite/GraphiteTestBase.java
commons/sandbox/monitoring/trunk/graphite/src/test/resources/commons-monitoring.properties
commons/sandbox/monitoring/trunk/src/site/markdown/graphite.md
Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java?rev=1531797&r1=1531796&r2=1531797&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java (original)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java Mon Oct 14 06:35:01 2013
@@ -33,13 +33,16 @@ import java.lang.reflect.InvocationTarge
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
public final class Configuration {
private static final Logger LOGGER = Logger.getLogger(Configuration.class.getName());
+ private static final Map<Class<?>, Object> SINGLETONS = new ConcurrentHashMap<Class<?>, Object>();
private static final Collection<ToDestroy> INSTANCES = new ArrayList<ToDestroy>();
public static final String COMMONS_MONITORING_PREFIX = "org.apache.commons.monitoring.";
@@ -96,7 +99,9 @@ public final class Configuration {
}
}
- return newInstance(clazz, config);
+ final T t = newInstance(clazz, config);
+ SINGLETONS.put(clazz, t);
+ return t;
} catch (final Exception e) {
throw new MonitoringException(e);
}
@@ -154,6 +159,10 @@ public final class Configuration {
return clazz.cast(instance);
}
+ public static <T> T getInstance(final Class<T> clazz) {
+ return clazz.cast(SINGLETONS.get(clazz));
+ }
+
public static boolean is(final String key, final boolean defaultValue) {
return Boolean.parseBoolean(getProperty(key, Boolean.toString(defaultValue)));
}
@@ -171,6 +180,7 @@ public final class Configuration {
c.destroy();
}
INSTANCES.clear();
+ SINGLETONS.clear();
}
private Configuration() {
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=1531797&r1=1531796&r2=1531797&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 14 06:35:01 2013
@@ -17,7 +17,6 @@
package org.apache.commons.monitoring.gauges;
import org.apache.commons.monitoring.Role;
-import org.apache.commons.monitoring.configuration.Configuration;
import org.apache.commons.monitoring.store.DataStore;
import java.util.Map;
@@ -27,7 +26,6 @@ import java.util.concurrent.ConcurrentHa
public final class DefaultGaugeManager implements GaugeManager {
private final Map<Role, Timer> timers = new ConcurrentHashMap<Role, Timer>();
- private final GaugeObserver[] observers = Configuration.newInstances(GaugeObserver.class);
private final DataStore store;
public DefaultGaugeManager(final DataStore dataStore) {
@@ -58,18 +56,16 @@ public final class DefaultGaugeManager i
final Timer timer = new Timer("gauge-" + role.getName() + "-timer", true);
timers.put(role, timer);
- timer.scheduleAtFixedRate(new GaugeTask(store, gauge, observers), 0, gauge.period());
+ timer.scheduleAtFixedRate(new GaugeTask(store, gauge), 0, gauge.period());
}
private static class GaugeTask extends TimerTask {
private final Gauge gauge;
private final DataStore store;
- private final GaugeObserver[] observers; // acceptable since gauges are not fast update entities
- public GaugeTask(final DataStore store, final Gauge gauge, final GaugeObserver[] observers) {
+ public GaugeTask(final DataStore store, final Gauge gauge) {
this.store = store;
this.gauge = gauge;
- this.observers = observers;
}
@Override
@@ -78,13 +74,6 @@ public final class DefaultGaugeManager i
final double value = gauge.value();
store.addToGauge(gauge, time, value);
- for (final GaugeObserver observer : observers) {
- try {
- observer.observe(gauge, time, value);
- } catch (final Exception e) {
- // no-op: don't make the thread failling because of an observer
- }
- }
}
}
}
Added: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/BatchCounterDataStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/BatchCounterDataStore.java?rev=1531797&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/BatchCounterDataStore.java (added)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/BatchCounterDataStore.java Mon Oct 14 06:35:01 2013
@@ -0,0 +1,82 @@
+/*
+ * 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.store;
+
+import org.apache.commons.monitoring.Role;
+import org.apache.commons.monitoring.configuration.Configuration;
+import org.apache.commons.monitoring.repositories.Repository;
+import org.apache.commons.monitoring.util.DaemonThreadFactory;
+
+import java.util.Locale;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+public abstract class BatchCounterDataStore extends InMemoryCounterBaseStore {
+ protected final BatchFuture scheduledTask;
+
+ protected BatchCounterDataStore() {
+ final String name = getClass().getSimpleName().toLowerCase(Locale.ENGLISH).replace("datastore", "");
+ final long period = Configuration.getInteger(Configuration.COMMONS_MONITORING_PREFIX + name + ".period", 60000);
+
+ final ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor(new DaemonThreadFactory(name + "-schedule-"));
+ final ScheduledFuture<?> future = ses.schedule(new BatchPushCountersTask(), period, TimeUnit.MILLISECONDS);
+ ses.shutdown(); // don't add anything more now
+ scheduledTask = new BatchFuture(ses, future);
+ }
+
+ public void shutdown() {
+ scheduledTask.done();
+ }
+
+ @Override
+ public void createOrNoopGauge(final Role role) {
+ // no-op
+ }
+
+ protected abstract void pushCountersByBatch(final Repository instance);
+
+ private class BatchPushCountersTask implements Runnable {
+ @Override
+ public void run() {
+ pushCountersByBatch(Repository.INSTANCE);
+ }
+ }
+
+ public static class BatchFuture {
+ private final ScheduledExecutorService executor;
+ private final ScheduledFuture<?> task;
+
+ public BatchFuture(final ScheduledExecutorService ses, final ScheduledFuture<?> future) {
+ this.executor = ses;
+ this.task = future;
+ }
+
+ public void done() {
+ try {
+ task.cancel(false);
+ executor.awaitTermination(1, TimeUnit.MINUTES);
+ if (!task.isDone()) {
+ task.cancel(true);
+ }
+ } catch (final InterruptedException e) {
+ // no-op
+ }
+ }
+ }
+}
Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/DefaultDataStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/DefaultDataStore.java?rev=1531797&r1=1531796&r2=1531797&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/DefaultDataStore.java (original)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/DefaultDataStore.java Mon Oct 14 06:35:01 2013
@@ -18,63 +18,18 @@ package org.apache.commons.monitoring.st
import org.apache.commons.monitoring.Role;
import org.apache.commons.monitoring.configuration.Configuration;
-import org.apache.commons.monitoring.counters.Counter;
-import org.apache.commons.monitoring.counters.DefaultCounter;
import org.apache.commons.monitoring.gauges.Gauge;
-import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ConcurrentSkipListMap;
-import java.util.concurrent.locks.Lock;
-public class DefaultDataStore implements DataStore {
- private final ConcurrentMap<Counter.Key, Counter> counters = new ConcurrentHashMap<Counter.Key, Counter>(50);
+public class DefaultDataStore extends InMemoryCounterBaseStore {
private final Map<Role, Map<Long, Double>> gauges = new ConcurrentHashMap<Role, Map<Long, Double>>();
@Override
- public Counter getOrCreateCounter(final Counter.Key key) {
- Counter counter = counters.get(key);
- if (counter == null) {
- counter = new DefaultCounter(key, this);
- final Counter previous = counters.putIfAbsent(key, counter);
- if (previous != null) {
- counter = previous;
- }
- }
- return counter;
- }
-
- @Override
- public void clearCounters() {
- counters.clear();
- }
-
- @Override
- public Collection<Counter> getCounters() {
- return counters.values();
- }
-
- @Override
- public void addToCounter(final Counter counter, final double delta) {
- if (!DefaultCounter.class.isInstance(counter)) {
- throw new IllegalArgumentException(DefaultDataStore.class.getName() + " only supports " + DefaultCounter.class.getName());
- }
-
- final DefaultCounter defaultCounter = DefaultCounter.class.cast(counter);
- final Lock lock = defaultCounter.getLock();
- lock.lock();
- try {
- defaultCounter.addInternal(delta);
- } finally {
- lock.unlock();
- }
- }
-
- @Override
public Map<Long, Double> getGaugeValues(GaugeValuesRequest gaugeValuesRequest) {
final Map<Long, Double> map = gauges.get(gaugeValuesRequest.getRole());
if (map == null) {
Added: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryCounterBaseStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryCounterBaseStore.java?rev=1531797&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryCounterBaseStore.java (added)
+++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/store/InMemoryCounterBaseStore.java Mon Oct 14 06:35:01 2013
@@ -0,0 +1,68 @@
+/*
+ * 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.store;
+
+import org.apache.commons.monitoring.counters.Counter;
+import org.apache.commons.monitoring.counters.DefaultCounter;
+
+import java.util.Collection;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.locks.Lock;
+
+public abstract class InMemoryCounterBaseStore implements DataStore {
+ private final ConcurrentMap<Counter.Key, Counter> counters = new ConcurrentHashMap<Counter.Key, Counter>(50);
+
+ @Override
+ public Counter getOrCreateCounter(final Counter.Key key) {
+ Counter counter = counters.get(key);
+ if (counter == null) {
+ counter = new DefaultCounter(key, this);
+ final Counter previous = counters.putIfAbsent(key, counter);
+ if (previous != null) {
+ counter = previous;
+ }
+ }
+ return counter;
+ }
+
+ @Override
+ public void clearCounters() {
+ counters.clear();
+ }
+
+ @Override
+ public Collection<Counter> getCounters() {
+ return counters.values();
+ }
+
+ @Override
+ public void addToCounter(final Counter counter, final double delta) {
+ if (!DefaultCounter.class.isInstance(counter)) {
+ throw new IllegalArgumentException(DefaultDataStore.class.getName() + " only supports " + DefaultCounter.class.getName());
+ }
+
+ final DefaultCounter defaultCounter = DefaultCounter.class.cast(counter);
+ final Lock lock = defaultCounter.getLock();
+ lock.lock();
+ try {
+ defaultCounter.addInternal(delta);
+ } finally {
+ lock.unlock();
+ }
+ }
+}
Modified: commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/Graphite.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/Graphite.java?rev=1531797&r1=1531796&r2=1531797&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/Graphite.java (original)
+++ commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/Graphite.java Mon Oct 14 06:35:01 2013
@@ -62,6 +62,14 @@ public class Graphite implements Closeab
this(factory, InetAddress.getByName(address), port, charset);
}
+ public InetAddress getAddress() {
+ return address;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
public void open() throws IOException {
socket = factory.createSocket(address, port);
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), charset));
Added: commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/GraphiteDataStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/GraphiteDataStore.java?rev=1531797&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/GraphiteDataStore.java (added)
+++ commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/GraphiteDataStore.java Mon Oct 14 06:35:01 2013
@@ -0,0 +1,80 @@
+/*
+ * 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.graphite;
+
+import org.apache.commons.monitoring.configuration.Configuration;
+import org.apache.commons.monitoring.counters.Counter;
+import org.apache.commons.monitoring.counters.MetricData;
+import org.apache.commons.monitoring.gauges.Gauge;
+import org.apache.commons.monitoring.repositories.Repository;
+import org.apache.commons.monitoring.store.BatchCounterDataStore;
+import org.apache.commons.monitoring.store.GaugeValuesRequest;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class GraphiteDataStore extends BatchCounterDataStore {
+ private static final Logger LOGGER = Logger.getLogger(GraphiteDataStore.class.getName());
+
+ private static final Graphite GRAPHITE = Configuration.newInstance(GraphiteBuilder.class).build();
+
+ private static final String GAUGE_PREFIX = "gauge-";
+ private static final String COUNTER_PREFIX = "counter-";
+ private static final char SEP = '-';
+
+ @Override
+ protected void pushCountersByBatch(final Repository instance) {
+ try {
+ GRAPHITE.open();
+
+ final long ts = System.currentTimeMillis();
+
+ for (final Counter counter : instance) {
+ final Counter.Key key = counter.getKey();
+ final String prefix = COUNTER_PREFIX + key.getRole().getName() + SEP + key.getName() + SEP;
+
+ for (final MetricData data : MetricData.values()) {
+ GRAPHITE.push(
+ prefix + data.name(),
+ data.value(counter),
+ ts);
+ }
+ }
+ } catch (final IOException e) {
+ LOGGER.log(Level.SEVERE, e.getMessage(), e);
+ } finally {
+ GRAPHITE.close();
+ }
+ }
+
+ @Override
+ public void addToGauge(final Gauge gauge, final long time, final double value) {
+ try {
+ GRAPHITE.simplePush(GAUGE_PREFIX + gauge.role().getName(), value, time);
+ } catch (final IOException e) {
+ // no-op
+ }
+ }
+
+ @Override
+ public Map<Long, Double> getGaugeValues(final GaugeValuesRequest gaugeValuesRequest) {
+ return Collections.emptyMap(); // when using graphite we expect the user to use Graphite to render metrics
+ }
+}
Modified: commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/lifecycle/GraphiteLifecycle.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/lifecycle/GraphiteLifecycle.java?rev=1531797&r1=1531796&r2=1531797&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/lifecycle/GraphiteLifecycle.java (original)
+++ commons/sandbox/monitoring/trunk/graphite/src/main/java/org/apache/commons/monitoring/graphite/lifecycle/GraphiteLifecycle.java Mon Oct 14 06:35:01 2013
@@ -16,21 +16,25 @@
*/
package org.apache.commons.monitoring.graphite.lifecycle;
-import org.apache.commons.monitoring.graphite.Graphites;
+import org.apache.commons.monitoring.configuration.Configuration;
+import org.apache.commons.monitoring.graphite.GraphiteDataStore;
+import org.apache.commons.monitoring.store.DataStore;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class GraphiteLifecycle implements ServletContextListener {
- private Graphites.GraphiteFuture handler;
-
@Override
public void contextInitialized(final ServletContextEvent servletContextEvent) {
- handler = Graphites.scheduleReport();
+ // no-op
}
@Override
public void contextDestroyed(final ServletContextEvent servletContextEvent) {
- handler.done();
+ final DataStore instance = Configuration.getInstance(DataStore.class);
+ if (GraphiteDataStore.class.isInstance(instance)
+ && instance.getClass().getClassLoader() == Thread.currentThread().getContextClassLoader()) {
+ GraphiteDataStore.class.cast(instance).shutdown();
+ }
}
}
Modified: commons/sandbox/monitoring/trunk/graphite/src/test/java/org/apache/commons/monitoring/graphite/GraphiteTestBase.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/graphite/src/test/java/org/apache/commons/monitoring/graphite/GraphiteTestBase.java?rev=1531797&r1=1531796&r2=1531797&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/graphite/src/test/java/org/apache/commons/monitoring/graphite/GraphiteTestBase.java (original)
+++ commons/sandbox/monitoring/trunk/graphite/src/test/java/org/apache/commons/monitoring/graphite/GraphiteTestBase.java Mon Oct 14 06:35:01 2013
@@ -17,6 +17,7 @@
package org.apache.commons.monitoring.graphite;
import org.apache.commons.monitoring.gauges.Gauge;
+import org.apache.commons.monitoring.graphite.lifecycle.GraphiteLifecycle;
import org.apache.commons.monitoring.graphite.server.GraphiteMockServer;
import org.apache.commons.monitoring.repositories.Repository;
import org.junit.After;
@@ -29,7 +30,6 @@ import java.util.Collection;
public abstract class GraphiteTestBase {
private GraphiteMockServer server;
- private Graphites.GraphiteFuture future;
private Gauge.LoaderHelper gauges;
@BeforeClass
@@ -41,13 +41,12 @@ public abstract class GraphiteTestBase {
@Before
public void startGraphite() throws IOException {
server = new GraphiteMockServer(1234).start();
- future = Graphites.scheduleReport();
gauges = new Gauge.LoaderHelper(false);
}
@After
public void shutdownGraphite() throws IOException {
- future.done();
+ new GraphiteLifecycle().contextDestroyed(null);
gauges.destroy();
server.stop();
}
Modified: commons/sandbox/monitoring/trunk/graphite/src/test/resources/commons-monitoring.properties
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/graphite/src/test/resources/commons-monitoring.properties?rev=1531797&r1=1531796&r2=1531797&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/graphite/src/test/resources/commons-monitoring.properties (original)
+++ commons/sandbox/monitoring/trunk/graphite/src/test/resources/commons-monitoring.properties Mon Oct 14 06:35:01 2013
@@ -14,9 +14,9 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-org.apache.commons.monitoring.graphite.period = 100
+org.apache.commons.monitoring.store.DataStore = org.apache.commons.monitoring.graphite.GraphiteDataStore
-org.apache.commons.monitoring.gauges.GaugeObserver = org.apache.commons.monitoring.graphite.GraphiteGaugeObserver
+org.apache.commons.monitoring.graphite.period = 100
org.apache.commons.monitoring.graphite.GraphiteBuilder.address = localhost
org.apache.commons.monitoring.graphite.GraphiteBuilder.port = 1234
Modified: commons/sandbox/monitoring/trunk/src/site/markdown/graphite.md
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/markdown/graphite.md?rev=1531797&r1=1531796&r2=1531797&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/site/markdown/graphite.md (original)
+++ commons/sandbox/monitoring/trunk/src/site/markdown/graphite.md Mon Oct 14 06:35:01 2013
@@ -32,24 +32,26 @@ For instance your `commons-monitoring.pr
org.apache.commons.monitoring.graphite.GraphiteBuilder.address = localhost
org.apache.commons.monitoring.graphite.GraphiteBuilder.port = 1234
```
+## DataStore
-## Counters
+To push metrics (Gauges + Counters) to Graphite you can use the dedicated `DataStore`: `org.apache.commons.monitoring.graphite.GraphiteDataStore`.
-To push counters just add the `ServletContextListener` dedicated
-to Graphite integration: `org.apache.commons.monitoring.graphite.lifecycle.GraphiteLifecycle`.
+Simply add to `commons-monitoring.properties` the line:
-The available configuration is:
+```
+org.apache.commons.monitoring.store.DataStore = org.apache.commons.monitoring.graphite.GraphiteDataStore
+```
-* `org.apache.commons.monitoring.graphite.period`: which period to use to push counters data to Graphite (default to 1mn).
+### Counters
-Note: if you are not in a web application you'll need to use `Graphites.scheduleReport` methods.
+Note: when deployed in a webapp you'll need to add the `ServletContextListener` dedicated
+to Graphite integration to release correctly resources
+when the webapp is undeployed: `org.apache.commons.monitoring.graphite.lifecycle.GraphiteLifecycle`.
-## Gauges
+You can also configure the period used to flush counters values:
-To push gauges to a Graphite instance just add the Graphite `GaugeObserver`: `org.apache.commons.monitoring.graphite.GraphiteGaugeObserver`.
+* `org.apache.commons.monitoring.graphite.period`: which period to use to push counters data to Graphite (default to 1mn).
-To do so just add in `commons-monitoring.properties`:
+## Limitations
-```
-org.apache.commons.monitoring.gauges.GaugeObserver = org.apache.commons.monitoring.graphite.GraphiteGaugeObserver
-```
+When using GraphiteDataStore you cannot retrieve locally gauges values (you are expected to use Graphite for it).