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