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/17 18:40:59 UTC
svn commit: r1533145 - in /commons/sandbox/monitoring/trunk/cube/src:
main/java/org/apache/commons/monitoring/cube/
test/java/org/apache/commons/monitoring/cube/ test/resources/
Author: rmannibucau
Date: Thu Oct 17 16:40:58 2013
New Revision: 1533145
URL: http://svn.apache.org/r1533145
Log:
moving some more cube related logic to Cube + adding marker to be able to know the origin of the event
Modified:
commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/Cube.java
commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeBuilder.java
commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeDataStore.java
commons/sandbox/monitoring/trunk/cube/src/test/java/org/apache/commons/monitoring/cube/CubeDataStoreTest.java
commons/sandbox/monitoring/trunk/cube/src/test/resources/commons-monitoring.properties
Modified: commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/Cube.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/Cube.java?rev=1533145&r1=1533144&r2=1533145&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/Cube.java (original)
+++ commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/Cube.java Thu Oct 17 16:40:58 2013
@@ -21,20 +21,39 @@ import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TimeZone;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Cube {
private static final Logger LOGGER = Logger.getLogger(Cube.class.getName());
+ private static final String JSON_BASE = "{" +
+ "\"type\": \"%s\"," +
+ "\"time\": \"%s\"," +
+ "\"data\": %s" +
+ "}";
+
private static final String POST = "POST";
private static final String CONTENT_TYPE = "Content-Type";
private static final String CONTENT_LENGTH = "Content-Length";
private static final String APPLICATION_JSON = "application/json";
+ private static final String JS_ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
+ private static final String UTC = "UTC";
+
private final CubeBuilder config;
private final Proxy proxy;
+ private final BlockingQueue<DateFormat> isoDateFormatters;
+
public Cube(final CubeBuilder cubeBuilder) {
config = cubeBuilder;
if (config.getProxyHost() != null) {
@@ -42,9 +61,25 @@ public class Cube {
} else {
proxy = Proxy.NO_PROXY;
}
+
+ final int maxConcurrency = 2 * Runtime.getRuntime().availableProcessors();
+ isoDateFormatters = new ArrayBlockingQueue<DateFormat>(maxConcurrency);
+ for (int i = 0; i < maxConcurrency; i++) {
+ isoDateFormatters.add(newIsoDateFormatter());
+ }
+ }
+
+ public StringBuilder newEventStream() {
+ return new StringBuilder();
+ }
+
+ public void post(final StringBuilder payload) {
+ if (payload.length() > 0) {
+ doPost(finalPayload(payload.substring(0, payload.length() - 1)));
+ }
}
- public void post(final String payload) {
+ private void doPost(final String payload) {
try {
final URL url = new URL(config.getCollector());
@@ -80,4 +115,54 @@ public class Cube {
LOGGER.log(Level.WARNING, "Can't post data to collector", e);
}
}
+
+ public static String finalPayload(final String events) {
+ return '[' + events.toString() + ']';
+ }
+
+ public StringBuilder buildEvent(final StringBuilder builder, final String type, final long time, final Map<String, Object> data) {
+ data.put("marker", config.getMarker());
+ return builder.append(String.format(JSON_BASE, type, isoDate(time), buildData(data))).append(',');
+ }
+
+ private String isoDate(final long time) {
+ final Date date = new Date(time);
+
+ DateFormat formatter = null;
+ try {
+ formatter = isoDateFormatters.take();
+ return formatter.format(date);
+ } catch (final InterruptedException e) {
+ return newIsoDateFormatter().format(date);
+ } finally {
+ if (formatter != null) {
+ isoDateFormatters.add(formatter);
+ }
+ }
+ }
+
+ private static String buildData(final Map<String, Object> data) {
+ final StringBuilder builder = new StringBuilder().append("{");
+ for (final Map.Entry<String, Object> entry : data.entrySet()) {
+ builder.append('\"').append(entry.getKey()).append('\"').append(':');
+
+ final Object value = entry.getValue();
+ if (String.class.isInstance(value)) {
+ builder.append('\"').append(value).append('\"');
+ } else {
+ builder.append(value);
+ }
+
+ builder.append(',');
+ }
+ builder.setLength(builder.length() - 1);
+ return builder.append("}").toString();
+ }
+
+ private static DateFormat newIsoDateFormatter() {
+ final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(JS_ISO_FORMAT, Locale.ENGLISH);
+ simpleDateFormat.setTimeZone(TimeZone.getTimeZone(UTC));
+ return simpleDateFormat;
+ }
+
}
Modified: commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeBuilder.java?rev=1533145&r1=1533144&r2=1533145&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeBuilder.java (original)
+++ commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeBuilder.java Thu Oct 17 16:40:58 2013
@@ -18,13 +18,27 @@ package org.apache.commons.monitoring.cu
import org.apache.commons.monitoring.configuration.Configuration;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
@Configuration.AutoSet
public class CubeBuilder {
+ private static final String DEFAULT_MARKER = "sirona";
+
private String proxyHost;
private int proxyPort;
private String collector;
+ private String marker;
public Cube build() {
+ if (marker == null) {
+ try {
+ marker = InetAddress.getLocalHost().getHostName();
+ } catch (final UnknownHostException e) {
+ marker = DEFAULT_MARKER;
+ }
+ }
+
return new Cube(this);
}
@@ -40,6 +54,10 @@ public class CubeBuilder {
return collector;
}
+ public String getMarker() {
+ return marker;
+ }
+
@Override
public String toString() {
return "CubeBuilder{" + collector + '}';
Modified: commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeDataStore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeDataStore.java?rev=1533145&r1=1533144&r2=1533145&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeDataStore.java (original)
+++ commons/sandbox/monitoring/trunk/cube/src/main/java/org/apache/commons/monitoring/cube/CubeDataStore.java Thu Oct 17 16:40:58 2013
@@ -25,45 +25,20 @@ import org.apache.commons.monitoring.rep
import org.apache.commons.monitoring.store.BatchCounterDataStore;
import org.apache.commons.monitoring.store.GaugeValuesRequest;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
import java.util.Collections;
-import java.util.Date;
import java.util.HashMap;
-import java.util.Locale;
import java.util.Map;
-import java.util.TimeZone;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
public class CubeDataStore extends BatchCounterDataStore {
- private static final String JSON_BASE = "{" +
- "\"type\": \"%s\"," +
- "\"time\": \"%s\"," +
- "\"data\": %s" +
- "}";
-
private static final String GAUGE_TYPE = "gauge";
private static final String COUNTER_TYPE = "counter";
- private static final String JS_ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
- private static final String UTC = "UTC";
private final Cube cube = Configuration.findOrCreateInstance(CubeBuilder.class).build();
- private final BlockingQueue<DateFormat> isoDateFormatters;
-
- public CubeDataStore() {
- final int maxConcurrency = 2 * Runtime.getRuntime().availableProcessors();
- isoDateFormatters = new ArrayBlockingQueue<DateFormat>(maxConcurrency);
- for (int i = 0; i < maxConcurrency; i++) {
- isoDateFormatters.add(newIsoDateFormatter());
- }
- }
-
@Override
protected synchronized void pushCountersByBatch(final Repository instance) {
final long ts = System.currentTimeMillis();
- final StringBuilder events = new StringBuilder();
+ final StringBuilder events = cube.newEventStream();
for (final Counter counter : instance) {
final MapBuilder data = new MapBuilder()
.add("name", counter.getKey().getName())
@@ -76,25 +51,22 @@ public class CubeDataStore extends Batch
}
}
- buildEvent(events, COUNTER_TYPE, ts, data.map()).append(',');
- }
- if (events.length() > 0) {
- events.setLength(events.length() - 1);
- cube.post(finalPayload(events));
+ cube.buildEvent(events, COUNTER_TYPE, ts, data.map());
}
+ cube.post(events);
}
@Override
public void addToGauge(final Gauge gauge, final long time, final double value) {
final Role role = gauge.role();
- cube.post(finalPayload(
- buildEvent(new StringBuilder(), GAUGE_TYPE, time,
+ cube.post(
+ cube.buildEvent(new StringBuilder(), GAUGE_TYPE, time,
new MapBuilder()
.add("value", value)
.add("role", role.getName())
.add("unit", role.getUnit().getName())
- .map())));
+ .map()));
}
@Override
@@ -102,54 +74,6 @@ public class CubeDataStore extends Batch
return Collections.emptyMap(); // TODO: maybe query cube?
}
- private static String finalPayload(final StringBuilder events) {
- return '[' + events.toString() + ']';
- }
-
- private StringBuilder buildEvent(final StringBuilder builder, final String type, final long time, final Map<String, Object> data) {
- return builder.append(String.format(JSON_BASE, type, isoDate(time), buildData(data)));
- }
-
- private String isoDate(final long time) {
- final Date date = new Date(time);
-
- DateFormat formatter = null;
- try {
- formatter = isoDateFormatters.take();
- return formatter.format(date);
- } catch (final InterruptedException e) {
- return newIsoDateFormatter().format(date);
- } finally {
- if (formatter != null) {
- isoDateFormatters.add(formatter);
- }
- }
- }
-
- private static String buildData(final Map<String, Object> data) {
- final StringBuilder builder = new StringBuilder().append("{");
- for (final Map.Entry<String, Object> entry : data.entrySet()) {
- builder.append('\"').append(entry.getKey()).append('\"').append(':');
-
- final Object value = entry.getValue();
- if (String.class.isInstance(value)) {
- builder.append('\"').append(value).append('\"');
- } else {
- builder.append(value);
- }
-
- builder.append(',');
- }
- builder.setLength(builder.length() - 1);
- return builder.append("}").toString();
- }
-
- private static DateFormat newIsoDateFormatter() {
- final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(JS_ISO_FORMAT, Locale.ENGLISH);
- simpleDateFormat.setTimeZone(TimeZone.getTimeZone(UTC));
- return simpleDateFormat;
- }
-
private static class MapBuilder {
private final Map<String, Object> map = new HashMap<String, Object>();
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=1533145&r1=1533144&r2=1533145&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 Thu Oct 17 16:40:58 2013
@@ -25,6 +25,8 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
@@ -39,7 +41,7 @@ public class CubeDataStoreTest {
@Before
public void startCube() throws IOException {
- server = new CubeServer("localhost", 1080).start();
+ server = new CubeServer("localhost", 1234).start();
Repository.INSTANCE.clear();
gauges = new Gauge.LoaderHelper(false);
}
@@ -52,7 +54,7 @@ public class CubeDataStoreTest {
}
@Test
- public void store() throws InterruptedException {
+ public void store() throws InterruptedException, UnknownHostException {
{ // force some counter data
final Counter counter = Repository.INSTANCE.getCounter(new Counter.Key(Role.PERFORMANCES, "test"));
counter.add(1.4);
@@ -76,10 +78,11 @@ public class CubeDataStoreTest {
}
}
- assertTrue(gauges.contains("[{\"type\": \"gauge\",\"time\": \"-\",\"data\": {\"unit\":\"u\",\"value\":0.0,\"role\":\"mock\"}}]"));
- assertTrue(gauges.contains("[{\"type\": \"gauge\",\"time\": \"-\",\"data\": {\"unit\":\"u\",\"value\":1.0,\"role\":\"mock\"}}]"));
- assertTrue(gauges.contains("[{\"type\": \"gauge\",\"time\": \"-\",\"data\": {\"unit\":\"u\",\"value\":2.0,\"role\":\"mock\"}}]"));
- assertTrue(gauges.contains("[{\"type\": \"gauge\",\"time\": \"-\",\"data\": {\"unit\":\"u\",\"value\":3.0,\"role\":\"mock\"}}]"));
+ final String host = InetAddress.getLocalHost().getHostName();
+ assertTrue(gauges.contains("[{\"type\": \"gauge\",\"time\": \"-\",\"data\": {\"unit\":\"u\",\"marker\":\"" + host + "\",\"value\":0.0,\"role\":\"mock\"}}]"));
+ assertTrue(gauges.contains("[{\"type\": \"gauge\",\"time\": \"-\",\"data\": {\"unit\":\"u\",\"marker\":\"" + host + "\",\"value\":1.0,\"role\":\"mock\"}}]"));
+ assertTrue(gauges.contains("[{\"type\": \"gauge\",\"time\": \"-\",\"data\": {\"unit\":\"u\",\"marker\":\"" + host + "\",\"value\":2.0,\"role\":\"mock\"}}]"));
+ assertTrue(gauges.contains("[{\"type\": \"gauge\",\"time\": \"-\",\"data\": {\"unit\":\"u\",\"marker\":\"" + host + "\",\"value\":3.0,\"role\":\"mock\"}}]"));
assertTrue(counters >= 3);
assertNotNull(aCounterMessage);
@@ -87,5 +90,6 @@ public class CubeDataStoreTest {
assertThat(aCounterMessage, containsString("Value"));
assertThat(aCounterMessage, containsString("Hits"));
assertThat(aCounterMessage, containsString("Sum"));
+ assertThat(aCounterMessage, containsString("marker"));
}
}
Modified: commons/sandbox/monitoring/trunk/cube/src/test/resources/commons-monitoring.properties
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/cube/src/test/resources/commons-monitoring.properties?rev=1533145&r1=1533144&r2=1533145&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/cube/src/test/resources/commons-monitoring.properties (original)
+++ commons/sandbox/monitoring/trunk/cube/src/test/resources/commons-monitoring.properties Thu Oct 17 16:40:58 2013
@@ -16,4 +16,4 @@
# under the License.
org.apache.commons.monitoring.store.DataStore = org.apache.commons.monitoring.cube.CubeDataStore
org.apache.commons.monitoring.cube.period = 100
-org.apache.commons.monitoring.cube.CubeBuilder.collector = http://localhost:1080/1.0/event/put
+org.apache.commons.monitoring.cube.CubeBuilder.collector = http://localhost:1234/1.0/event/put