modules/enterprise/server/server-metrics/pom.xml
| 6
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MeasurementCollector.java
| 5
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MinutesDateTimeService.java
| 27 +++
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SecondsDateTimeService.java
| 27 +++
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java
| 8 -
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorDateTimeService.java
| 27 ---
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlan.java
| 44 ++++++
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
| 68 ++++++++--
8 files changed, 167 insertions(+), 45 deletions(-)
New commits:
commit 9f54a698eff7f8ad3c2dec46f11d9e331560116b
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Oct 1 10:48:52 2013 -0400
rename system properties set in surefire plugin configuration
diff --git a/modules/enterprise/server/server-metrics/pom.xml
b/modules/enterprise/server/server-metrics/pom.xml
index 16eacd7..0b4c141 100644
--- a/modules/enterprise/server/server-metrics/pom.xml
+++ b/modules/enterprise/server/server-metrics/pom.xml
@@ -153,9 +153,9 @@
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
-
<rhq.cassandra.cluster.skip-shutdown>${skipClusterShutdown}</rhq.cassandra.cluster.skip-shutdown>
-
<rhq.cassandra.cluster.dir>${rhq.cassandra.cluster.dir}</rhq.cassandra.cluster.dir>
-
<rhq.cassandra.cluster.deploy>${deployCluster}</rhq.cassandra.cluster.deploy>
+
<rhq.storage.cluster.skip-shutdown>${skipClusterShutdown}</rhq.storage.cluster.skip-shutdown>
+
<rhq.storage.cluster.dir>${rhq.storage.cluster.dir}</rhq.storage.cluster.dir>
+
<rhq.storage.cluster.deploy>${deployCluster}</rhq.storage.cluster.deploy>
</systemPropertyVariables>
</configuration>
</plugin>
commit 8704dabea969d60c69961de8eab4b251f7ee0dcd
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Oct 1 09:58:47 2013 -0400
rename class
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MinutesDateTimeService.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MinutesDateTimeService.java
new file mode 100644
index 0000000..f3eba82
--- /dev/null
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MinutesDateTimeService.java
@@ -0,0 +1,27 @@
+package org.rhq.metrics.simulator;
+
+import org.joda.time.DateTime;
+import org.joda.time.Duration;
+
+import org.rhq.server.metrics.DateTimeService;
+
+/**
+ * @author John Sanda
+ */
+public class MinutesDateTimeService extends DateTimeService {
+
+ @Override
+ public DateTime getTimeSlice(DateTime dt, Duration duration) {
+ if (duration.equals(configuration.getRawTimeSliceDuration())) {
+ int seconds = ((dt.getMinuteOfHour() * 60) + dt.getSecondOfMinute()) / 150;
+ return dt.hourOfDay().roundFloorCopy().plusSeconds(seconds * 150);
+ } else if (duration.equals(configuration.getOneHourTimeSliceDuration())) {
+ int minutes = dt.minuteOfHour().get() / 15;
+ return dt.hourOfDay().roundFloorCopy().plusMinutes(minutes * 15);
+ } else if (duration.equals(configuration.getSixHourTimeSliceDuration())) {
+ return dt.hourOfDay().roundFloorCopy();
+ } else {
+ throw new IllegalArgumentException("The duration [" + duration +
"] is not supported");
+ }
+ }
+}
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorDateTimeService.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorDateTimeService.java
deleted file mode 100644
index c62340b..0000000
---
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorDateTimeService.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.rhq.metrics.simulator;
-
-import org.joda.time.DateTime;
-import org.joda.time.Duration;
-
-import org.rhq.server.metrics.DateTimeService;
-
-/**
- * @author John Sanda
- */
-public class SimulatorDateTimeService extends DateTimeService {
-
- @Override
- public DateTime getTimeSlice(DateTime dt, Duration duration) {
- if (duration.equals(configuration.getRawTimeSliceDuration())) {
- int seconds = ((dt.getMinuteOfHour() * 60) + dt.getSecondOfMinute()) / 150;
- return dt.hourOfDay().roundFloorCopy().plusSeconds(seconds * 150);
- } else if (duration.equals(configuration.getOneHourTimeSliceDuration())) {
- int minutes = dt.minuteOfHour().get() / 15;
- return dt.hourOfDay().roundFloorCopy().plusMinutes(minutes * 15);
- } else if (duration.equals(configuration.getSixHourTimeSliceDuration())) {
- return dt.hourOfDay().roundFloorCopy();
- } else {
- throw new IllegalArgumentException("The duration [" + duration +
"] is not supported");
- }
- }
-}
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
index 79e07da..95871bd 100644
---
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
@@ -34,8 +34,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.joda.time.Minutes;
import org.joda.time.Seconds;
+import org.rhq.metrics.simulator.MinutesDateTimeService;
import org.rhq.metrics.simulator.SecondsDateTimeService;
-import org.rhq.metrics.simulator.SimulatorDateTimeService;
import org.rhq.server.metrics.DateTimeService;
import org.rhq.server.metrics.MetricsConfiguration;
@@ -65,8 +65,8 @@ public class SimulationPlanner {
simulation.setAggregationInterval(getLong(root.get("aggregationInterval"),
150000L));
simulation.setMetricsServerConfiguration(createMinutesConfiguration());
simulation.setMetricsReportInterval(getInt(root.get("metricsReportInterval"),
180));
- simulation.setDateTimeService(new SimulatorDateTimeService());
- dateTimeService = new SimulatorDateTimeService();
+ simulation.setDateTimeService(new MinutesDateTimeService());
+ dateTimeService = new MinutesDateTimeService();
break;
default: // HOURS
simulation.setCollectionInterval(getLong(root.get("collectionInterval"),
30000L));
commit f0f0dfea78cac58164075ff3b77c1972258a4aae
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Oct 1 09:42:43 2013 -0400
support sub-minute intervals
With sub-minute intervals the time slices are,
raw data --> 2.5 sec
1 hr data --> 15 sec
6 hr data --> 1 minute
Aggregation runs every 2.5 seconds. TTLs are set accordingly as well. The reason
for these compressed internvals is so that we can quickly generate a year's
worth of data to make observations about sizes on disk.
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MeasurementCollector.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MeasurementCollector.java
index eeb508e..531ba96 100644
---
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MeasurementCollector.java
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MeasurementCollector.java
@@ -35,6 +35,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.measurement.MeasurementDataNumeric;
+import org.rhq.server.metrics.DateTimeService;
import org.rhq.server.metrics.MetricsServer;
import org.rhq.server.metrics.RawDataInsertedCallback;
@@ -53,10 +54,10 @@ public class MeasurementCollector implements Runnable {
private Metrics metrics;
- private SimulatorDateTimeService dateTimeService;
+ private DateTimeService dateTimeService;
public MeasurementCollector(int batchSize, int startingScheduleId, Metrics metrics,
MetricsServer metricsServer,
- SimulatorDateTimeService dateTimeService) {
+ DateTimeService dateTimeService) {
this.batchSize = batchSize;
this.startingScheduleId = startingScheduleId;
this.metrics = metrics;
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SecondsDateTimeService.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SecondsDateTimeService.java
new file mode 100644
index 0000000..7194079
--- /dev/null
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SecondsDateTimeService.java
@@ -0,0 +1,27 @@
+package org.rhq.metrics.simulator;
+
+import org.joda.time.DateTime;
+import org.joda.time.Duration;
+
+import org.rhq.server.metrics.DateTimeService;
+
+/**
+ * @author John Sanda
+ */
+public class SecondsDateTimeService extends DateTimeService {
+
+ @Override
+ public DateTime getTimeSlice(DateTime dt, Duration duration) {
+ if (duration.equals(configuration.getRawTimeSliceDuration())) {
+ int milliseconds = (dt.getSecondOfMinute() * 1000) / 2500;
+ return dt.minuteOfHour().roundFloorCopy().plus(milliseconds * 2500);
+ } else if (duration.equals(configuration.getOneHourTimeSliceDuration())) {
+ int seconds = dt.getSecondOfMinute() / 15;
+ return dt.minuteOfHour().roundFloorCopy().plusSeconds(seconds * 15);
+ } else if (duration.equals(configuration.getSixHourTimeSliceDuration())) {
+ return dt.minuteOfHour().roundFloorCopy();
+ } else {
+ throw new IllegalArgumentException("The duration [" + duration +
"] is not supported");
+ }
+ }
+}
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java
index 1ec9399..4b250b4 100644
---
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java
@@ -79,9 +79,7 @@ public class Simulator implements ShutdownManager {
metricsServer.setDAO(metricsDAO);
metricsServer.setConfiguration(plan.getMetricsServerConfiguration());
- SimulatorDateTimeService dateTimeService = new SimulatorDateTimeService();
- dateTimeService.setConfiguration(plan.getMetricsServerConfiguration());
- metricsServer.setDateTimeService(dateTimeService);
+ metricsServer.setDateTimeService(plan.getDateTimeService());
Metrics metrics = new Metrics();
@@ -92,8 +90,8 @@ public class Simulator implements ShutdownManager {
for (int i = 0; i < plan.getNumMeasurementCollectors(); ++i) {
collectors.scheduleAtFixedRate(new MeasurementCollector(plan.getBatchSize(),
- plan.getBatchSize() * i, metrics, metricsServer, dateTimeService), 0,
plan.getCollectionInterval(),
- TimeUnit.MILLISECONDS);
+ plan.getBatchSize() * i, metrics, metricsServer,
plan.getDateTimeService()), 0,
+ plan.getCollectionInterval(), TimeUnit.MILLISECONDS);
}
aggregators.scheduleAtFixedRate(measurementAggregator, 0,
plan.getAggregationInterval(),
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlan.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlan.java
index 630c0ca..dfe0695 100644
---
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlan.java
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlan.java
@@ -25,6 +25,7 @@
package org.rhq.metrics.simulator.plan;
+import org.rhq.server.metrics.DateTimeService;
import org.rhq.server.metrics.MetricsConfiguration;
/**
@@ -32,6 +33,29 @@ import org.rhq.server.metrics.MetricsConfiguration;
*/
public class SimulationPlan {
+ public static enum IntervalType {
+ SECONDS("seconds"), MINUTES("minutes"),
HOURS("hours");
+
+ private final String text;
+
+ IntervalType(String text) {
+ this.text = text;
+ }
+
+ public static IntervalType fromText(String text) {
+ if (text.equals("seconds")) {
+ return SECONDS;
+ }
+ if (text.equals("minutes")) {
+ return MINUTES;
+ }
+ if (text.equals("hours")) {
+ return HOURS;
+ }
+ throw new IllegalArgumentException(text + " is not a valid interval
type");
+ }
+ }
+
private long collectionInterval;
private long aggregationInterval;
@@ -50,6 +74,18 @@ public class SimulationPlan {
private int metricsReportInterval;
+ private IntervalType intervalType;
+
+ private DateTimeService dateTimeService;
+
+ public DateTimeService getDateTimeService() {
+ return dateTimeService;
+ }
+
+ public void setDateTimeService(DateTimeService dateTimeService) {
+ this.dateTimeService = dateTimeService;
+ }
+
public long getCollectionInterval() {
return collectionInterval;
}
@@ -121,4 +157,12 @@ public class SimulationPlan {
public void setMetricsReportInterval(int metricsReportInterval) {
this.metricsReportInterval = metricsReportInterval;
}
+
+ public IntervalType getIntervalType() {
+ return intervalType;
+ }
+
+ public void setIntervalType(IntervalType intervalType) {
+ this.intervalType = intervalType;
+ }
}
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
index 1674766..79e07da 100644
---
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
@@ -34,6 +34,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.joda.time.Minutes;
import org.joda.time.Seconds;
+import org.rhq.metrics.simulator.SecondsDateTimeService;
+import org.rhq.metrics.simulator.SimulatorDateTimeService;
+import org.rhq.server.metrics.DateTimeService;
import org.rhq.server.metrics.MetricsConfiguration;
/**
@@ -46,12 +49,38 @@ public class SimulationPlanner {
JsonNode root = mapper.readTree(jsonFile);
SimulationPlan simulation = new SimulationPlan();
-
simulation.setCollectionInterval(getLong(root.get("collectionInterval"),
1250L));
-
simulation.setAggregationInterval(getLong(root.get("aggregationInterval"),
150000L)); // 2.5 minutes
+
simulation.setIntervalType(SimulationPlan.IntervalType.fromText(getString(root.get("intervalType"),
"minutes")));
+ DateTimeService dateTimeService;
+
+ switch (simulation.getIntervalType()) {
+ case SECONDS:
+
simulation.setCollectionInterval(getLong(root.get("collectionInterval"), 20L));
+
simulation.setAggregationInterval(getLong(root.get("aggregationInterval"),
2500L));
+ simulation.setMetricsServerConfiguration(createSecondsConfiguration());
+
simulation.setMetricsReportInterval(getInt(root.get("metricsReportInterval"),
30));
+ dateTimeService = new SecondsDateTimeService();
+ break;
+ case MINUTES:
+
simulation.setCollectionInterval(getLong(root.get("collectionInterval"),
1250L));
+
simulation.setAggregationInterval(getLong(root.get("aggregationInterval"),
150000L));
+ simulation.setMetricsServerConfiguration(createMinutesConfiguration());
+
simulation.setMetricsReportInterval(getInt(root.get("metricsReportInterval"),
180));
+ simulation.setDateTimeService(new SimulatorDateTimeService());
+ dateTimeService = new SimulatorDateTimeService();
+ break;
+ default: // HOURS
+
simulation.setCollectionInterval(getLong(root.get("collectionInterval"),
30000L));
+ simulation.setAggregationInterval(3600000L);
+
simulation.setMetricsReportInterval(getInt(root.get("metricsReportInterval"),
1200));
+ dateTimeService = new DateTimeService();
+ }
+
+ dateTimeService.setConfiguration(simulation.getMetricsServerConfiguration());
+ simulation.setDateTimeService(dateTimeService);
+
simulation.setNumMeasurementCollectors(getInt(root.get("numMeasurementCollectors"),
5));
simulation.setSimulationTime(getInt(root.get("simulationTime"), 10));
simulation.setBatchSize(getInt(root.get("batchSize"), 5000));
-
simulation.setMetricsReportInterval(getInt(root.get("metricsReportInterval"),
180));
String[] nodes;
if (root.get("nodes") == null || root.get("nodes").size() ==
0) {
@@ -67,14 +96,10 @@ public class SimulationPlanner {
simulation.setCqlPort(getInt(root.get("cqlPort"), 9142));
- MetricsConfiguration serverConfiguration = createDefaultMetricsConfiguration();
- simulation.setMetricsServerConfiguration(serverConfiguration);
-
return simulation;
}
- private MetricsConfiguration createDefaultMetricsConfiguration() {
-
+ private MetricsConfiguration createMinutesConfiguration() {
MetricsConfiguration configuration = new MetricsConfiguration();
configuration.setRawTTL(Minutes.minutes(168).toStandardSeconds().getSeconds());
configuration.setRawRetention(Minutes.minutes(168).toStandardDuration());
@@ -94,6 +119,33 @@ public class SimulationPlanner {
return configuration;
}
+ private MetricsConfiguration createSecondsConfiguration() {
+ MetricsConfiguration configuration = new MetricsConfiguration();
+ configuration.setRawTTL(420);
+ configuration.setRawRetention(Seconds.seconds(420).toStandardDuration());
+
configuration.setRawTimeSliceDuration(Seconds.seconds(2).toStandardDuration().plus(500));
+
+ configuration.setOneHourTTL(Seconds.seconds(840).getSeconds());
+ configuration.setOneHourRetention(Seconds.seconds(840));
+
configuration.setOneHourTimeSliceDuration(Seconds.seconds(15).toStandardDuration());
+
+ configuration.setSixHourTTL(Seconds.seconds(1860).getSeconds());
+ configuration.setSixHourRetention(Seconds.seconds(1860));
+
configuration.setSixHourTimeSliceDuration(Seconds.seconds(60).toStandardDuration());
+
+
configuration.setTwentyFourHourTTL(Minutes.minutes(365).toStandardSeconds().getSeconds());
+ configuration.setTwentyFourHourRetention(Minutes.minutes(365));
+
+ return configuration;
+ }
+
+ private String getString(JsonNode node, String defaultValue) {
+ if (node == null) {
+ return defaultValue;
+ }
+ return node.asText();
+ }
+
private long getLong(JsonNode node, long defaultValue) {
if (node == null) {
return defaultValue;