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@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@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@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;
rhq-commits@lists.fedorahosted.org