modules/enterprise/remoting/cli/src/main/samples/modules/util.js
| 110 ++++++++-
modules/enterprise/server/server-metrics/src/main/java/org/rhq/server/metrics/MetricsServer.java
| 114 +++++-----
2 files changed, 158 insertions(+), 66 deletions(-)
New commits:
commit 9a97e14e0a9812520fcfacd42185704dc1fc21bd
Author: John Sanda <jsanda(a)redhat.com>
Date: Mon Dec 9 14:46:45 2013 -0500
add support in foreach for paging over criteria query results
This is basically a port of the code in CriteriaQuery.java
diff --git a/modules/enterprise/remoting/cli/src/main/samples/modules/util.js
b/modules/enterprise/remoting/cli/src/main/samples/modules/util.js
index b67eebc..18c34b3 100644
--- a/modules/enterprise/remoting/cli/src/main/samples/modules/util.js
+++ b/modules/enterprise/remoting/cli/src/main/samples/modules/util.js
@@ -13,32 +13,104 @@
/**
+ * <p>
* If obj is a JS array or a java.util.Collection, each element is passed to
- * the callback function. If obj is a java.util.Map, each map entry is passed
- * to the callback function as a key/value pair. If obj is none of the
- * aforementioned types, it is treated as a generic object and each of its
- * properties is passed to the callback function as a name/value pair.
+ * the callback function.
+ * </p>
+ * <p>
+ * If obj is a java.util.Map, each map entry is passed to the callback function
+ * as a key/value pair.
+ * </p>
+ * <p>
+ * If obj is a Criteria object, then the corresponding find by criteria method
+ * will be invoked. Each entity in the result set will be passed to the callback
+ * function. This function performs paging implicitly such that the callback will
+ * be invoked for all entities in the result set, even if it requires multiple
+ * criteria query finder method invocations.
+ * </p>
+ * <p>
+ * If obj is none of the aforementioned types, it is treated as a generic object
+ * and each of its properties is passed to the callback function as a name/value pair.
+ * </p>
*/
exports.foreach = function (obj, fn) {
+ var criteriaExecutors = {
+ Alert: function(criteria) { return AlertManager.findAlertsByCriteria(criteria); },
+ AlertDefinition: function(criteria) { return
AlertDefinitionManager.findAlertDefinitionsByCriteria(criteria); },
+ Agent: function(criteria) { return AgentManager.findAgentsByCriteria(criteria); },
+ Availability: function(criteria) { return
AvailabilityManager.findAvailabilityByCriteria(criteria); },
+ Bundle: function(criteria) { return BundleManager.findBundlesByCriteria(criteria);
},
+ BundleDeployment: function(criteria) { return
BundleManager.findBundleDeploymentsByCriteria(criteria); },
+ BundleDestination: function(criteria) { return
BundleManager.findBundleDestinationsByCriteria(criteria); },
+ BundleFile: function(criteria) { return
BundleManager.findBundleFilesByCriteria(criteria); },
+ BundleGroup: function(criteria) { return
BundleManager.findBundleGroupsByCriteria(criteria); },
+ BundleResourceDeployment: function(criteria) { return
BundleManager.findBundleResourceDeploymentsByCriteria(criteria); },
+ BundleVersion: function(criteria) { return
BundleManager.findBundleVersionsByCriteria(criteria); },
+ DriftDefinition: function(criteria) { return
DriftManager.findDriftDefinitionsByCriteria(criteria); },
+ DriftDefinitionTemplate: function(criteria) { return
DriftDefinitionTemplateManager.findTemplatesByCriteria(criteria); },
+ Event: function(criteria) { return EventManager.findEventsByCriteria(criteria); },
+ GroupOperationHistory: function(criteria) { return
OperationManager.findGroupOperationHistoriesByCriteria(criteria); },
+ GroupPluginConfigurationUpdate: function(criteria) { return
ConfigurationManager.findGroupPluginConfigurationUpdatesByCriteria(criteria); },
+ GroupResourceConfigurationUpdate: function(criteria) { return
ConfigurationManager.findGroupResourceConfigurationUpdatesByCriteria(criteria); },
+ InstalledPackage: function(criteria) { return
ContentManager.findInstalledPackagesByCriteria(criteria); },
+ MeasurementDataTrait: function(criteria) { return
MeasurementDataManager.findTraitsByCriteria(criteria); },
+ MeasurementDefinition: function(criteria) { return
MeasurementDefinitionManager.findMeasurementDefinitionsByCriteria(criteria); },
+ JPADriftChangeSet: function(criteria) { return
DriftManager.findDriftChangeSetsByCriteria(criteria); },
+ JPADrift: function(criteria) { return DriftManager.findDriftsByCriteria(criteria);
},
+ MeasurementSchedule: function(criteria) { return
MeasurementScheduleManager,findSchedulesByCriteria(criteria); },
+ OperationDefinition: function(criteria) { return
OperationManager.findOperationDefinitionsByCriteria(criteria); },
+ ResourceOperationHistory: function(criteria) { return
OperationManager.findResourceOperationHistoriesByCriteria(criteria); },
+ ResourceType: function(criteria) { return
ResourceTypeManager.findResourceTypesByCriteria(criteria); },
+ Resource: function(criteria) { return
ResourceManager.findResourcesByCriteria(criteria); },
+ Role: function(criteria) { return RoleManager.findRolesByCriteria(criteria); },
+ SavedSearch: function(criteria) { return
SavedSearchManager.findSavedSearchesByCriteria(criteria); },
+ StorageNode: function(criteria) { return
StorageNodeManager.findStorageNodesByCriteria(criteria); },
+ Subject: function(criteria) { return SubjectManager.findSubjectsByCriteria(criteria);
},
+ Tag: function(criteria) { return TagManager.findTagsByCriteria(criteria); }
+ };
+
if (obj instanceof Array) {
for (i in obj) {
fn(obj[i]);
}
- }
- else if (obj instanceof java.util.Collection) {
+ } else if (obj instanceof java.util.Collection) {
var iterator = obj.iterator();
while (iterator.hasNext()) {
fn(iterator.next());
}
- }
- else if (obj instanceof java.util.Map) {
+ } else if (obj instanceof java.util.Map) {
var iterator = obj.entrySet().iterator()
while (iterator.hasNext()) {
var entry = iterator.next();
fn(entry.key, entry.value);
}
- }
- else { // assume we have a generic object
+ } else if (obj instanceof Criteria) {
+ var criteria = obj;
+ var executeQuery = criteriaExecutors[criteria.persistentClass];
+
+ if (executeQuery == null) {
+ throw "No criteria executor found for " + criteria.getClass().name +
". A new executor may need to be added to " +
+ "this script.";
+ }
+
+ var currentPage = executeQuery();
+
+ while (!currentPage.isEmpty()) {
+ util.foreach(currentPage, fn);
+ if (currentPage.pageControl == null && currentPage.pageControlOverrides ==
null) {
+ reachedEnd = true;
+ } else {
+ if (currentPage.pageControlOverrides != null) {
+ currentPage.pageControlOverrides.pageNumber =
currentPage.pageControlOverrides.pageNumber + 1;
+ } else {
+ criteria.setPaging(currentPage.pageControl.pageNumber + 1,
currentPage.pageControl.pageSize);
+ }
+
+ currentPage.clear();
+ currentPage = executeQuery();
+ }
+ }
+ } else { // assume we have a generic object
for (i in obj) {
fn(i, obj[i]);
}
@@ -277,4 +349,22 @@ exports.asHash = function(configuration) {
})(configuration);
return ret;
+}
+
+exports.walkTree = function(root, visitorFn, nodesProperty, filterFn) {
+ var nodes = root[nodesProperty];
+ var stack = [];
+ var pushChildNodesOntoStack = function(node) {
+ exports.foreach(node[nodesProperty], function(childNode) {
+ stack.push(childNode);
+ });
+ }
+
+ pushChildNodesOntoStack(root);
+
+ while (stack.length > 0) {
+ var node = stack.pop();
+ pushChildNodesOntoStack(node);
+
+ }
}
\ No newline at end of file
commit 0a0e9b552ce22a8d3786e84b9f9fe5bdc7aca7c8
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Dec 4 09:21:04 2013 -0500
add debug logging
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 f9d355e..33528e6 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
@@ -52,7 +52,6 @@ import org.joda.time.Duration;
import org.rhq.core.domain.measurement.MeasurementDataNumeric;
import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowComposite;
-import org.rhq.core.util.StringUtil;
import org.rhq.server.metrics.domain.AggregateNumericMetric;
import org.rhq.server.metrics.domain.AggregateType;
import org.rhq.server.metrics.domain.MetricsIndexEntry;
@@ -158,68 +157,71 @@ public class MetricsServer {
public Iterable<MeasurementDataNumericHighLowComposite> findDataForResource(int
scheduleId, long beginTime,
long endTime, int numberOfBuckets) {
+ Stopwatch stopwatch = new Stopwatch().start();
+ try {
+ DateTime begin = new DateTime(beginTime);
- if (log.isDebugEnabled()) {
- log.debug("Querying for metric data using parameters [scheduleId: "
+ scheduleId + ", beginTime: " +
- beginTime + ", endTime: " + endTime + ", numberOfBuckets:
" + numberOfBuckets + "]");
- }
-
- DateTime begin = new DateTime(beginTime);
+ if (dateTimeService.isInRawDataRange(begin)) {
+ Iterable<RawNumericMetric> metrics = dao.findRawMetrics(scheduleId,
beginTime, endTime);
+ return createRawComposites(metrics, beginTime, endTime,
numberOfBuckets);
+ }
- if (dateTimeService.isInRawDataRange(begin)) {
- Iterable<RawNumericMetric> metrics = dao.findRawMetrics(scheduleId,
beginTime, endTime);
- return createRawComposites(metrics, beginTime, endTime, numberOfBuckets);
- }
+ Iterable<AggregateNumericMetric> metrics = null;
+ if (dateTimeService.isIn1HourDataRange(begin)) {
+ metrics = dao.findOneHourMetrics(scheduleId, beginTime, endTime);
+ } else if (dateTimeService.isIn6HourDataRnage(begin)) {
+ metrics = dao.findSixHourMetrics(scheduleId, beginTime, endTime);
+ } else if (dateTimeService.isIn24HourDataRnage(begin)) {
+ metrics = dao.findTwentyFourHourMetrics(scheduleId, beginTime, endTime);
+ } else {
+ throw new IllegalArgumentException("beginTime[" + beginTime +
"] is outside the accepted range.");
+ }
- Iterable<AggregateNumericMetric> metrics = null;
- if (dateTimeService.isIn1HourDataRange(begin)) {
- metrics = dao.findOneHourMetrics(scheduleId, beginTime, endTime);
- } else if (dateTimeService.isIn6HourDataRnage(begin)) {
- metrics = dao.findSixHourMetrics(scheduleId, beginTime, endTime);
- } else if (dateTimeService.isIn24HourDataRnage(begin)) {
- metrics = dao.findTwentyFourHourMetrics(scheduleId, beginTime, endTime);
- } else {
- throw new IllegalArgumentException("beginTime[" + beginTime +
"] is outside the accepted range.");
+ return createComposites(metrics, beginTime, endTime, numberOfBuckets);
+ } finally {
+ stopwatch.stop();
+ if (log.isDebugEnabled()) {
+ log.debug("Retrieved resource data for [scheduleId: " +
scheduleId + ", beginTime: " + beginTime +
+ ", endTime: " + endTime + "] in " +
stopwatch.elapsed(TimeUnit.MILLISECONDS) + " ms");
+ }
}
-
- return createComposites(metrics, beginTime, endTime, numberOfBuckets);
}
public List<MeasurementDataNumericHighLowComposite>
findDataForGroup(List<Integer> scheduleIds, long beginTime,
long endTime, int numberOfBuckets) {
- if (log.isDebugEnabled()) {
- log.debug("Querying for metric data using parameters [scheduleIds:
" + scheduleIds + ", beingTime: " +
- beginTime + ", endTime: " + endTime + ", numberOfBuckets:
" + numberOfBuckets + "]");
- }
+ Stopwatch stopwatch = new Stopwatch().start();
+ try {
+ DateTime begin = new DateTime(beginTime);
- DateTime begin = new DateTime(beginTime);
+ if (dateTimeService.isInRawDataRange(begin)) {
+ Iterable<RawNumericMetric> metrics =
dao.findRawMetrics(scheduleIds, beginTime, endTime);
+ return createRawComposites(metrics, beginTime, endTime,
numberOfBuckets);
+ }
- if (dateTimeService.isInRawDataRange(begin)) {
- Iterable<RawNumericMetric> metrics = dao.findRawMetrics(scheduleIds,
beginTime, endTime);
- return createRawComposites(metrics, beginTime, endTime, numberOfBuckets);
- }
+ Iterable<AggregateNumericMetric> metrics = null;
+ if (dateTimeService.isIn1HourDataRange(begin)) {
+ metrics = dao.findOneHourMetrics(scheduleIds, beginTime, endTime);
+ } else if (dateTimeService.isIn6HourDataRnage(begin)) {
+ metrics = dao.findSixHourMetrics(scheduleIds, beginTime, endTime);
+ } else if (dateTimeService.isIn24HourDataRnage(begin)) {
+ metrics = dao.findTwentyFourHourMetrics(scheduleIds, beginTime,
endTime);
+ } else {
+ throw new IllegalArgumentException("beginTime[" + beginTime +
"] is outside the accepted range.");
+ }
- Iterable<AggregateNumericMetric> metrics = null;
- if (dateTimeService.isIn1HourDataRange(begin)) {
- metrics = dao.findOneHourMetrics(scheduleIds, beginTime, endTime);
- } else if (dateTimeService.isIn6HourDataRnage(begin)) {
- metrics = dao.findSixHourMetrics(scheduleIds, beginTime, endTime);
- } else if (dateTimeService.isIn24HourDataRnage(begin)) {
- metrics = dao.findTwentyFourHourMetrics(scheduleIds, beginTime, endTime);
- } else {
- throw new IllegalArgumentException("beginTime[" + beginTime +
"] is outside the accepted range.");
+ return createComposites(metrics, beginTime, endTime, numberOfBuckets);
+ } finally {
+ stopwatch.stop();
+ if (log.isDebugEnabled()) {
+ log.debug("Retrieved resource group data for [scheduleIds: " +
scheduleIds + ", beginTime: " +
+ beginTime + ", endTime: " + endTime + "] in " +
stopwatch.elapsed(TimeUnit.MILLISECONDS) + " ms");
+ }
}
-
- return createComposites(metrics, beginTime, endTime, numberOfBuckets);
}
public AggregateNumericMetric getSummaryAggregate(int scheduleId, long beginTime,
long endTime) {
- long start = System.currentTimeMillis();
+ Stopwatch stopwatch = new Stopwatch().start();
try {
- if (log.isDebugEnabled()) {
- log.debug("Calculating resource summary aggregate for [scheduleId:
" + scheduleId + ", beginTime: " +
- beginTime + ", endTime: " + endTime + "]");
- }
DateTime begin = new DateTime(beginTime);
if (dateTimeService.isInRawDataRange(begin)) {
@@ -240,9 +242,11 @@ public class MetricsServer {
return calculateAggregate(metrics, beginTime);
} finally {
- long end = System.currentTimeMillis();
+ stopwatch.stop();
if (log.isDebugEnabled()) {
- log.debug("Finished calculating resource summary aggregate in "
+ (end - start) + " ms");
+ log.debug("Finished calculating resource summary aggregate for
[scheduleId: " + scheduleId +
+ ", beginTime: " + beginTime + ", endTime: " +
endTime + "] in " +
+ stopwatch.elapsed(TimeUnit.MILLISECONDS) + " ms");
}
}
}
@@ -283,12 +287,8 @@ public class MetricsServer {
}
public AggregateNumericMetric getSummaryAggregate(List<Integer> scheduleIds,
long beginTime, long endTime) {
- long start = System.currentTimeMillis();
+ Stopwatch stopwatch = new Stopwatch().start();
try {
- if (log.isDebugEnabled()) {
- log.debug("Calculating group summary aggregate for [scheduleIds:
[" + StringUtil.listToString(
- scheduleIds) + "], beginTime: " + beginTime + ",
endTime: " + endTime + "]");
- }
DateTime begin = new DateTime(beginTime);
if (dateTimeService.isInRawDataRange(new DateTime(beginTime))) {
@@ -309,9 +309,11 @@ public class MetricsServer {
return calculateAggregate(metrics, beginTime);
} finally {
- long end = System.currentTimeMillis();
+ stopwatch.stop();
if (log.isDebugEnabled()) {
- log.debug("Finished calculating group summary aggregate in " +
(end - start) + " ms");
+ log.debug("Finished calculatig group summary aggregate for
[scheduleIds: " + scheduleIds +
+ ", beginTime: " + beginTime + ", endTime: " +
endTime + "] in " +
+ stopwatch.elapsed(TimeUnit.MILLISECONDS) + " ms");
}
}
}