modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MeasurementReader.java
| 99 ++++++++++
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Metrics.java
| 15 +
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/plan/SimulationPlan.java
| 30 +++
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
| 3
5 files changed, 155 insertions(+)
New commits:
commit 65dd352f3f787c4c2ee007db7f335f94e610c259
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Oct 1 20:18:55 2013 -0400
initial support for readers
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MeasurementReader.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MeasurementReader.java
new file mode 100644
index 0000000..22da083
--- /dev/null
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/MeasurementReader.java
@@ -0,0 +1,99 @@
+package org.rhq.metrics.simulator;
+
+import java.util.Iterator;
+import java.util.concurrent.ThreadLocalRandom;
+
+import com.codahale.metrics.Timer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.joda.time.Days;
+import org.joda.time.Duration;
+import org.joda.time.Hours;
+
+import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowComposite;
+import org.rhq.server.metrics.MetricsServer;
+
+/**
+ * @author John Sanda
+ */
+public class MeasurementReader implements Runnable {
+
+ private final Log log = LogFactory.getLog(MeasurementReader.class);
+
+ private long intervalRate;
+
+ private Metrics metrics;
+
+ private MetricsServer metricsServer;
+
+ private int startingSchedule;
+
+ private int batchSize;
+
+ public MeasurementReader(long intervalRate, Metrics metrics, MetricsServer
metricsServer, int startingSchedule,
+ int batchSize) {
+ this.intervalRate = intervalRate;
+ this.metrics = metrics;
+ this.metricsServer = metricsServer;
+ this.startingSchedule = startingSchedule;
+ this.batchSize = batchSize;
+ }
+
+ @Override
+ public void run() {
+ log.info("Running metrics queries");
+
+ ThreadLocalRandom random = ThreadLocalRandom.current();
+ int bound = startingSchedule + batchSize;
+
+ findResourceDataForPast24Hours(random.nextInt(startingSchedule, bound));
+ findResourceDataForPastWeek(random.nextInt(startingSchedule, bound));
+ findResourceDataForPast2Weeks(random.nextInt(startingSchedule, bound));
+ findResourceDataForPast31Days(random.nextInt(startingSchedule, bound));
+ findResourceDataForPastYear(random.nextInt(startingSchedule, bound));
+
+ log.info("Finished running metrics queries");
+ }
+
+ private void findResourceDataForPast24Hours(int scheduleId) {
+ Duration duration = Hours.hours(24).toStandardSeconds().toStandardDuration();
+ findResourceData(scheduleId, duration, metrics.twentyFourHourResourceQueryTime);
+ }
+
+ private void findResourceDataForPastWeek(int scheduleId) {
+ Duration duration =
Days.SEVEN.toStandardSeconds().minus(5).toStandardDuration();
+ findResourceData(scheduleId, duration, metrics.oneWeekResourceQueryTime);
+ }
+
+ private void findResourceDataForPast2Weeks(int scheduleId) {
+ Duration duration =
Days.days(14).toStandardSeconds().minus(5).toStandardDuration();
+ findResourceData(scheduleId, duration, metrics.twoWeekResourceQueryTime);
+ }
+
+ private void findResourceDataForPast31Days(int scheduleId) {
+ Duration duration =
Days.days(31).toStandardSeconds().minus(5).toStandardDuration();
+ findResourceData(scheduleId, duration, metrics.monthResourceQueryTime);
+ }
+
+ private void findResourceDataForPastYear(int scheduleId) {
+ Duration duration =
Days.days(365).toStandardSeconds().minus(5).toStandardDuration();
+ findResourceData(scheduleId, duration, metrics.yearResourceQueryTime);
+ }
+
+ private void findResourceData(int scheduleId, Duration duration, Timer timer) {
+ long end = System.currentTimeMillis();
+ long start = end - (duration.getMillis() / intervalRate);
+ Timer.Context context = timer.time();
+ try {
+ Iterable<MeasurementDataNumericHighLowComposite> data =
metricsServer.findDataForResource(scheduleId, start,
+ end, 60);
+ Iterator<MeasurementDataNumericHighLowComposite> iterator =
data.iterator();
+ for (MeasurementDataNumericHighLowComposite datum : data) {
+
+ }
+ } finally {
+ context.stop();
+ }
+ }
+}
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Metrics.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Metrics.java
index f7ea87a..59aa0dd 100644
---
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Metrics.java
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Metrics.java
@@ -19,12 +19,27 @@ public class Metrics {
public final Timer totalAggregationTime;
+ public final Timer twentyFourHourResourceQueryTime;
+
+ public final Timer oneWeekResourceQueryTime;
+
+ public final Timer twoWeekResourceQueryTime;
+
+ public final Timer monthResourceQueryTime;
+
+ public final Timer yearResourceQueryTime;
+
public Metrics() {
registry = new MetricRegistry();
rawInserts = registry.meter(name(MeasurementCollector.class,
"rawInserts"));
batchInsertTime = registry.timer(name(MeasurementCollector.class,
"batchInsertTime"));
totalAggregationTime = registry.timer(name(MeasurementAggregator.class,
"totalAggregationTime"));
+ twentyFourHourResourceQueryTime = registry.timer(name(MeasurementReader.class,
"24HourResourceDataQuery"));
+ oneWeekResourceQueryTime = registry.timer(name(MeasurementReader.class,
"oneWeekResourceQueryData"));
+ twoWeekResourceQueryTime = registry.timer(name(MeasurementReader.class,
"twoWeekResourceQueryData"));
+ monthResourceQueryTime = registry.timer(name(MeasurementReader.class,
"monthResourceQueryTime"));
+ yearResourceQueryTime = registry.timer(name(MeasurementReader.class,
"yearResourceQueryTime"));
}
}
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 4b250b4..45179c5 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
@@ -59,11 +59,14 @@ public class Simulator implements ShutdownManager {
final ScheduledExecutorService collectors = Executors.newScheduledThreadPool(
plan.getNumMeasurementCollectors(), new SimulatorThreadFactory());
final ExecutorService aggregationQueue = Executors.newSingleThreadExecutor(new
SimulatorThreadFactory());
+ final ScheduledExecutorService readers =
Executors.newScheduledThreadPool(plan.getNumReaders(),
+ new SimulatorThreadFactory());
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
shutdown(collectors, "collectors", 5);
+ shutdown(readers, "readers", 5);
shutdown(aggregators, "aggregators", 1);
shutdown(aggregationQueue, "aggregationQueue",
Integer.MAX_VALUE);
}
@@ -96,6 +99,11 @@ public class Simulator implements ShutdownManager {
aggregators.scheduleAtFixedRate(measurementAggregator, 0,
plan.getAggregationInterval(),
TimeUnit.MILLISECONDS);
+
+ MeasurementReader reader = new MeasurementReader(plan.getSimulationRate(),
metrics, metricsServer, 0,
+ plan.getBatchSize());
+ readers.scheduleAtFixedRate(reader, 30, 30, TimeUnit.SECONDS);
+
try {
Thread.sleep(Minutes.minutes(plan.getSimulationTime()).toStandardDuration().getMillis());
} catch (InterruptedException e) {
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 dfe0695..33b3bbf 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
@@ -78,6 +78,12 @@ public class SimulationPlan {
private DateTimeService dateTimeService;
+ private int numReaders;
+
+ private long readInterval;
+
+ private long simulationRate;
+
public DateTimeService getDateTimeService() {
return dateTimeService;
}
@@ -165,4 +171,28 @@ public class SimulationPlan {
public void setIntervalType(IntervalType intervalType) {
this.intervalType = intervalType;
}
+
+ public int getNumReaders() {
+ return numReaders;
+ }
+
+ public void setNumReaders(int numReaders) {
+ this.numReaders = numReaders;
+ }
+
+ public long getReadInterval() {
+ return readInterval;
+ }
+
+ public void setReadInterval(long readInterval) {
+ this.readInterval = readInterval;
+ }
+
+ public long getSimulationRate() {
+ return simulationRate;
+ }
+
+ public void setSimulationRate(long simulationRate) {
+ this.simulationRate = simulationRate;
+ }
}
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 95871bd..e601212 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
@@ -58,6 +58,7 @@ public class SimulationPlanner {
simulation.setAggregationInterval(getLong(root.get("aggregationInterval"),
2500L));
simulation.setMetricsServerConfiguration(createSecondsConfiguration());
simulation.setMetricsReportInterval(getInt(root.get("metricsReportInterval"),
30));
+ simulation.setSimulationRate(1440);
dateTimeService = new SecondsDateTimeService();
break;
case MINUTES:
@@ -66,12 +67,14 @@ public class SimulationPlanner {
simulation.setMetricsServerConfiguration(createMinutesConfiguration());
simulation.setMetricsReportInterval(getInt(root.get("metricsReportInterval"),
180));
simulation.setDateTimeService(new MinutesDateTimeService());
+ simulation.setSimulationRate(2400);
dateTimeService = new MinutesDateTimeService();
break;
default: // HOURS
simulation.setCollectionInterval(getLong(root.get("collectionInterval"),
30000L));
simulation.setAggregationInterval(3600000L);
simulation.setMetricsReportInterval(getInt(root.get("metricsReportInterval"),
1200));
+ simulation.setSimulationRate(1000);
dateTimeService = new DateTimeService();
}