modules/helpers/metrics-simulator/pom.xml
| 20 -
modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh
| 4
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java
| 18 +
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorThreadFactory.java
| 2
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java
| 10
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/SimulationPlanner.java
| 121 ++++++++--
modules/helpers/metrics-simulator/src/main/scripts/assembly.xml
| 4
7 files changed, 135 insertions(+), 44 deletions(-)
New commits:
commit 39cb481fac87829332f9cd125bbb769f1e5d90ef
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Mar 5 23:13:05 2013 -0500
add defaults for simulation config values
Also add a shutdown hook for shutting down thread pool. Turned out that the JVM
still was not exiting cleanly.
diff --git a/modules/helpers/metrics-simulator/pom.xml
b/modules/helpers/metrics-simulator/pom.xml
index 115faca..7ad4b47 100644
--- a/modules/helpers/metrics-simulator/pom.xml
+++ b/modules/helpers/metrics-simulator/pom.xml
@@ -23,17 +23,17 @@
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-core-asl</artifactId>
- <version>1.9.9</version>
- </dependency>
+ <!--<dependency>-->
+ <!--<groupId>org.codehaus.jackson</groupId>-->
+ <!--<artifactId>jackson-core-asl</artifactId>-->
+ <!--<version>1.9.9</version>-->
+ <!--</dependency>-->
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-mapper-asl</artifactId>
- <version>1.9.9</version>
- </dependency>
+ <!--<dependency>-->
+ <!--<groupId>org.codehaus.jackson</groupId>-->
+ <!--<artifactId>jackson-mapper-asl</artifactId>-->
+ <!--<version>1.9.9</version>-->
+ <!--</dependency>-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
diff --git a/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh
b/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh
index 0171a5a..4258c68 100644
--- a/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh
+++ b/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh
@@ -36,7 +36,9 @@ prepare_java_opts()
launch_simulator()
{
- $RHQ_MS_JAVA_EXE $JAVA_OPTS $RHQ_MS_ADDITIONAL_JAVA_OPTS -cp
"$RHQ_MS_CLASSPATH" org.rhq.metrics.simulator.SimulatorCLI "$@" &
+ cmd="$RHQ_MS_JAVA_EXE $JAVA_OPTS $RHQ_MS_ADDITIONAL_JAVA_OPTS -cp
$RHQ_MS_CLASSPATH org.rhq.metrics.simulator.SimulatorCLI $@"
+ eval $cmd
+ return $?
}
source "$RHQ_MS_HOME/bin/rhq-ms-env.sh"
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 5d9bfeb..bcc3a9b 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
@@ -88,8 +88,14 @@ public class Simulator {
Stats stats = new Stats();
StatsCollector statsCollector = new StatsCollector(stats);
- ScheduledExecutorService executorService =
Executors.newScheduledThreadPool(plan.getThreadPoolSize(),
+ final ScheduledExecutorService executorService =
Executors.newScheduledThreadPool(plan.getThreadPoolSize(),
new SimulatorThreadFactory());
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ @Override
+ public void run() {
+ shutdown(executorService);
+ }
+ });
log.info("Starting executor service");
executorService.scheduleAtFixedRate(statsCollector, 0, 1, TimeUnit.MINUTES);
@@ -112,6 +118,12 @@ public class Simulator {
Thread.sleep(Minutes.minutes(plan.getSimulationTime()).toStandardDuration().getMillis());
} catch (InterruptedException e) {
}
+// shutdown(executorService);
+ log.info("Simulation has completed. Initiating shutdown...");
+ System.exit(0);
+ }
+
+ private void shutdown(ScheduledExecutorService executorService) {
log.info("Shutting down executor service");
executorService.shutdown();
try {
@@ -123,7 +135,7 @@ public class Simulator {
executorService.shutdownNow();
}
log.info("Shut down complete");
- System.exit(0);
+ //System.exit(0);
}
private List<CassandraNode> initCluster(SimulationPlan plan) {
@@ -139,6 +151,8 @@ public class Simulator {
private List<CassandraNode> deployCluster(ClusterConfig clusterConfig) throws
IOException {
File clusterDir = new File(clusterConfig.getClusterDir(),
"cassandra");
log.info("Deploying cluster to " + clusterDir);
+ clusterDir.mkdirs();
+
DeploymentOptions deploymentOptions = new DeploymentOptions();
deploymentOptions.setClusterDir(clusterDir.getAbsolutePath());
deploymentOptions.setNumNodes(clusterConfig.getNumNodes());
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorThreadFactory.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorThreadFactory.java
index dd492e7..da27356 100644
---
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorThreadFactory.java
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorThreadFactory.java
@@ -49,7 +49,7 @@ public class SimulatorThreadFactory implements ThreadFactory,
Thread.UncaughtExc
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r, poolName + "-" +
threadNumber.getAndIncrement());
- t.setDaemon(true);
+ t.setDaemon(false);
t.setUncaughtExceptionHandler(this);
return t;
diff --git
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java
index c022523..4c1dcce 100644
---
a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java
+++
b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/plan/ClusterConfig.java
@@ -30,15 +30,15 @@ package org.rhq.metrics.simulator.plan;
*/
public class ClusterConfig {
- private boolean embedded;
+ private boolean embedded = true;
- private String clusterDir;
+ private String clusterDir = "target";
- private int numNodes;
+ private int numNodes = 2;
- private String heapSize;
+ private String heapSize = "256M";
- private String heapNewSize;
+ private String heapNewSize = "64M";
public boolean isEmbedded() {
return embedded;
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 148ce08..30d9779 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
@@ -49,45 +49,106 @@ public class SimulationPlanner {
JsonNode root = mapper.readTree(jsonFile);
SimulationPlan simulation = new SimulationPlan();
-
simulation.setCollectionInterval(root.get("collectionInterval").asLong());
-
simulation.setAggregationInterval(root.get("aggregationInterval").asLong());
- simulation.setThreadPoolSize(root.get("threadPoolSize").asInt());
-
simulation.setNumMeasurementCollectors(root.get("numMeasurementCollectors").asInt());
- simulation.setSimulationTime(root.get("simulationTime").asInt());
-
- for (JsonNode node : root.get("schedules")) {
- simulation.addScheduleSet(new
ScheduleGroup(node.get("count").asInt(),
node.get("interval").asLong()));
+
simulation.setCollectionInterval(getLong(root.get("collectionInterval"),
500L));
+
simulation.setAggregationInterval(getLong(root.get("aggregationInterval"),
1000L));
+ simulation.setThreadPoolSize(getInt(root.get("threadPoolSize"), 7));
+
simulation.setNumMeasurementCollectors(getInt(root.get("numMeasurementCollectors"),
5));
+ simulation.setSimulationTime(getInt(root.get("simulationTime"), 10));
+
+ JsonNode schedules = root.get("schedules");
+ if (schedules.isArray()) {
+ for (JsonNode node : schedules) {
+ simulation.addScheduleSet(new
ScheduleGroup(getInt(node.get("count"), 2500),
+ getLong(node.get("interval"), 500L)));
+ }
+ } else {
+ simulation.addScheduleSet(new
ScheduleGroup(getInt(schedules.get("count"), 2500),
+ getLong(schedules.get("interval"), 500L)));
}
- MetricsConfiguration serverConfiguration = new MetricsConfiguration();
+ MetricsConfiguration serverConfiguration = createDefaultMetricsConfiguration();
simulation.setMetricsServerConfiguration(serverConfiguration);
- for (JsonNode node : root.get("ttl")) {
- MetricsTable table = getTable(node.get("table").asText());
- int ttl = node.get("value").asInt();
- setTTLAndRetention(table, ttl, serverConfiguration);
+ JsonNode ttlNodes = root.get("ttl");
+ if (ttlNodes != null) {
+ for (JsonNode node : ttlNodes) {
+ String tableName = node.get("table").asText();
+ if (!tableName.isEmpty()) {
+ MetricsTable table = getTable(tableName);
+ JsonNode ttlNode = node.get("value");
+ if (ttlNode != null) {
+ setTTLAndRetention(table, ttlNode.asInt(), serverConfiguration);
+ }
+ }
+ }
}
JsonNode timeSliceNode = root.get("timeSliceDuration");
- String units = timeSliceNode.get("units").asText();
- for (JsonNode node : timeSliceNode.get("values")) {
- Duration duration = getDuration(units, node.get("value").asInt());
- MetricsTable table = getTable(node.get("table").asText());
- setTimeSliceDuration(table, duration, serverConfiguration);
+ if (timeSliceNode != null) {
+ String units = timeSliceNode.get("units").asText();
+ if (units.isEmpty()) {
+ units = "minutes";
+ }
+ for (JsonNode node : timeSliceNode.get("values")) {
+ JsonNode valueNode = node.get("value");
+ JsonNode tableNode = node.get("table");
+ if (!(tableNode == null || valueNode == null)) {
+ Duration duration = getDuration(units, valueNode.asInt());
+ MetricsTable table = getTable(tableNode.asText());
+ setTimeSliceDuration(table, duration, serverConfiguration);
+ }
+ }
}
ClusterConfig clusterConfig = new ClusterConfig();
JsonNode clusterConfigNode = root.get("cluster");
-
clusterConfig.setEmbedded(clusterConfigNode.get("embedded").asBoolean());
-
clusterConfig.setClusterDir(clusterConfigNode.get("clusterDir").asText());
- clusterConfig.setHeapSize(clusterConfigNode.get("heapSize").asText());
-
clusterConfig.setHeapNewSize(clusterConfigNode.get("heapNewSize").asText());
- clusterConfig.setNumNodes(clusterConfigNode.get("numNodes").asInt());
+ if (clusterConfigNode != null) {
+
clusterConfig.setEmbedded(clusterConfigNode.get("embedded").asBoolean(true));
+
+ String clusterDir = clusterConfigNode.get("clusterDir").asText();
+ if (clusterDir.isEmpty()) {
+ clusterConfig.setClusterDir("target");
+ } else {
+ clusterConfig.setClusterDir(clusterDir);
+ }
+
+ JsonNode heapSizeNode = clusterConfigNode.get("heapSize");
+ if (heapSizeNode != null) {
+ clusterConfig.setHeapSize(heapSizeNode.asText());
+ }
+
+ JsonNode heapNewSizeNode = clusterConfigNode.get("heapNewSize");
+ if (heapNewSizeNode != null) {
+ clusterConfig.setHeapNewSize(heapNewSizeNode.asText());
+ }
+
+ clusterConfig.setNumNodes(getInt(clusterConfigNode.get("numNodes"),
2));
+ }
simulation.setClusterConfig(clusterConfig);
return simulation;
}
+ private MetricsConfiguration createDefaultMetricsConfiguration() {
+ MetricsConfiguration configuration = new MetricsConfiguration();
+ configuration.setRawTTL(180);
+ configuration.setRawRetention(Seconds.seconds(180).toStandardDuration());
+ configuration.setRawTimeSliceDuration(Minutes.ONE.toStandardDuration());
+
+ configuration.setOneHourTTL(360);
+ configuration.setOneHourRetention(Seconds.seconds(360).toStandardDuration());
+
configuration.setOneHourTimeSliceDuration(Minutes.minutes(6).toStandardDuration());
+
+ configuration.setSixHourTTL(540);
+ configuration.setSixHourRetention(Seconds.seconds(540).toStandardDuration());
+
configuration.setSixHourTimeSliceDuration(Minutes.minutes(24).toStandardDuration());
+
+ configuration.setTwentyFourHourTTL(720);
+
configuration.setTwentyFourHourRetention(Seconds.seconds(720).toStandardDuration());
+
+ return configuration;
+ }
+
private MetricsTable getTable(String name) {
if (name.equals(MetricsTable.RAW.getTableName())) {
return MetricsTable.RAW;
@@ -154,4 +215,18 @@ public class SimulationPlanner {
}
}
+ private long getLong(JsonNode node, long defaultValue) {
+ if (node == null) {
+ return defaultValue;
+ }
+ return node.longValue();
+ }
+
+ private int getInt(JsonNode node, int defaultValue) {
+ if (node == null) {
+ return defaultValue;
+ }
+ return node.intValue();
+ }
+
}
diff --git a/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml
b/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml
index ec1a459..2474a01 100644
--- a/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml
+++ b/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml
@@ -20,7 +20,7 @@
<include>**/*</include>
</includes>
<excludes>
- <exclude>bin/rhq-ms</exclude>
+ <exclude>bin/rhq-ms.sh</exclude>
</excludes>
</fileSet>
@@ -28,7 +28,7 @@
<directory>src/main/assembly</directory>
<outputDirectory>/</outputDirectory>
<includes>
- <include>bin/rhq-ms</include>
+ <include>bin/rhq-ms.sh</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>