modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementBaselineManagerBean.java | 10 -
modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricBaselineCalculator.java | 76 ++++------
modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsDAO.java | 45 ++---
modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsServer.java | 36 ++--
modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsDAOTest.java | 35 ++--
modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsServerTest.java | 14 +
6 files changed, 103 insertions(+), 113 deletions(-)
New commits:
commit 9f57272b4e66724a9d7ccdb5b61894d1c8012182
Author: Stefan Negrea <snegrea(a)redhat.com>
Date: Wed Dec 19 18:41:59 2012 -0600
Add the basic algorithm for calculating baselines using Cassandra stored data.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementBaselineManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementBaselineManagerBean.java
index 3a2ec9d..d49b8cd 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementBaselineManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementBaselineManagerBean.java
@@ -30,7 +30,6 @@ import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
-import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -46,6 +45,7 @@ import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
import org.rhq.enterprise.server.authz.PermissionException;
+import org.rhq.enterprise.server.cassandra.SessionManagerBean;
import org.rhq.enterprise.server.cloud.StatusManagerLocal;
import org.rhq.enterprise.server.measurement.instrumentation.MeasurementMonitor;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
@@ -65,9 +65,6 @@ public class MeasurementBaselineManagerBean implements MeasurementBaselineManage
@PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME)
private EntityManager entityManager;
- @javax.annotation.Resource(name = "RHQ_DS", mappedName = RHQConstants.DATASOURCE_JNDI_NAME)
- private DataSource dataSource;
-
@EJB
private StatusManagerLocal agentStatusManager;
@EJB
@@ -87,6 +84,9 @@ public class MeasurementBaselineManagerBean implements MeasurementBaselineManage
@EJB
private ResourceManagerLocal resourceManager;
+ @EJB
+ private SessionManagerBean sessionManager;
+
private final Log log = LogFactory.getLog(MeasurementBaselineManagerBean.class);
private static final int BASELINE_PROCESSING_LIMIT = 50000;
@@ -228,7 +228,7 @@ public class MeasurementBaselineManagerBean implements MeasurementBaselineManage
List<Integer> scheduleIdsWithoutBaselines = query.getResultList();
//2. calculate the baselines based metrics data
- MetricBaselineCalculator baselineCalculator = new MetricBaselineCalculator();
+ MetricBaselineCalculator baselineCalculator = new MetricBaselineCalculator(this.sessionManager.getSession());
List<MeasurementBaseline> results = baselineCalculator.calculateBaselines(scheduleIdsWithoutBaselines,
startTime, endTime);
diff --git a/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricBaselineCalculator.java b/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricBaselineCalculator.java
index 7ed4442..b8a97c2 100644
--- a/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricBaselineCalculator.java
+++ b/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricBaselineCalculator.java
@@ -26,7 +26,8 @@ package org.rhq.server.metrics;
import java.util.ArrayList;
import java.util.List;
-import java.util.Random;
+
+import com.datastax.driver.core.Session;
import org.rhq.core.domain.measurement.MeasurementBaseline;
@@ -35,17 +36,18 @@ import org.rhq.core.domain.measurement.MeasurementBaseline;
*/
public class MetricBaselineCalculator {
+ private MetricsDAO metricsDAO;
+
+ public MetricBaselineCalculator(Session session) {
+ this.metricsDAO = new MetricsDAO(session);
+ }
+
public List<MeasurementBaseline> calculateBaselines(List<Integer> scheduleIds, long startTime, long endTime) {
List<MeasurementBaseline> calculatedBaselines = new ArrayList<MeasurementBaseline>();
MeasurementBaseline measurementBaseline;
for (Integer scheduleId : scheduleIds) {
- //TODO: do processing to find the actual baseline for this schedule id
- //!use data from Cassandra!
-
- //for now just return a values
- measurementBaseline = this.generateRandomBaseline(scheduleId);
-
+ measurementBaseline = this.calculateBaseline(scheduleId, startTime, endTime);
if (measurementBaseline != null) {
calculatedBaselines.add(measurementBaseline);
}
@@ -54,44 +56,36 @@ public class MetricBaselineCalculator {
return calculatedBaselines;
}
- private MeasurementBaseline generateRandomBaseline(Integer scheduleId) {
- Random random = new Random(12345);
+ private MeasurementBaseline calculateBaseline(Integer scheduleId, long startTime, long endTime) {
- MeasurementBaseline randomBaseline = new MeasurementBaseline();
- randomBaseline.setMax(random.nextDouble() * 1000);
- randomBaseline.setMin(random.nextDouble() * 1000);
- randomBaseline.setMean(random.nextDouble() * 1000);
+ List<AggregatedNumericMetric> metrics = this.metricsDAO.findAggregateMetrics(MetricsTable.ONE_HOUR, scheduleId, startTime, endTime);
- randomBaseline.setScheduleId(scheduleId);
+ if (metrics.size() != 0) {
+ double min = metrics.get(0).getMin();
+ double max = metrics.get(0).getMax();
+ double average = 0;
- return randomBaseline;
- }
+ for (AggregatedNumericMetric entry : metrics) {
+ if (entry.getMax() > max) {
+ max = entry.getMax();
+ } else if (entry.getMin() < min) {
+ min = entry.getMin();
+ }
+
+ average += entry.getAvg();
+ }
+
+ average = average / (double) metrics.size();
+
+ MeasurementBaseline baseline = new MeasurementBaseline();
+ baseline.setMax(max);
+ baseline.setMin(min);
+ baseline.setMean(average);
+ baseline.setScheduleId(scheduleId);
+
+ return baseline;
+ }
- private MeasurementBaseline calculateBaseline(Integer scheduleId) {
- String NATIVE_QUERY_CALC_FIRST_AUTOBASELINE_POSTGRES = "" //
- + " INSERT INTO RHQ_MEASUREMENT_BLINE ( id, BL_MIN, BL_MAX, BL_MEAN, BL_COMPUTE_TIME, SCHEDULE_ID ) " //
- + " SELECT nextval('RHQ_MEASUREMENT_BLINE_ID_SEQ'), " //
- + " MIN(data1h.minvalue) AS bline_min, " //
- + " MAX(data1h.maxvalue) AS bline_max, " //
- + " AVG(data1h.value) AS bline_mean, " //
- + " ? AS bline_ts, " // ?1=computeTime
- + " data1h.SCHEDULE_ID AS bline_sched_id " //
- + " FROM RHQ_MEASUREMENT_DATA_NUM_1H data1h " // baselines are 1H data statistics
- + " INNER JOIN RHQ_MEASUREMENT_SCHED sched " // baselines are aggregates of schedules
- + " ON data1h.SCHEDULE_ID = sched.id " //
- + " INNER JOIN RHQ_MEASUREMENT_DEF def " // only compute off of dynamic types
- + " ON sched.definition = def.id " //
- + "LEFT OUTER JOIN RHQ_MEASUREMENT_BLINE bline " // we want null entries on purpose
- + " ON sched.id = bline.SCHEDULE_ID " //
- + " WHERE ( def.numeric_type = 0 ) " // only dynamics (NumericType.DYNAMIC)
- + " AND ( bline.id IS NULL ) " // no baseline means it was deleted or never calculated
- + " AND ( data1h.TIME_STAMP BETWEEN ? AND ? ) " // ?2=startTime, ?3=endTime
- + " GROUP BY data1h.SCHEDULE_ID " // baselines are aggregates per schedule
- // but only calculate baselines for schedules where we have data that fills (startTime, endTime)
- + " HAVING data1h.SCHEDULE_ID in ( SELECT distinct (mdata.SCHEDULE_ID) "
- + " FROM RHQ_MEASUREMENT_DATA_NUM_1H mdata " //
- + " WHERE mdata.TIME_STAMP <= ? ) " // ?4=startTime
- + " LIMIT 100000 "; // batch at most 100K inserts at a time to shrink the xtn size
return null;
}
}
commit 937ad0e6dedd0745e613a885cc1157357ed4890c
Author: Stefan Negrea <snegrea(a)redhat.com>
Date: Wed Dec 19 18:39:37 2012 -0600
Simplify MetricsDAO interface to use only long type for expressing date&time. Actual date&time manipulations should be done in higher layers, the dao is only used fpr retrieving/updating data so simple time in millis is sufficient.
diff --git a/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsDAO.java b/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsDAO.java
index 5a6b6a6..dfdfd14 100644
--- a/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsDAO.java
+++ b/modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsDAO.java
@@ -45,8 +45,6 @@ import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.exceptions.NoHostAvailableException;
-import org.joda.time.DateTime;
-
import org.rhq.core.domain.measurement.MeasurementDataNumeric;
import org.rhq.core.domain.util.PageOrdering;
@@ -141,12 +139,12 @@ public class MetricsDAO {
}
}
- public List<RawNumericMetric> findRawMetrics(int scheduleId, DateTime startTime, DateTime endTime) {
+ public List<RawNumericMetric> findRawMetrics(int scheduleId, long startTime, long endTime) {
try {
List<RawNumericMetric> metrics = new ArrayList<RawNumericMetric>();
String cql = "SELECT schedule_id, time, value FROM " + MetricsTable.RAW + " WHERE schedule_id = "
- + scheduleId + " AND time >= " + startTime.getMillis() + " AND time < " + endTime.getMillis()
+ + scheduleId + " AND time >= " + startTime + " AND time < " + endTime
+ " ORDER BY time";
ResultSet resultSet = session.execute(cql);
@@ -182,7 +180,7 @@ public class MetricsDAO {
}
}
- public List<RawNumericMetric> findRawMetrics(int scheduleId, DateTime startTime, DateTime endTime,
+ public List<RawNumericMetric> findRawMetrics(int scheduleId, long startTime, long endTime,
boolean includeMetadata) {
if (!includeMetadata) {
@@ -195,8 +193,8 @@ public class MetricsDAO {
.from(MetricsTable.RAW.toString())
.where(
eq("schedule_id", scheduleId),
- gte("time", startTime.toDate()),
- lt("time", endTime.toDate()))
+ gte("time", new Date(startTime)),
+ lt("time", new Date(endTime)))
.getQueryString()
);
List<RawNumericMetric> metrics = new ArrayList<RawNumericMetric>();
@@ -210,7 +208,7 @@ public class MetricsDAO {
}
}
- public List<RawNumericMetric> findRawMetrics(List<Integer> scheduleIds, DateTime startTime, DateTime endTime) {
+ public List<RawNumericMetric> findRawMetrics(List<Integer> scheduleIds, long startTime, long endTime) {
try {
// TODO investigate possible bug in datastax driver for binding lists as parameters
// I was not able to get the below query working by directly binding the List
@@ -234,8 +232,7 @@ public class MetricsDAO {
// .getQueryString();
String cql = "SELECT schedule_id, time, value FROM " + MetricsTable.RAW + " WHERE schedule_id IN (" +
- listToString(scheduleIds) + ") AND time >= " + startTime.getMillis() + " AND time <= " +
- endTime.getMillis();
+ listToString(scheduleIds) + ") AND time >= " + startTime + " AND time <= " + endTime;
ResultSet resultSet = session.execute(cql);
List<RawNumericMetric> metrics = new ArrayList<RawNumericMetric>();
@@ -270,15 +267,15 @@ public class MetricsDAO {
}
}
- public List<AggregatedNumericMetric> findAggregateMetrics(MetricsTable table, int scheduleId, DateTime startTime,
- DateTime endTime) {
+ public List<AggregatedNumericMetric> findAggregateMetrics(MetricsTable table, int scheduleId, long startTime,
+ long endTime) {
try {
String cql =
"SELECT schedule_id, time, type, value " +
"FROM " + table + " " +
- "WHERE schedule_id = " + scheduleId + " AND time >= " + startTime.getMillis() +
- " AND time < " + endTime.getMillis();
+ "WHERE schedule_id = "
+ + scheduleId + " AND time >= " + startTime + " AND time < " + endTime;
List<AggregatedNumericMetric> metrics = new ArrayList<AggregatedNumericMetric>();
ResultSetMapper<AggregatedNumericMetric> resultSetMapper = new AggregateMetricMapper();
ResultSet resultSet = session.execute(cql);
@@ -294,13 +291,13 @@ public class MetricsDAO {
}
public List<AggregatedNumericMetric> findAggregateMetrics(MetricsTable table, List<Integer> scheduleIds,
- DateTime startTime, DateTime endTime) {
+ long startTime, long endTime) {
try {
String cql =
"SELECT schedule_id, time, type, value " +
"FROM " + table + " " +
- "WHERE schedule_id IN (" + listToString(scheduleIds) + ") AND time >= " + startTime.getMillis() +
- " AND time < " + endTime.getMillis();
+ "WHERE schedule_id IN ("
+ + listToString(scheduleIds) + ") AND time >= " + startTime + " AND time < " + endTime;
List<AggregatedNumericMetric> metrics = new ArrayList<AggregatedNumericMetric>();
ResultSetMapper<AggregatedNumericMetric> resultSetMapper = new AggregateMetricMapper();
ResultSet resultSet = session.execute(cql);
@@ -316,15 +313,14 @@ public class MetricsDAO {
}
List<AggregatedNumericMetric> findAggregateMetricsWithMetadata(MetricsTable table, int scheduleId,
- DateTime startTime,
- DateTime endTime) {
+ long startTime, long endTime) {
try {
String cql =
"SELECT schedule_id, time, type, value, ttl(value), writetime(value) " +
"FROM " + table + " " +
- "WHERE schedule_id = " + scheduleId + " AND time >= " + startTime.getMillis() +
- " AND time < " + endTime.getMillis();
+ "WHERE schedule_id = " + scheduleId + " AND time >= " + startTime +
+ " AND time < " + endTime;
List<AggregatedNumericMetric> metrics = new ArrayList<AggregatedNumericMetric>();
ResultSetMapper<AggregatedNumericMetric> resultSetMapper = new AggregateMetricMapper(true);
ResultSet resultSet = session.execute(cql);
@@ -358,13 +354,12 @@ public class MetricsDAO {
}
}
- public void updateMetricsIndex(MetricsTable table, Map<Integer, DateTime> updates) {
+ public void updateMetricsIndex(MetricsTable table, Map<Integer, Long> updates) {
try {
PreparedStatement statement = session.prepare(UPDATE_METRICS_INDEX);
for (Integer scheduleId : updates.keySet()) {
- BoundStatement boundStatement = statement.bind(table.toString(), updates.get(scheduleId).toDate(),
- scheduleId,
- false);
+ BoundStatement boundStatement = statement.bind(table.toString(), new Date(updates.get(scheduleId)),
+ scheduleId, false);
session.execute(boundStatement);
}
} catch (NoHostAvailableException e) {
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 631539d..33c6a13 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
@@ -82,13 +82,12 @@ public class MetricsServer {
DateTime begin = new DateTime(beginTime);
if (dateTimeService.isInRawDataRange(begin)) {
- List<RawNumericMetric> metrics = dao.findRawMetrics(scheduleId, begin, new DateTime(endTime));
+ List<RawNumericMetric> metrics = dao.findRawMetrics(scheduleId, beginTime, endTime);
return createRawComposites(metrics, beginTime, endTime);
}
MetricsTable table = getTable(begin);
- List<AggregatedNumericMetric> metrics = dao.findAggregateMetrics(table, scheduleId, begin,
- new DateTime(endTime));
+ List<AggregatedNumericMetric> metrics = dao.findAggregateMetrics(table, scheduleId, beginTime, endTime);
return createComposites(metrics, beginTime, endTime);
}
@@ -98,13 +97,12 @@ public class MetricsServer {
DateTime begin = new DateTime(beginTime);
if (dateTimeService.isInRawDataRange(begin)) {
- List<RawNumericMetric> metrics = dao.findRawMetrics(scheduleIds, begin, new DateTime(endTime));
+ List<RawNumericMetric> metrics = dao.findRawMetrics(scheduleIds, beginTime, endTime);
return createRawComposites(metrics, beginTime, endTime);
}
MetricsTable table = getTable(begin);
- List<AggregatedNumericMetric> metrics = dao.findAggregateMetrics(table, scheduleIds, begin,
- new DateTime(endTime));
+ List<AggregatedNumericMetric> metrics = dao.findAggregateMetrics(table, scheduleIds, beginTime, endTime);
return createComposites(metrics, beginTime, endTime);
}
@@ -113,13 +111,12 @@ public class MetricsServer {
DateTime begin = new DateTime(beginTime);
if (dateTimeService.isInRawDataRange(begin)) {
- List<RawNumericMetric> metrics = dao.findRawMetrics(scheduleId, begin, new DateTime(endTime));
+ List<RawNumericMetric> metrics = dao.findRawMetrics(scheduleId, beginTime, endTime);
return createSummaryRawAggregate(metrics, beginTime);
}
MetricsTable table = getTable(begin);
- List<AggregatedNumericMetric> metrics = dao.findAggregateMetrics(table, scheduleId, begin,
- new DateTime(endTime));
+ List<AggregatedNumericMetric> metrics = dao.findAggregateMetrics(table, scheduleId, beginTime, endTime);
return createSummaryAggregate(metrics, beginTime);
}
@@ -128,13 +125,12 @@ public class MetricsServer {
DateTime begin = new DateTime(beginTime);
if (dateTimeService.isInRawDataRange(new DateTime(beginTime))) {
- List<RawNumericMetric> metrics = dao.findRawMetrics(scheduleIds, begin, new DateTime(endTime));
+ List<RawNumericMetric> metrics = dao.findRawMetrics(scheduleIds, beginTime, endTime);
return createSummaryRawAggregate(metrics, beginTime);
}
MetricsTable table = getTable(begin);
- List<AggregatedNumericMetric> metrics = dao.findAggregateMetrics(table, scheduleIds, begin,
- new DateTime(endTime));
+ List<AggregatedNumericMetric> metrics = dao.findAggregateMetrics(table, scheduleIds, beginTime, endTime);
return createSummaryAggregate(metrics, beginTime);
}
@@ -193,9 +189,10 @@ public class MetricsServer {
}
void updateMetricsIndex(Set<MeasurementDataNumeric> rawMetrics) {
- Map<Integer, DateTime> updates = new TreeMap<Integer, DateTime>();
+ Map<Integer, Long> updates = new TreeMap<Integer, Long>();
for (MeasurementDataNumeric rawMetric : rawMetrics) {
- updates.put(rawMetric.getScheduleId(), new DateTime(rawMetric.getTimestamp()).hourOfDay().roundFloorCopy());
+ updates.put(rawMetric.getScheduleId(), new DateTime(rawMetric.getTimestamp()).hourOfDay().roundFloorCopy()
+ .getMillis());
}
dao.updateMetricsIndex(MetricsTable.ONE_HOUR, updates);
}
@@ -237,10 +234,10 @@ public class MetricsServer {
}
private void updateMetricsIndex(MetricsTable bucket, List<AggregatedNumericMetric> metrics, Minutes interval) {
- Map<Integer, DateTime> updates = new TreeMap<Integer, DateTime>();
+ Map<Integer, Long> updates = new TreeMap<Integer, Long>();
for (AggregatedNumericMetric metric : metrics) {
- updates.put(metric.getScheduleId(), dateTimeService.getTimeSlice(new DateTime(metric.getTimestamp()),
- interval));
+ updates.put(metric.getScheduleId(),
+ dateTimeService.getTimeSlice(new DateTime(metric.getTimestamp()), interval).getMillis());
}
dao.updateMetricsIndex(bucket, updates);
}
@@ -253,7 +250,8 @@ public class MetricsServer {
DateTime startTime = indexEntry.getTime();
DateTime endTime = startTime.plusMinutes(60);
- List<RawNumericMetric> rawMetrics = dao.findRawMetrics(indexEntry.getScheduleId(), startTime, endTime);
+ List<RawNumericMetric> rawMetrics = dao.findRawMetrics(indexEntry.getScheduleId(), startTime.getMillis(),
+ endTime.getMillis());
AggregatedNumericMetric aggregatedRaw = calculateAggregatedRaw(rawMetrics, startTime.getMillis());
aggregatedRaw.setScheduleId(indexEntry.getScheduleId());
oneHourMetrics.add(aggregatedRaw);
@@ -310,7 +308,7 @@ public class MetricsServer {
}
List<AggregatedNumericMetric> metrics = dao.findAggregateMetrics(fromColumnFamily,
- indexEntry.getScheduleId(), startTime, endTime);
+ indexEntry.getScheduleId(), startTime.getMillis(), endTime.getMillis());
AggregatedNumericMetric aggregatedMetric = calculateAggregate(metrics, startTime.getMillis());
aggregatedMetric.setScheduleId(indexEntry.getScheduleId());
toMetrics.add(aggregatedMetric);
diff --git a/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsDAOTest.java b/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsDAOTest.java
index 140bc4d..0d6209b 100644
--- a/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsDAOTest.java
+++ b/modules/enterprise/server/server-metrics/src/test/java/org/rhq/server/metrics/MetricsDAOTest.java
@@ -93,7 +93,8 @@ public class MetricsDAOTest extends CassandraIntegrationTest {
assertEquals(actualUpdates, data, "The updates do not match expected value.");
- List<RawNumericMetric> actualMetrics = dao.findRawMetrics(scheduleId, currentHour, currentHour.plusHours(1));
+ List<RawNumericMetric> actualMetrics = dao.findRawMetrics(scheduleId, currentHour.getMillis(), currentHour
+ .plusHours(1).getMillis());
List<RawNumericMetric> expectedMetrics = asList(
new RawNumericMetric(scheduleId, threeMinutesAgo.getMillis(), 3.2),
new RawNumericMetric(scheduleId, twoMinutesAgo.getMillis(), 3.9),
@@ -105,8 +106,8 @@ public class MetricsDAOTest extends CassandraIntegrationTest {
// versions of the findRawMetrics method. In production code (so far), we have no
// need to retrieve meta data when retrieving raw metrics, but we need to verify
// that the TTL is set.
- List<RawNumericMetric> actualMetricsWithMetadata = dao.findRawMetrics(scheduleId, currentHour,
- currentHour.plusHours(1), true) ;
+ List<RawNumericMetric> actualMetricsWithMetadata = dao.findRawMetrics(scheduleId, currentHour.getMillis(),
+ currentHour.plusHours(1).getMillis(), true);
assertRawTTLSet(actualMetricsWithMetadata);
}
@@ -159,8 +160,8 @@ public class MetricsDAOTest extends CassandraIntegrationTest {
int ttl = Hours.ONE.toStandardSeconds().getSeconds();
Set<MeasurementDataNumeric> actualUpdates = dao.insertRawMetrics(data, ttl);
- List<RawNumericMetric> actualMetrics = dao.findRawMetrics(asList(scheduleId1, scheduleId2), currentHour,
- currentHour.plusHours(1));
+ List<RawNumericMetric> actualMetrics = dao.findRawMetrics(asList(scheduleId1, scheduleId2),
+ currentHour.getMillis(), currentHour.plusHours(1).getMillis());
List<RawNumericMetric> expectedMetrics = asList(
new RawNumericMetric(scheduleId1, threeMinutesAgo.getMillis(), 1.1),
new RawNumericMetric(scheduleId1, twoMinutesAgo.getMillis(), 2.1),
@@ -197,7 +198,7 @@ public class MetricsDAOTest extends CassandraIntegrationTest {
// verify that the TTL is set
List<AggregatedNumericMetric> actualMetricsWithMetadata = dao.findAggregateMetricsWithMetadata(
- MetricsTable.ONE_HOUR, scheduleId, hour0, hour0().plusHours(1).plusSeconds(1));
+ MetricsTable.ONE_HOUR, scheduleId, hour0.getMillis(), hour0().plusHours(1).plusSeconds(1).getMillis());
assertAggrgateTTLSet(actualMetricsWithMetadata);
}
@@ -218,7 +219,7 @@ public class MetricsDAOTest extends CassandraIntegrationTest {
dao.insertAggregates(MetricsTable.ONE_HOUR, metrics, ttl);
List<AggregatedNumericMetric> actual = dao.findAggregateMetrics(MetricsTable.ONE_HOUR,
- asList(schedule1, schedule2), hour0().plusHours(1), hour0().plusHours(2));
+ asList(schedule1, schedule2), hour0().plusHours(1).getMillis(), hour0().plusHours(2).getMillis());
List<AggregatedNumericMetric> expected = asList(
new AggregatedNumericMetric(schedule1, 2.1, 2.1, 2.1, hour0().plusHours(1).getMillis()),
new AggregatedNumericMetric(schedule2, 2.2, 2.2, 2.2, hour0().plusHours(1).getMillis())
@@ -249,8 +250,8 @@ public class MetricsDAOTest extends CassandraIntegrationTest {
new AggregatedNumericMetric(scheduledId, 4.0, 4.0, 4.0, hour0.plusHours(2).getMillis())
);
- List<AggregatedNumericMetric> actual = dao.findAggregateMetrics(MetricsTable.ONE_HOUR, scheduledId, startTime,
- endTime);
+ List<AggregatedNumericMetric> actual = dao.findAggregateMetrics(MetricsTable.ONE_HOUR, scheduledId,
+ startTime.getMillis(), endTime.getMillis());
assertEquals(actual, expected, "Failed to find one hour metrics for date range");
}
@@ -261,9 +262,9 @@ public class MetricsDAOTest extends CassandraIntegrationTest {
int scheduleId1 = 1;
int scheduleId2 = 2;
- Map<Integer, DateTime> updates = new HashMap<Integer, DateTime>();
- updates.put(scheduleId1, hour0);
- updates.put(scheduleId2, hour0);
+ Map<Integer, Long> updates = new HashMap<Integer, Long>();
+ updates.put(scheduleId1, hour0.getMillis());
+ updates.put(scheduleId2, hour0.getMillis());
dao.updateMetricsIndex(MetricsTable.ONE_HOUR, updates);
List<MetricsIndexEntry> actual = dao.findMetricsIndexEntries(MetricsTable.ONE_HOUR);
@@ -277,11 +278,11 @@ public class MetricsDAOTest extends CassandraIntegrationTest {
public void purge1HourMetricsIndex() {
int scheduleId1 = 1;
int scheduleId2 = 2;
- Map<Integer, DateTime> updates = new HashMap<Integer, DateTime>();
- updates.put(scheduleId1, hour0());
- updates.put(scheduleId2, hour0());
- updates.put(scheduleId1, hour0().plusHours(1));
- updates.put(scheduleId2, hour0().plusHours(1));
+ Map<Integer, Long> updates = new HashMap<Integer, Long>();
+ updates.put(scheduleId1, hour0().getMillis());
+ updates.put(scheduleId2, hour0().getMillis());
+ updates.put(scheduleId1, hour0().plusHours(1).getMillis());
+ updates.put(scheduleId2, hour0().plusHours(1).getMillis());
dao.updateMetricsIndex(MetricsTable.ONE_HOUR, updates);
dao.deleteMetricsIndexEntries(MetricsTable.ONE_HOUR);
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 c3f8eca..ca6dd95 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
@@ -118,7 +118,8 @@ public class MetricsServerTest extends CassandraIntegrationTest {
long timestamp = System.currentTimeMillis();
metricsServer.addNumericData(data);
- List<RawNumericMetric> actual = dao.findRawMetrics(scheduleId, hour0.plusHours(4), hour0.plusHours(5));
+ List<RawNumericMetric> actual = dao.findRawMetrics(scheduleId, hour0.plusHours(4).getMillis(),
+ hour0.plusHours(5).getMillis());
List<RawNumericMetric> expected = asList(
new RawNumericMetric(scheduleId, threeMinutesAgo.getMillis(), 3.2),
new RawNumericMetric(scheduleId, twoMinutesAgo.getMillis(), 3.9),
@@ -246,8 +247,8 @@ public class MetricsServerTest extends CassandraIntegrationTest {
dao.insertAggregates(MetricsTable.ONE_HOUR, oneHourMetrics, MetricsTable.ONE_HOUR.getTTL());
// update the 6 hour queue
- Map<Integer, DateTime> indexUpdates = new HashMap<Integer, DateTime>();
- indexUpdates.put(scheduleId, hour6);
+ Map<Integer, Long> indexUpdates = new HashMap<Integer, Long>();
+ indexUpdates.put(scheduleId, hour6.getMillis());
dao.updateMetricsIndex(MetricsTable.SIX_HOUR, indexUpdates);
// execute the system under test
@@ -297,8 +298,8 @@ public class MetricsServerTest extends CassandraIntegrationTest {
dao.insertAggregates(MetricsTable.SIX_HOUR, sixHourMetrics, DateTimeService.ONE_MONTH);
// update the 24 queue
- Map<Integer, DateTime> indexUpdates = new HashMap<Integer, DateTime>();
- indexUpdates.put(scheduleId, hour0);
+ Map<Integer, Long> indexUpdates = new HashMap<Integer, Long>();
+ indexUpdates.put(scheduleId, hour0.getMillis());
dao.updateMetricsIndex(MetricsTable.TWENTY_FOUR_HOUR, indexUpdates);
// execute the system under test
@@ -690,7 +691,8 @@ public class MetricsServerTest extends CassandraIntegrationTest {
private void assertColumnMetadataEquals(int scheduleId, DateTime startTime, DateTime endTime, Integer ttl,
long timestamp) {
- List<RawNumericMetric> metrics = dao.findRawMetrics(scheduleId, startTime, endTime, true);
+ List<RawNumericMetric> metrics = dao.findRawMetrics(scheduleId, startTime.getMillis(), endTime.getMillis(),
+ true);
for (RawNumericMetric metric : metrics) {
assertEquals(metric.getColumnMetadata().getTtl(), ttl, "The TTL does not match the expected value for " +
metric);