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