modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java | 7 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java | 16 ++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MetricsManagerBean.java | 9 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MetricsManagerLocal.java | 2
modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsServer.java | 25 ++++
modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsServerTest.java | 52 +++++++++-
6 files changed, 103 insertions(+), 8 deletions(-)
New commits:
commit f33738ab4a302fb2ec07734c86e53f51856f23bb
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Dec 4 22:34:59 2012 -0500
Adding initial support for fetching aggregate raw data for compatible groups
This commit includes a bit of a hack in the getAggregateMetricDisplaySummaries
method in MeasurementChartsManagerBean in order to get things working quickly.
Subsequent commits will have to include some refactoring of this method.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
index 934dcd1..48afec2 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
@@ -510,7 +510,12 @@ public class MeasurementChartsManagerBean implements MeasurementChartsManagerLoc
log.warn("No metric schedules found for def=[" + definition + "] and " + context
+ ", using empty aggregate");
} else {
- aggregate = dataUtil.getAggregateByDefinitionAndContext(begin, end, definitionId, context);
+ if (context.type == EntityContext.Type.ResourceGroup &&
+ definition.getDataType() == DataType.MEASUREMENT) {
+ aggregate = dataManager.getAggregate(subject, context.getGroupId(), definitionId, begin, end);
+ } else {
+ aggregate = dataUtil.getAggregateByDefinitionAndContext(begin, end, definitionId, context);
+ }
}
if (aggregate.isEmpty()) {
if (log.isTraceEnabled()) {
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java
index 15e44a7..a6e96ee 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java
@@ -666,9 +666,18 @@ public class MeasurementDataManagerBean implements MeasurementDataManagerLocal,
throw new IllegalArgumentException("Start date " + startTime + " is not before " + endTime);
}
- MeasurementAggregate aggregate = getConnectedUtilityInstance().getAggregateByDefinitionAndContext(startTime,
- endTime, definitionId, EntityContext.forGroup(groupId));
- return aggregate;
+// MeasurementAggregate aggregate = getConnectedUtilityInstance().getAggregateByDefinitionAndContext(startTime,
+// endTime, definitionId, EntityContext.forGroup(groupId));
+// return aggregate;
+
+ MeasurementScheduleCriteria criteria = new MeasurementScheduleCriteria();
+ criteria.addFilterResourceGroupId(groupId);
+ criteria.addFilterDefinitionIds(definitionId);
+ criteria.setPageControl(PageControl.getUnlimitedInstance());
+ PageList<MeasurementSchedule> schedules = measurementScheduleManager.findSchedulesByCriteria(subject,
+ criteria);
+
+ return metricsManager.getSummaryAggregate(map(schedules), startTime, endTime);
}
/**
@@ -754,6 +763,7 @@ public class MeasurementDataManagerBean implements MeasurementDataManagerLocal,
}
MeasurementScheduleCriteria criteria = new MeasurementScheduleCriteria();
criteria.addFilterResourceGroupId(context.getGroupId());
+ criteria.addFilterDefinitionIds(definitionId);
criteria.setPageControl(PageControl.getUnlimitedInstance());
PageList<MeasurementSchedule> schedules = measurementScheduleManager.findSchedulesByCriteria(subject,
criteria);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MetricsManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MetricsManagerBean.java
index fb9879c..f622f77 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MetricsManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MetricsManagerBean.java
@@ -81,6 +81,15 @@ public class MetricsManagerBean implements MetricsManagerLocal {
@Override
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
+ public MeasurementAggregate getSummaryAggregate(List<Integer> scheduleIds, long beginTime, long endTime) {
+ MetricsServer metricsServer = getMetricsServer();
+ AggregatedNumericMetric summary = metricsServer.getSummaryAggregate(scheduleIds, beginTime, endTime);
+
+ return new MeasurementAggregate(summary.getMin(), summary.getAvg(), summary.getMax());
+ }
+
+ @Override
+ @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List<MeasurementDataNumericHighLowComposite> findDataForResourceGroup(List<Integer> scheduleIds,
long beginTime, long endTime) {
MetricsServer metricsServer = getMetricsServer();
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MetricsManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MetricsManagerLocal.java
index 7e11c95..485b7ad 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MetricsManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MetricsManagerLocal.java
@@ -55,4 +55,6 @@ public interface MetricsManagerLocal {
MeasurementAggregate getSummaryAggregate(int scheduleId, long beginTime, long endTime);
+ MeasurementAggregate getSummaryAggregate(List<Integer> scheduleIds, long beginTime, long endTime);
+
}
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 571e66f..4ffbdb7 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
@@ -109,6 +109,14 @@ public class MetricsServer {
throw new UnsupportedOperationException("MetricsServer.getSummaryAggregate currently only supports raw data.");
}
+ public AggregatedNumericMetric getSummaryAggregate(List<Integer> scheduleIds, long beginTime, long endTime) {
+ if (dateTimeService.isInRawDataRange(new DateTime(beginTime))) {
+ return getSummaryRawAggregate(scheduleIds, beginTime, endTime);
+ }
+ throw new UnsupportedOperationException("MetricServer.getSummaryAggregate (for resource group) currently " +
+ "only supports raw data");
+ }
+
private List<MeasurementDataNumericHighLowComposite> findRawDataForResource(int scheduleId, long beginTime,
long endTime) {
MetricsDAO dao = new MetricsDAO(session);
@@ -160,6 +168,18 @@ public class MetricsServer {
return calculateAggregatedRaw(rawMetrics, beginTime);
}
+ private AggregatedNumericMetric getSummaryRawAggregate(List<Integer> scheduleIds, long beginTime, long endTime) {
+ MetricsDAO dao = new MetricsDAO(session);
+ List<RawNumericMetric> rawMetrics = dao.findRawMetrics(scheduleIds, new DateTime(beginTime),
+ new DateTime(endTime));
+
+ if (rawMetrics.isEmpty()) {
+ // We do not care about the scheudule id here so can just use a dummy value of zero.
+ return new AggregatedNumericMetric(0, Double.NaN, Double.NaN,Double.NaN, beginTime);
+ }
+ return calculateAggregatedRaw(rawMetrics, beginTime);
+ }
+
private List<MeasurementDataNumericHighLowComposite> findAggregateDataForResource(int scheduleId, long beginTime,
long endTime, String columnFamily) {
MetricsDAO dao = new MetricsDAO(session);
@@ -255,6 +275,7 @@ public class MetricsServer {
List<RawNumericMetric> rawMetrics = dao.findRawMetrics(indexEntry.getScheduleId(), startTime, endTime);
AggregatedNumericMetric aggregatedRaw = calculateAggregatedRaw(rawMetrics, startTime.getMillis());
+ aggregatedRaw.setScheduleId(indexEntry.getScheduleId());
oneHourMetrics.add(aggregatedRaw);
}
@@ -286,7 +307,9 @@ public class MetricsServer {
}
double avg = divide(sum, count);
- return new AggregatedNumericMetric(rawMetrics.get(0).getScheduleId(), avg, min, max, timestamp);
+ // We let the caller handle setting the schedule id because in some cases we do
+ // not care about it.
+ return new AggregatedNumericMetric(0, avg, min, max, timestamp);
}
private List<AggregatedNumericMetric> calculateAggregates(String fromColumnFamily, String toColumnFamily,
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 6d4c3d3..3472221 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
@@ -361,7 +361,7 @@ public class MetricsServerTest extends CassandraIntegrationTest {
}
@Test
- public void getSummaryRawAggregate() {
+ public void getSummaryRawAggregateForResource() {
DateTime beginTime = now().minusHours(4);
DateTime endTime = now();
Buckets buckets = new Buckets(beginTime, endTime);
@@ -385,10 +385,56 @@ public class MetricsServerTest extends CassandraIntegrationTest {
AggregatedNumericMetric actual = metricsServer.getSummaryAggregate(scheduleId, beginTime.getMillis(),
endTime.getMillis());
double avg = divide(1.1 + 2.2 + 3.3 + 4.4 + 5.5 + 6.6, 6);
- AggregatedNumericMetric expected = new AggregatedNumericMetric(scheduleId, avg, 1.1, 6.6,
+ AggregatedNumericMetric expected = new AggregatedNumericMetric(0, avg, 1.1, 6.6,
beginTime.getMillis());
- assertEquals(actual, expected, "Failed to get summary aggregate for raw data.");
+ assertEquals(actual, expected, "Failed to get resource summary aggregate for raw data.");
+ }
+
+ @Test
+ public void getSummaryRawAggregateForGroup() {
+ 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);
+
+ AggregatedNumericMetric actual = metricsServer.getSummaryAggregate(asList(scheduleId1, scheduleId2),
+ beginTime.getMillis(), endTime.getMillis());
+
+ double avg = divide(1.1 + 1.2 + 2.1 + 2.2 + 3.1 + 3.2 + 4.1 + 4.2 + 5.1 + 5.2 + 6.1 + 6.2, 12);
+ AggregatedNumericMetric expected = new AggregatedNumericMetric(0, avg, 1.1, 6.2, beginTime.getMillis());
+
+ assertEquals(actual, expected, "Failed to get group summary aggregate for raw data.");
}
@Test