modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsServer.java | 31 +++++
modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsServerTest.java | 59 +++++++++-
2 files changed, 89 insertions(+), 1 deletion(-)
New commits:
commit e5e722d8f301f14fa43c894a2a6c62cdc0de897d
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Dec 4 14:57:17 2012 -0500
adding method to MetricsServer to retrieve raw data for a resource group.
diff --git a/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsServer.java b/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsServer.java
index 8416383..d49e03c 100644
--- a/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsServer.java
+++ b/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsServer.java
@@ -89,6 +89,17 @@ public class MetricsServer {
return null;
}
+ public List<MeasurementDataNumericHighLowComposite> findDataForGroup(List<Integer> scheduleIds, long beginTime,
+ long endTime) {
+ DateTime begin = new DateTime(beginTime);
+
+ if (dateTimeService.isInRawDataRange(begin)) {
+ return findRawDataForGroup(scheduleIds, beginTime, endTime);
+ }
+ throw new UnsupportedOperationException("MetricsServer.findDataForGroup currently only supports querying " +
+ "raw data");
+ }
+
private List<MeasurementDataNumericHighLowComposite> findRawDataForResource(int scheduleId, long beginTime,
long endTime) {
MetricsDAO dao = new MetricsDAO(session);
@@ -109,6 +120,26 @@ public class MetricsServer {
return data;
}
+ private List<MeasurementDataNumericHighLowComposite> findRawDataForGroup(List<Integer> scheduleIds, long beginTime,
+ long endTime) {
+ MetricsDAO dao = new MetricsDAO(session);
+ Buckets buckets = new Buckets(beginTime, endTime);
+
+ List<RawNumericMetric> rawMetrics = dao.findRawMetrics(scheduleIds, new DateTime(beginTime),
+ new DateTime(endTime));
+ for (RawNumericMetric rawMetric : rawMetrics) {
+ buckets.insert(rawMetric.getTimestamp(), rawMetric.getValue());
+ }
+
+ List<MeasurementDataNumericHighLowComposite> data = new ArrayList<MeasurementDataNumericHighLowComposite>();
+ for (int i = 0; i < buckets.getNumDataPoints(); ++i) {
+ Buckets.Bucket bucket = buckets.get(i);
+ data.add(new MeasurementDataNumericHighLowComposite(bucket.getStartTime(), bucket.getAvg(),
+ bucket.getMax(), bucket.getMin()));
+ }
+ return data;
+ }
+
private List<MeasurementDataNumericHighLowComposite> findAggregateDataForResource(int scheduleId, long beginTime,
long endTime, String columnFamily) {
MetricsDAO dao = new MetricsDAO(session);
diff --git a/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsServerTest.java b/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsServerTest.java
index 5e443b6..712503f 100644
--- a/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsServerTest.java
+++ b/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsServerTest.java
@@ -338,7 +338,7 @@ public class MetricsServerTest extends CassandraIntegrationTest {
}
@Test//(enabled = ENABLED)
- public void findRawDataComposites() {
+ public void findRawDataCompositesForResource() {
DateTime beginTime = now().minusHours(4);
DateTime endTime = now();
Buckets buckets = new Buckets(beginTime, endTime);
@@ -378,6 +378,63 @@ public class MetricsServerTest extends CassandraIntegrationTest {
actualData.get(29));
}
+ @Test
+ public void findRawDataCompositesForGroup() {
+ DateTime beginTime = now().minusHours(4);
+ DateTime endTime = now();
+ Buckets buckets = new Buckets(beginTime, endTime);
+ int scheduleId1 = 123;
+ int scheduleId2 = 456;
+
+ Set<MeasurementDataNumeric> data = new HashSet<MeasurementDataNumeric>();
+ data.add(new MeasurementDataNumeric(buckets.get(0).getStartTime() + 10, scheduleId1, 1.1));
+ data.add(new MeasurementDataNumeric(buckets.get(0).getStartTime() + 10, scheduleId2, 1.2));
+
+ data.add(new MeasurementDataNumeric(buckets.get(0).getStartTime() + 20, scheduleId1, 2.1));
+ data.add(new MeasurementDataNumeric(buckets.get(0).getStartTime() + 20, scheduleId2, 2.2));
+
+ data.add(new MeasurementDataNumeric(buckets.get(0).getStartTime() + 30, scheduleId1, 3.1));
+ data.add(new MeasurementDataNumeric(buckets.get(0).getStartTime() + 30, scheduleId2, 3.2));
+
+ data.add(new MeasurementDataNumeric(buckets.get(59).getStartTime() + 10, scheduleId1, 4.1));
+ data.add(new MeasurementDataNumeric(buckets.get(59).getStartTime() + 10, scheduleId2, 4.2));
+
+ data.add(new MeasurementDataNumeric(buckets.get(59).getStartTime() + 20, scheduleId1, 5.1));
+ data.add(new MeasurementDataNumeric(buckets.get(59).getStartTime() + 20, scheduleId2, 5.2));
+
+ data.add(new MeasurementDataNumeric(buckets.get(59).getStartTime() + 30, scheduleId1, 6.1));
+ data.add(new MeasurementDataNumeric(buckets.get(59).getStartTime() + 30, scheduleId2, 6.2));
+
+ // add some data outside the range
+ data.add(new MeasurementDataNumeric(buckets.get(0).getStartTime() - 100, scheduleId1, 1.23));
+ data.add(new MeasurementDataNumeric(buckets.get(0).getStartTime() - 100, scheduleId2, 2.23));
+ data.add(new MeasurementDataNumeric(buckets.get(59).getStartTime() + buckets.getInterval() + 50, scheduleId1,
+ 4.56));
+ data.add(new MeasurementDataNumeric(buckets.get(59).getStartTime() + buckets.getInterval() + 50, scheduleId2,
+ 4.56));
+
+ metricsServer.addNumericData(data);
+
+ List<MeasurementDataNumericHighLowComposite> actualData = metricsServer.findDataForGroup(
+ asList(scheduleId1, scheduleId2), beginTime.getMillis(), endTime.getMillis());
+
+ assertEquals(actualData.size(), buckets.getNumDataPoints(), "Expected to get back 60 data points.");
+
+ MeasurementDataNumericHighLowComposite expectedBucket0Data = new MeasurementDataNumericHighLowComposite(
+ buckets.get(0).getStartTime(), divide(1.1 + 1.2 + 2.1 + 2.2 + 3.1 + 3.2, 6), 3.2, 1.1);
+ MeasurementDataNumericHighLowComposite expectedBucket59Data = new MeasurementDataNumericHighLowComposite(
+ buckets.get(59).getStartTime(), divide(4.1 + 4.2 + 5.1 + 5.2 + 6.1 + 6.2, 6), 6.2, 4.1);
+ MeasurementDataNumericHighLowComposite expectedBucket29Data = new MeasurementDataNumericHighLowComposite(
+ buckets.get(29).getStartTime(), Double.NaN, Double.NaN, Double.NaN);
+
+ assertPropertiesMatch("The data for bucket 0 does not match the expected values.", expectedBucket0Data,
+ actualData.get(0));
+ assertPropertiesMatch("The data for bucket 59 does not match the expected values.", expectedBucket59Data,
+ actualData.get(59));
+ assertPropertiesMatch("The data for bucket 29 does not match the expected values.", expectedBucket29Data,
+ actualData.get(29));
+ }
+
@Test//(enabled = ENABLED)
public void find1HourDataComposites() {
DateTime beginTime = now().minusDays(11);