[rhq] Branch 'mtho11/d3-charts-master' - modules/enterprise
by mike thompson
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceMetricsPortlet.java | 10 ++++++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java | 6 +++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/summary/AbstractActivityView.java | 4 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java | 4 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/AvailabilityD3Graph.java | 9 +++---
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java | 14 +++++-----
6 files changed, 30 insertions(+), 17 deletions(-)
New commits:
commit a1999de85f349c005321de76ee58e4d1337b0561
Author: Mike Thompson <mithomps(a)redhat.com>
Date: Thu Feb 28 15:36:20 2013 -0800
Charting - Add new Availability charts to summary sparkline popup charts.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceMetricsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceMetricsPortlet.java
index 591dfb7..6f3aad7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceMetricsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceMetricsPortlet.java
@@ -55,8 +55,10 @@ import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.PortletConfigurationEditorComponent.Constant;
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.groups.GroupMetricsPortlet;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.AvailabilityLineGraphType;
import org.rhq.enterprise.gui.coregui.client.inventory.common.detail.summary.AbstractActivityView;
import org.rhq.enterprise.gui.coregui.client.inventory.common.detail.summary.AbstractActivityView.ChartViewWindow;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.AvailabilityD3Graph;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.D3GraphListView;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.util.BrowserUtility;
@@ -277,6 +279,11 @@ public class ResourceMetricsPortlet extends GroupMetricsPortlet {
ChartViewWindow window = new ChartViewWindow(
recentMeasurementsContent
.extendLocatorId("ChartWindow"), title);
+ final AvailabilityD3Graph availabilityGraph = new AvailabilityD3Graph("avail", new AvailabilityLineGraphType(resource.getId()));
+ // first step in 2 step to create d3 chart
+ // create a placeholder for avail graph
+ availabilityGraph.createGraphMarker();
+
final D3GraphListView graphView = D3GraphListView.createSingleGraph(extendLocatorId("D3Graphs"),
resourceComposite.getResource(), md.getId());
graphView.addSetButtonClickHandler(new ClickHandler()
@@ -284,13 +291,14 @@ public class ResourceMetricsPortlet extends GroupMetricsPortlet {
@Override
public void onClick(ClickEvent event)
{
+ availabilityGraph.drawGraph();
graphView.redrawGraphs();
}
});
+
window.addItem(graphView);
window.show();
- markForRedraw();
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java
index 76eb8d2..dd12c72 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java
@@ -33,12 +33,16 @@ import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.async.CountDownLatch;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+/**
+ * Provide the shared stuff for create GraphListViews like Availability graphs
+ * and User Preferences pickers for the date range.
+ */
public class AbstractD3GraphListView extends LocatableVLayout {
protected PageList<Availability> availabilityList;
protected AvailabilityD3Graph availabilityGraph;
protected static Label loadingLabel = new Label(MSG.common_msg_loading());
protected UserPreferencesMeasurementRangeEditor measurementRangeEditor;
- protected boolean monitorDetailView = false;
+ protected boolean showAvailabilityGraph = false;
public AbstractD3GraphListView(String locatorId){
super(locatorId);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/summary/AbstractActivityView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/summary/AbstractActivityView.java
index 80164c6..ee56f9b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/summary/AbstractActivityView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/summary/AbstractActivityView.java
@@ -629,8 +629,8 @@ public abstract class AbstractActivityView extends LocatableVLayout implements R
} else {
setTitle(CHART_TITLE + ": " + title);
}
- setShowMinimizeButton(true);
- setShowMaximizeButton(true);
+ setShowMinimizeButton(false);
+ setShowMaximizeButton(false);
setShowCloseButton(true);
setIsModal(true);
setShowModalMask(true);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java
index 1d4c80d..623518f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java
@@ -54,7 +54,7 @@ public class D3GroupGraphListView extends AbstractD3GraphListView {
public D3GroupGraphListView(String locatorId, ResourceGroup resourceGroup, boolean monitorDetailView) {
super(locatorId);
this.resourceGroup = resourceGroup;
- this.monitorDetailView = monitorDetailView;
+ this.showAvailabilityGraph = monitorDetailView;
setOverflow(Overflow.AUTO);
}
@@ -65,7 +65,7 @@ public class D3GroupGraphListView extends AbstractD3GraphListView {
destroyMembers();
addMember(measurementRangeEditor);
- if (monitorDetailView) {
+ if (showAvailabilityGraph) {
availabilityGraph = new AvailabilityD3Graph("avail", new AvailabilityLineGraphType(resourceGroup.getId()));
// first step in 2 step to create d3 chart
// create a placeholder for avail graph
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/AvailabilityD3Graph.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/AvailabilityD3Graph.java
index d67ef29..a8834c8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/AvailabilityD3Graph.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/AvailabilityD3Graph.java
@@ -31,6 +31,9 @@ import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
+ * A special graph implementation just for representing Availability (with hovers) for
+ * a resource or resource group.
+ *
* @author Mike Thompson
*/
public class AvailabilityD3Graph extends LocatableVLayout implements AvailabilityGraph {
@@ -40,7 +43,7 @@ public class AvailabilityD3Graph extends LocatableVLayout implements Availabilit
public AvailabilityD3Graph(String locatorId, AvailabilityLineGraphType graphType) {
super(locatorId);
this.availabilityGraphType = graphType;
- setHeight100();
+ setHeight(25);
setWidth100();
}
@@ -49,7 +52,6 @@ public class AvailabilityD3Graph extends LocatableVLayout implements Availabilit
super.onDraw();
removeMembers(getMembers());
createGraphMarker();
- //drawGraph();
}
@Override
@@ -80,7 +82,7 @@ public class AvailabilityD3Graph extends LocatableVLayout implements Availabilit
divAndSvgDefs.append("</svg></div>");
HTMLFlow graph = new HTMLFlow(divAndSvgDefs.toString());
graph.setWidth100();
- graph.setHeight100();
+ graph.setHeight(25);
addMember(graph);
}
@@ -94,7 +96,6 @@ public class AvailabilityD3Graph extends LocatableVLayout implements Availabilit
*/
public void drawGraph() {
- Log.debug("*** Draw");
drawJsniChart();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java
index e17bddd..635c9de 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java
@@ -63,15 +63,14 @@ public class D3GraphListView extends AbstractD3GraphListView {
private Resource resource;
private Set<Integer> definitionIds = null;
- private UserPreferencesMeasurementRangeEditor measurementRangeEditor;
private boolean useSummaryData = false;
private PageList<MeasurementOOBComposite> measurementOOBCompositeList;
private List<List<MeasurementDataNumericHighLowComposite>> metricsDataList;
public static D3GraphListView createMultipleGraphs(String locatorId, Resource resource, Set<Integer> definitionIds,
- boolean monitorDetailView) {
+ boolean showAvailabilityGraph) {
- return new D3GraphListView(locatorId, resource, definitionIds, monitorDetailView);
+ return new D3GraphListView(locatorId, resource, definitionIds, showAvailabilityGraph);
}
public static D3GraphListView createSummaryMultipleGraphs(String locatorId, Resource resource,
@@ -85,18 +84,19 @@ public class D3GraphListView extends AbstractD3GraphListView {
return new D3GraphListView(locatorId, resource, definitionIds, false);
}
+
private D3GraphListView(String locatorId, Resource resource, Set<Integer> definitionIds, boolean monitorDetailView) {
super(locatorId);
this.resource = resource;
commonConstructorSettings();
this.definitionIds = definitionIds;
- this.monitorDetailView = monitorDetailView;
+ this.showAvailabilityGraph = monitorDetailView;
}
- private D3GraphListView(String locatorId, Resource resource, boolean monitorDetailView) {
+ private D3GraphListView(String locatorId, Resource resource, boolean showAvailabilityGraph) {
super(locatorId);
this.resource = resource;
- this.monitorDetailView = monitorDetailView;
+ this.showAvailabilityGraph = showAvailabilityGraph;
commonConstructorSettings();
useSummaryData = true;
}
@@ -118,7 +118,7 @@ public class D3GraphListView extends AbstractD3GraphListView {
destroyMembers();
addMember(measurementRangeEditor);
- if (monitorDetailView) {
+ if (showAvailabilityGraph) {
availabilityGraph = new AvailabilityD3Graph("avail", new AvailabilityLineGraphType(resource.getId()));
// first step in 2 step to create d3 chart
// create a placeholder for avail graph
10 years, 9 months
[rhq] modules/core
by mazz
modules/core/util/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java | 9 ++++++++-
modules/core/util/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java | 6 ++++++
2 files changed, 14 insertions(+), 1 deletion(-)
New commits:
commit 8beb34b07d0b669db6e28d1452cae6c4092441ce
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Feb 28 17:48:17 2013 -0500
[BZ 916790] fix the case where the version string has a long "number" which really should be treated as a string
diff --git a/modules/core/util/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java b/modules/core/util/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
index 5e16ac6..07f34d7 100644
--- a/modules/core/util/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
+++ b/modules/core/util/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
@@ -424,7 +424,14 @@ public class ComparableVersion
private static Item parseItem( boolean isDigit, String buf )
{
- return isDigit ? new IntegerItem( new Integer( buf ) ) : new StringItem( buf, false );
+ if (isDigit) {
+ try {
+ return new IntegerItem(new Integer(buf));
+ } catch (Exception e) {
+ // fall through - just use it as a string - its probably too long, like a timestamp. e.g. 201302281030
+ }
+ }
+ return new StringItem(buf, false);
}
public int compareTo( Object o )
diff --git a/modules/core/util/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java b/modules/core/util/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
index 1dab605..c6efdba 100644
--- a/modules/core/util/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
+++ b/modules/core/util/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
@@ -131,6 +131,12 @@ public class ComparableVersionTest {
compareVersions("4.0.0.Beta1", "4.0.0.GA");
}
+ public void testBZ916790() {
+ new ComparableVersion("3.13.1.201302221022"); // a bug caused this to throw an exception before
+ compareVersions("3.13.1.201302221022", "3.13.1.201302221023");
+ compareVersions("3.13.1.201202221022", "3.13.1.201302221022");
+ }
+
private void compareVersions(String ver1String, String ver2String) {
//System.out.println("Testing: " + ver1String + "\t" + ver2String);
10 years, 9 months
[rhq] Branch 'mtho11/d3-charts-master' - 2 commits - modules/enterprise
by mike thompson
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/ResourceGraphPortlet.java | 68 +----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java | 84 ++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMetricD3GraphView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/MetricStackedBarGraph.java | 1
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java | 124 +++++-----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java | 100 +-------
8 files changed, 188 insertions(+), 195 deletions(-)
New commits:
commit cb3e2ff994e904218e220058fb5ad7e9b67f2ffe
Author: Mike Thompson <mithomps(a)redhat.com>
Date: Thu Feb 28 14:11:42 2013 -0800
Charting - Add Availability charts to Group screens and pull-up the common availability code to a shared super class.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/ResourceGraphPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/ResourceGraphPortlet.java
index 0718e15..b2a168e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/ResourceGraphPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/ResourceGraphPortlet.java
@@ -37,17 +37,13 @@ import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import org.rhq.core.domain.common.EntityContext;
import org.rhq.core.domain.configuration.PropertySimple;
-import org.rhq.core.domain.criteria.AvailabilityCriteria;
import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.dashboard.DashboardPortlet;
-import org.rhq.core.domain.measurement.Availability;
-import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.MeasurementDefinition;
import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowComposite;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageList;
-import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.lookup.ResourceLookupComboBoxItem;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
@@ -92,7 +88,7 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo
@Override
public void configure(PortletWindow portletWindow, DashboardPortlet storedPortlet) {
- Log.debug("\n\n\nPortlet Configure !!");
+ Log.debug("\nPortlet Configure !!");
if (null == this.portletWindow && null != portletWindow) {
this.portletWindow = portletWindow;
@@ -108,11 +104,10 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo
if (resourceIdProperty != null && measurementDefIdProperty != null) {
final Integer entityId = resourceIdProperty.getIntegerValue();
final Integer measurementDefId = measurementDefIdProperty.getIntegerValue();
- graph.setDefinitionId(measurementDefId);
- graph.setEntityId(entityId);
- Log.debug("Metric Graph Data: "+ graph.getMetricGraphData());
-
if (entityId != null && measurementDefId != null) {
+ graph.setDefinitionId(measurementDefId);
+ graph.setEntityId(entityId);
+ Log.debug("Metric Graph Data: " + graph.getMetricGraphData());
queryResource(entityId, measurementDefId);
}
@@ -122,8 +117,6 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo
}
private void queryResource(Integer entityId, final Integer measurementDefId) {
- //final long startTime = System.currentTimeMillis();
-
ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
ResourceCriteria resourceCriteria = new ResourceCriteria();
@@ -176,61 +169,29 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo
final long startTime = System.currentTimeMillis();
// setting up a deferred Command to execute after all resource queries have completed (successfully or unsuccessfully)
- // we know there are exactly 2 resources
+ // we know there are exactly 1 resources
final CountDownLatch countDownLatch = CountDownLatch.create(1, new Command() {
@Override
/**
* Satisfied only after ALL of the metric queries AND availability have completed
*/
public void execute() {
- Log.debug("Dashboard chart query total time for entity: "+entityId+", MeasurementDef: "+def.getId() +" in "+ (System.currentTimeMillis() - startTime)+" ms");
+ Log.debug("Dashboard chart query total time for entity: " + entityId + ", MeasurementDef: "
+ + def.getId() + " in " + (System.currentTimeMillis() - startTime) + " ms");
drawGraph();
}
});
queryMeasurementsAndMetricData(entityId, def.getId(), countDownLatch);
- //queryAvailability(entityId, countDownLatch);
// now the countDown latch will run sometime asynchronously after BOTH the previous 2 queries have executed
}
-// private void queryAvailability(final Integer entityId, final CountDownLatch countDownLatch) {
-//
-// final long startTime = System.currentTimeMillis();
-//
-// // now return the availability
-// AvailabilityCriteria c = new AvailabilityCriteria();
-// c.addFilterResourceId(entityId);
-// c.addFilterInitialAvailability(false);
-// c.addSortStartTime(PageOrdering.ASC);
-// GWTServiceLookup.getAvailabilityService().findAvailabilityByCriteria(c,
-// new AsyncCallback<PageList<Availability>>() {
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_availability_loadFailed(), caught);
-// countDownLatch.countDown();
-// }
-//
-// @Override
-// public void onSuccess(PageList<Availability> availList) {
-// Log.debug("Dashboard chart availability query for: "+entityId+", in: "
-// + (System.currentTimeMillis() - startTime) + " ms.");
-// PageList<Availability> availabilityList = new PageList<Availability>();
-// for (Availability availability : availList) {
-// if (!availability.getAvailabilityType().equals(AvailabilityType.UP)){
-// availabilityList.add(availability);
-// }
-// }
-// //graph.getMetricGraphData().setAvailabilityList(availabilityList);
-// countDownLatch.countDown();
-// }
-// });
-// }
-
- private void queryMeasurementsAndMetricData(final Integer entityId, final Integer definitionId, final CountDownLatch countDownLatch) {
+ private void queryMeasurementsAndMetricData(final Integer entityId, final Integer definitionId,
+ final CountDownLatch countDownLatch) {
final long startTime = System.currentTimeMillis();
//
- GWTServiceLookup.getMeasurementDataService().findDataForResourceForLast(entityId,
- new int[] { definitionId }, 8, MeasurementUtils.UNIT_HOURS, 60,
+ GWTServiceLookup.getMeasurementDataService().findDataForResourceForLast(entityId, new int[] { definitionId },
+ 8, MeasurementUtils.UNIT_HOURS, 60,
new AsyncCallback<List<List<MeasurementDataNumericHighLowComposite>>>() {
@Override
public void onFailure(Throwable caught) {
@@ -240,8 +201,7 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo
@Override
public void onSuccess(final List<List<MeasurementDataNumericHighLowComposite>> measurementData) {
- Log.debug("Dashboard Metric data in: "
- + (System.currentTimeMillis() - startTime) + " ms.");
+ Log.debug("Dashboard Metric data in: " + (System.currentTimeMillis() - startTime) + " ms.");
graph.getMetricGraphData().setMetricData(measurementData.get(0));
countDownLatch.countDown();
}
@@ -337,7 +297,7 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo
@Override
public void redraw() {
- Log.debug(" *** Redraw Portlet and set data");
+ Log.debug("Redraw Portlet and set data");
super.redraw();
removeMembers(getMembers());
@@ -350,8 +310,6 @@ public class ResourceGraphPortlet extends ResourceMetricD3Graph implements Custo
} else {
graph.getMetricGraphData().setEntityId(simple.getIntegerValue());
PropertySimple simpleDefId = storedPortlet.getConfiguration().getSimple(CFG_DEFINITION_ID);
- Log.debug("EntityId from portal config: " + simple.getIntegerValue());
- Log.debug("DefintionId from portal config: " + simpleDefId.getIntegerValue());
graph.getMetricGraphData().setDefinitionId(simpleDefId.getIntegerValue());
drawGraph();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java
new file mode 100644
index 0000000..76eb8d2
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractD3GraphListView.java
@@ -0,0 +1,84 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2013 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.common;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.widgets.Label;
+
+import org.rhq.core.domain.criteria.AvailabilityCriteria;
+import org.rhq.core.domain.measurement.Availability;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.components.measurement.UserPreferencesMeasurementRangeEditor;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.AvailabilityD3Graph;
+import org.rhq.enterprise.gui.coregui.client.util.Log;
+import org.rhq.enterprise.gui.coregui.client.util.async.CountDownLatch;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+public class AbstractD3GraphListView extends LocatableVLayout {
+ protected PageList<Availability> availabilityList;
+ protected AvailabilityD3Graph availabilityGraph;
+ protected static Label loadingLabel = new Label(MSG.common_msg_loading());
+ protected UserPreferencesMeasurementRangeEditor measurementRangeEditor;
+ protected boolean monitorDetailView = false;
+
+ public AbstractD3GraphListView(String locatorId){
+ super(locatorId);
+ measurementRangeEditor = new UserPreferencesMeasurementRangeEditor(this.getLocatorId());
+ }
+
+ protected void queryAvailability(final int resourceId, final CountDownLatch countDownLatch) {
+
+ final long startTime = System.currentTimeMillis();
+
+ // now return the availability
+ AvailabilityCriteria c = new AvailabilityCriteria();
+ c.addFilterResourceId(resourceId);
+ c.addFilterInitialAvailability(false);
+ c.addSortStartTime(PageOrdering.ASC);
+ GWTServiceLookup.getAvailabilityService().findAvailabilityByCriteria(c,
+ new AsyncCallback<PageList<Availability>>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_availability_loadFailed(), caught);
+ if (countDownLatch != null) {
+ countDownLatch.countDown();
+ }
+ }
+
+ @Override
+ public void onSuccess(PageList<Availability> availList) {
+ Log.debug("\nSuccessfully queried availability in: " + (System.currentTimeMillis() - startTime)
+ + " ms.");
+ availabilityList = new PageList<Availability>();
+ for (Availability availability : availList) {
+ availabilityList.add(availability);
+ }
+ Log.debug("avail list size: " + availabilityList.size());
+ if (countDownLatch != null) {
+ countDownLatch.countDown();
+ }
+ }
+ });
+ }
+
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMetricD3GraphView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMetricD3GraphView.java
index 954e19c..767daa9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMetricD3GraphView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMetricD3GraphView.java
@@ -111,7 +111,7 @@ public abstract class AbstractMetricD3GraphView extends LocatableVLayout {
StringBuilder divAndSvgDefs = new StringBuilder();
divAndSvgDefs.append("<div id=\"rChart-" + graph.getMetricGraphData().getChartId()
- + "\" ><svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" style=\"height:" + getChartHeight()
+ + "\" ><svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" style=\"height:" + getChartHeight()
+ "px;\">");
divAndSvgDefs.append(getSvgDefs());
divAndSvgDefs.append("</svg></div>");
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/MetricStackedBarGraph.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/MetricStackedBarGraph.java
index df8635f..fddffe1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/MetricStackedBarGraph.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/MetricStackedBarGraph.java
@@ -72,7 +72,6 @@ public final class MetricStackedBarGraph extends AbstractGraph {
"use strict";
// privates
- console.log("Chart Height: "+chartContext.height);
var margin = {top: 10, right: 5, bottom: 5, left: 40},
width = 750 - margin.left - margin.right,
adjustedChartHeight = chartContext.chartHeight - 50,
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java
index f7e9eae..1d4c80d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/D3GroupGraphListView.java
@@ -26,7 +26,6 @@ import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
-import com.smartgwt.client.widgets.Label;
import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.DisplayType;
@@ -35,28 +34,27 @@ import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowCo
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.components.measurement.UserPreferencesMeasurementRangeEditor;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.AvailabilityLineGraphType;
import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.MetricGraphData;
import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.MetricStackedBarGraph;
+import org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractD3GraphListView;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.AvailabilityD3Graph;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.ResourceMetricD3Graph;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
* Build the Group version of the View that shows the individual graph views.
* @author Mike Thompson
*/
-public class D3GroupGraphListView extends LocatableVLayout {
+public class D3GroupGraphListView extends AbstractD3GraphListView {
private ResourceGroup resourceGroup;
- private Label loadingLabel = new Label(MSG.common_msg_loading());
- private UserPreferencesMeasurementRangeEditor measurementRangeEditor;
- public D3GroupGraphListView(String locatorId, ResourceGroup resourceGroup) {
+ public D3GroupGraphListView(String locatorId, ResourceGroup resourceGroup, boolean monitorDetailView) {
super(locatorId);
- measurementRangeEditor = new UserPreferencesMeasurementRangeEditor(this.getLocatorId());
this.resourceGroup = resourceGroup;
+ this.monitorDetailView = monitorDetailView;
setOverflow(Overflow.AUTO);
}
@@ -67,6 +65,13 @@ public class D3GroupGraphListView extends LocatableVLayout {
destroyMembers();
addMember(measurementRangeEditor);
+ if (monitorDetailView) {
+ availabilityGraph = new AvailabilityD3Graph("avail", new AvailabilityLineGraphType(resourceGroup.getId()));
+ // first step in 2 step to create d3 chart
+ // create a placeholder for avail graph
+ availabilityGraph.createGraphMarker();
+ addMember(availabilityGraph);
+ }
if (resourceGroup != null) {
buildGraphs();
@@ -78,77 +83,78 @@ public class D3GroupGraphListView extends LocatableVLayout {
*/
private void buildGraphs() {
- List<Long> startEndList = measurementRangeEditor.getBeginEndTimes();
+ List<Long> startEndList = measurementRangeEditor.getBeginEndTimes();
final long startTime = startEndList.get(0);
final long endTime = startEndList.get(1);
+ queryAvailability(resourceGroup.getId(), null);
+
ResourceTypeRepository.Cache.getInstance().getResourceTypes(resourceGroup.getResourceType().getId(),
- EnumSet.of(ResourceTypeRepository.MetadataType.measurements),
- new ResourceTypeRepository.TypeLoadedCallback() {
- public void onTypesLoaded(final ResourceType type) {
+ EnumSet.of(ResourceTypeRepository.MetadataType.measurements),
+ new ResourceTypeRepository.TypeLoadedCallback() {
+ public void onTypesLoaded(final ResourceType type) {
- final ArrayList<MeasurementDefinition> measurementDefinitions = new ArrayList<MeasurementDefinition>();
+ final ArrayList<MeasurementDefinition> measurementDefinitions = new ArrayList<MeasurementDefinition>();
- for (MeasurementDefinition def : type.getMetricDefinitions()) {
- if (def.getDataType() == DataType.MEASUREMENT && def.getDisplayType() == DisplayType.SUMMARY) {
- measurementDefinitions.add(def);
- }
+ for (MeasurementDefinition def : type.getMetricDefinitions()) {
+ if (def.getDataType() == DataType.MEASUREMENT && def.getDisplayType() == DisplayType.SUMMARY) {
+ measurementDefinitions.add(def);
}
+ }
- Collections.sort(measurementDefinitions, new Comparator<MeasurementDefinition>() {
- public int compare(MeasurementDefinition o1, MeasurementDefinition o2) {
- return new Integer(o1.getDisplayOrder()).compareTo(o2.getDisplayOrder());
- }
- });
-
- int[] measDefIdArray = new int[measurementDefinitions.size()];
- for (int i = 0; i < measDefIdArray.length; i++) {
- measDefIdArray[i] = measurementDefinitions.get(i).getId();
+ Collections.sort(measurementDefinitions, new Comparator<MeasurementDefinition>() {
+ public int compare(MeasurementDefinition o1, MeasurementDefinition o2) {
+ return new Integer(o1.getDisplayOrder()).compareTo(o2.getDisplayOrder());
}
+ });
- GWTServiceLookup.getMeasurementDataService().findDataForCompatibleGroup(resourceGroup.getId(), measDefIdArray, startTime, endTime,60,
- new AsyncCallback<List<List<MeasurementDataNumericHighLowComposite>>>()
- {
- @Override
- public void onFailure(Throwable caught)
- {
- CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_graphs_loadFailed(),
- caught);
- loadingLabel.setContents(MSG.view_resource_monitor_graphs_loadFailed());
- }
+ int[] measDefIdArray = new int[measurementDefinitions.size()];
+ for (int i = 0; i < measDefIdArray.length; i++) {
+ measDefIdArray[i] = measurementDefinitions.get(i).getId();
+ }
+
+ GWTServiceLookup.getMeasurementDataService().findDataForCompatibleGroup(resourceGroup.getId(),
+ measDefIdArray, startTime, endTime, 60,
+ new AsyncCallback<List<List<MeasurementDataNumericHighLowComposite>>>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_graphs_loadFailed(),
+ caught);
+ loadingLabel.setContents(MSG.view_resource_monitor_graphs_loadFailed());
+ }
- @Override
- public void onSuccess(List<List<MeasurementDataNumericHighLowComposite>> result)
- {
- if (result.isEmpty())
- {
- loadingLabel.setContents(MSG.view_resource_monitor_graphs_noneAvailable());
- }
- else
- {
- loadingLabel.hide();
- int i = 0;
- for (List<MeasurementDataNumericHighLowComposite> data : result)
- {
- buildIndividualGraph(measurementDefinitions.get(i++), data);
- }
- }
+ @Override
+ public void onSuccess(List<List<MeasurementDataNumericHighLowComposite>> result) {
+ if (result.isEmpty()) {
+ loadingLabel.setContents(MSG.view_resource_monitor_graphs_noneAvailable());
+ } else {
+ loadingLabel.hide();
+ int i = 0;
+ for (List<MeasurementDataNumericHighLowComposite> data : result) {
+ buildIndividualGraph(measurementDefinitions.get(i++), data);
}
- });
+ availabilityGraph.setMetricData(result.get(0));
+ availabilityGraph.setAvailabilityList(availabilityList);
+ availabilityGraph.drawGraph();
+ }
+ }
+ });
- }
- });
+ }
+ });
}
- private void buildIndividualGraph(MeasurementDefinition measurementDefinition, List<MeasurementDataNumericHighLowComposite> data) {
+ private void buildIndividualGraph(MeasurementDefinition measurementDefinition,
+ List<MeasurementDataNumericHighLowComposite> data) {
MetricGraphData metricGraphData = new MetricGraphData(resourceGroup.getId(), resourceGroup.getName(),
- measurementDefinition, data);
+ measurementDefinition, data);
MetricStackedBarGraph graph = new MetricStackedBarGraph(metricGraphData);
- ResourceMetricD3Graph graphView = new ResourceMetricD3Graph(extendLocatorId(measurementDefinition.getName()), graph);
+ ResourceMetricD3Graph graphView = new ResourceMetricD3Graph(extendLocatorId(measurementDefinition.getName()),
+ graph);
graphView.setWidth("95%");
- graphView.setHeight(250);
+ graphView.setHeight(225);
addMember(graphView);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
index 116bfed..12a7796 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
@@ -325,7 +325,7 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
viewFactory = (!visibleToIE8) ? null : new ViewFactory() {
@Override
public Canvas createView() {
- return new D3GroupGraphListView(monitoringTab.extendLocatorId("NewGraphs"), groupComposite.getResourceGroup());
+ return new D3GroupGraphListView(monitoringTab.extendLocatorId("NewGraphs"), groupComposite.getResourceGroup(), true);
}
};
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java
index 6e45af9..f8c5dad 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java
@@ -36,6 +36,7 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMetricGraphView;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
+import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
@@ -66,6 +67,7 @@ public class ResourceGroupMetricGraphView extends AbstractMetricGraphView {
@Override
protected void renderGraph() {
if (null == getDefinition()) {
+ Log.debug(" **** Mike Group Metric Graph");
ResourceGroupGWTServiceAsync groupService = GWTServiceLookup.getResourceGroupService();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java
index 1315565..e17bddd 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java
@@ -28,11 +28,8 @@ import java.util.TreeSet;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
-import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
-import org.rhq.core.domain.criteria.AvailabilityCriteria;
-import org.rhq.core.domain.measurement.Availability;
import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.DisplayType;
import org.rhq.core.domain.measurement.MeasurementDefinition;
@@ -41,10 +38,10 @@ import org.rhq.core.domain.measurement.composite.MeasurementOOBComposite;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageList;
-import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.measurement.UserPreferencesMeasurementRangeEditor;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractD3GraphListView;
import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.AvailabilityLineGraphType;
import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.MetricGraphData;
import org.rhq.enterprise.gui.coregui.client.inventory.common.charttype.MetricStackedBarGraph;
@@ -52,7 +49,6 @@ import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTyp
import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.async.Command;
import org.rhq.enterprise.gui.coregui.client.util.async.CountDownLatch;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
* Build the View that shows the individual graph views for multi-graph
@@ -61,20 +57,16 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
*
* @author Mike Thompson
*/
-public class D3GraphListView extends LocatableVLayout {
+public class D3GraphListView extends AbstractD3GraphListView {
private static int NUM_ASYNC_CALLS = 2; // wait for X async calls in Latch
private Resource resource;
private Set<Integer> definitionIds = null;
- private Label loadingLabel = new Label(MSG.common_msg_loading());
private UserPreferencesMeasurementRangeEditor measurementRangeEditor;
private boolean useSummaryData = false;
- private boolean monitorDetailView = false;
- private PageList<Availability> availabilityList;
private PageList<MeasurementOOBComposite> measurementOOBCompositeList;
private List<List<MeasurementDataNumericHighLowComposite>> metricsDataList;
- private AvailabilityD3Graph availabilityGraph;
public static D3GraphListView createMultipleGraphs(String locatorId, Resource resource, Set<Integer> definitionIds,
boolean monitorDetailView) {
@@ -119,41 +111,6 @@ public class D3GraphListView extends LocatableVLayout {
measurementRangeEditor.getSetButton().addClickHandler(clickHandler);
}
- private void queryAvailability(final Resource resource, final CountDownLatch countDownLatch) {
-
- final long startTime = System.currentTimeMillis();
-
- // now return the availability
- AvailabilityCriteria c = new AvailabilityCriteria();
- c.addFilterResourceId(resource.getId());
- c.addFilterInitialAvailability(false);
- c.addSortStartTime(PageOrdering.ASC);
- GWTServiceLookup.getAvailabilityService().findAvailabilityByCriteria(c,
- new AsyncCallback<PageList<Availability>>() {
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_availability_loadFailed(), caught);
- if (countDownLatch != null) {
- countDownLatch.countDown();
- }
- }
-
- @Override
- public void onSuccess(PageList<Availability> availList) {
- Log.debug("\nSuccessfully queried availability in: " + (System.currentTimeMillis() - startTime)
- + " ms.");
- availabilityList = new PageList<Availability>();
- for (Availability availability : availList) {
- availabilityList.add(availability);
- }
- Log.debug("avail list size: " + availabilityList.size());
- if (countDownLatch != null) {
- countDownLatch.countDown();
- }
- }
- });
- }
-
@Override
protected void onDraw() {
super.onDraw();
@@ -162,7 +119,6 @@ public class D3GraphListView extends LocatableVLayout {
addMember(measurementRangeEditor);
if (monitorDetailView) {
- Log.debug("show monitor view");
availabilityGraph = new AvailabilityD3Graph("avail", new AvailabilityLineGraphType(resource.getId()));
// first step in 2 step to create d3 chart
// create a placeholder for avail graph
@@ -191,7 +147,7 @@ public class D3GraphListView extends LocatableVLayout {
final long startTime = startEndList.get(0);
final long endTime = startEndList.get(1);
- queryAvailability(resource, null);
+ queryAvailability(resource.getId(), null);
ResourceTypeRepository.Cache.getInstance().getResourceTypes(resource.getResourceType().getId(),
EnumSet.of(ResourceTypeRepository.MetadataType.measurements),
commit 10c476be0877fcdbe4e48d4c728e34c0d328b512
Author: Mike Thompson <mithomps(a)redhat.com>
Date: Thu Feb 28 11:42:35 2013 -0800
Charting - Move availability call out of latch enabling it to called only once for the resource.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java
index 5bbdb95..1315565 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/D3GraphListView.java
@@ -33,7 +33,6 @@ import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import org.rhq.core.domain.criteria.AvailabilityCriteria;
import org.rhq.core.domain.measurement.Availability;
-import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.DisplayType;
import org.rhq.core.domain.measurement.MeasurementDefinition;
@@ -64,13 +63,12 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
*/
public class D3GraphListView extends LocatableVLayout {
- private static int NUM_ASYNC_CALLS = 3; // wait for X async calls in Latch
+ private static int NUM_ASYNC_CALLS = 2; // wait for X async calls in Latch
private Resource resource;
private Set<Integer> definitionIds = null;
private Label loadingLabel = new Label(MSG.common_msg_loading());
private UserPreferencesMeasurementRangeEditor measurementRangeEditor;
- //private SliderRangeEditor sliderRangeEditor;
private boolean useSummaryData = false;
private boolean monitorDetailView = false;
private PageList<Availability> availabilityList;
@@ -78,12 +76,14 @@ public class D3GraphListView extends LocatableVLayout {
private List<List<MeasurementDataNumericHighLowComposite>> metricsDataList;
private AvailabilityD3Graph availabilityGraph;
- public static D3GraphListView createMultipleGraphs(String locatorId, Resource resource, Set<Integer> definitionIds, boolean monitorDetailView) {
+ public static D3GraphListView createMultipleGraphs(String locatorId, Resource resource, Set<Integer> definitionIds,
+ boolean monitorDetailView) {
return new D3GraphListView(locatorId, resource, definitionIds, monitorDetailView);
}
- public static D3GraphListView createSummaryMultipleGraphs(String locatorId, Resource resource, boolean monitorDetailView) {
+ public static D3GraphListView createSummaryMultipleGraphs(String locatorId, Resource resource,
+ boolean monitorDetailView) {
return new D3GraphListView(locatorId, resource, monitorDetailView);
}
@@ -110,13 +110,11 @@ public class D3GraphListView extends LocatableVLayout {
}
private void commonConstructorSettings() {
- //sliderRangeEditor = new SliderRangeEditor(this.getLocatorId());
measurementRangeEditor = new UserPreferencesMeasurementRangeEditor(this.getLocatorId());
setOverflow(Overflow.AUTO);
}
public void addSetButtonClickHandler(ClickHandler clickHandler) {
- //Log.debug("measurementRangeEditor " + sliderRangeEditor);
Log.debug("measurementRangeEditor " + measurementRangeEditor);
measurementRangeEditor.getSetButton().addClickHandler(clickHandler);
}
@@ -131,45 +129,40 @@ public class D3GraphListView extends LocatableVLayout {
c.addFilterInitialAvailability(false);
c.addSortStartTime(PageOrdering.ASC);
GWTServiceLookup.getAvailabilityService().findAvailabilityByCriteria(c,
- new AsyncCallback<PageList<Availability>>() {
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(
- MSG.view_resource_monitor_availability_loadFailed(), caught);
- if(countDownLatch != null){
- countDownLatch.countDown();
- }
+ new AsyncCallback<PageList<Availability>>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_availability_loadFailed(), caught);
+ if (countDownLatch != null) {
+ countDownLatch.countDown();
}
+ }
- @Override
- public void onSuccess(PageList<Availability> availList) {
- Log.debug("\nSuccessfully queried availability in: "
- + (System.currentTimeMillis() - startTime) + " ms.");
- availabilityList = new PageList<Availability>();
- for (Availability availability : availList) {
- availabilityList.add(availability);
- }
- Log.debug("avail list size: " + availabilityList.size());
- if(countDownLatch != null){
- countDownLatch.countDown();
- }
+ @Override
+ public void onSuccess(PageList<Availability> availList) {
+ Log.debug("\nSuccessfully queried availability in: " + (System.currentTimeMillis() - startTime)
+ + " ms.");
+ availabilityList = new PageList<Availability>();
+ for (Availability availability : availList) {
+ availabilityList.add(availability);
+ }
+ Log.debug("avail list size: " + availabilityList.size());
+ if (countDownLatch != null) {
+ countDownLatch.countDown();
}
- });
+ }
+ });
}
-
@Override
protected void onDraw() {
super.onDraw();
Log.debug("D3GraphListView.onDraw()");
destroyMembers();
-
- //addMember(sliderRangeEditor);
addMember(measurementRangeEditor);
- if(monitorDetailView){
+ if (monitorDetailView) {
Log.debug("show monitor view");
- //List<Long> startEndList = sliderRangeEditor.getBeginEndTimes();
availabilityGraph = new AvailabilityD3Graph("avail", new AvailabilityLineGraphType(resource.getId()));
// first step in 2 step to create d3 chart
// create a placeholder for avail graph
@@ -195,10 +188,11 @@ public class D3GraphListView extends LocatableVLayout {
private void buildGraphs() {
final long startTimer = System.currentTimeMillis();
List<Long> startEndList = measurementRangeEditor.getBeginEndTimes();
- //List<Long> startEndList = sliderRangeEditor.getBeginEndTimes();
final long startTime = startEndList.get(0);
final long endTime = startEndList.get(1);
+ queryAvailability(resource, null);
+
ResourceTypeRepository.Cache.getInstance().getResourceTypes(resource.getResourceType().getId(),
EnumSet.of(ResourceTypeRepository.MetadataType.measurements),
new ResourceTypeRepository.TypeLoadedCallback() {
@@ -263,7 +257,6 @@ public class D3GraphListView extends LocatableVLayout {
});
queryMetricData(measDefIdArray, countDownLatch);
- queryAvailability(resource, countDownLatch);
queryOOBMetrics(resource, countDownLatch);
// now the countDown latch will run sometime asynchronously
@@ -292,12 +285,10 @@ public class D3GraphListView extends LocatableVLayout {
});
}
-
private void queryOOBMetrics(final Resource resource, final CountDownLatch countDownLatch) {
final long startTime = System.currentTimeMillis();
- // now return the availability
GWTServiceLookup.getMeasurementDataService().getHighestNOOBsForResource(resource.getId(), 60,
new AsyncCallback<PageList<MeasurementOOBComposite>>() {
@@ -305,10 +296,10 @@ public class D3GraphListView extends LocatableVLayout {
public void onSuccess(PageList<MeasurementOOBComposite> measurementOOBComposites) {
measurementOOBCompositeList = measurementOOBComposites;
- Log.debug("\nSuccessfully queried OOB data in: "
- + (System.currentTimeMillis() - startTime) + " ms.");
- Log.debug("OOB Data size: "+measurementOOBCompositeList.size());
- if(null != measurementOOBCompositeList){
+ Log.debug("\nSuccessfully queried OOB data in: " + (System.currentTimeMillis() - startTime)
+ + " ms.");
+ Log.debug("OOB Data size: " + measurementOOBCompositeList.size());
+ if (null != measurementOOBCompositeList) {
for (MeasurementOOBComposite measurementOOBComposite : measurementOOBComposites) {
Log.debug("measurementOOBComposite = " + measurementOOBComposite);
}
@@ -344,7 +335,7 @@ public class D3GraphListView extends LocatableVLayout {
int i = 0;
for (MeasurementDefinition measurementDefinition : measurementDefinitions) {
if (summaryIds.contains(measurementDefinition.getId())) {
- buildSingleGraph(availabilityList, measurementOOBCompositeList, measurementDefinition,
+ buildSingleGraph(measurementOOBCompositeList, measurementDefinition,
measurementData.get(i), 225);
}
i++;
@@ -364,13 +355,11 @@ public class D3GraphListView extends LocatableVLayout {
if (null != selectedDefinitionId) {
// single graph case
if (measurementId == selectedDefinitionId) {
- buildSingleGraph(availabilityList, measurementOOBCompositeList, measurementDefinition,
- metric, 225);
+ buildSingleGraph(measurementOOBCompositeList, measurementDefinition, metric, 225);
}
} else {
// multiple graph case
- buildSingleGraph(availabilityList, measurementOOBCompositeList, measurementDefinition,
- metric, 225);
+ buildSingleGraph(measurementOOBCompositeList, measurementDefinition, metric, 225);
}
}
i++;
@@ -380,16 +369,15 @@ public class D3GraphListView extends LocatableVLayout {
}
- private void buildSingleGraph(PageList<Availability> downAvailList,
- PageList<MeasurementOOBComposite> measurementOOBCompositeList, MeasurementDefinition measurementDefinition,
- List<MeasurementDataNumericHighLowComposite> data, int height) {
+ private void buildSingleGraph(PageList<MeasurementOOBComposite> measurementOOBCompositeList,
+ MeasurementDefinition measurementDefinition, List<MeasurementDataNumericHighLowComposite> data, int height) {
MetricGraphData metricGraphData = new MetricGraphData(resource.getId(), resource.getName(),
- measurementDefinition, data, measurementOOBCompositeList);
+ measurementDefinition, data, measurementOOBCompositeList);
MetricStackedBarGraph graph = new MetricStackedBarGraph(metricGraphData);
- ResourceMetricD3Graph graphView = new ResourceMetricD3Graph(
- extendLocatorId(measurementDefinition.getName()), graph);
+ ResourceMetricD3Graph graphView = new ResourceMetricD3Graph(extendLocatorId(measurementDefinition.getName()),
+ graph);
graphView.setWidth("95%");
graphView.setHeight(height);
10 years, 9 months
[rhq] modules/core
by mazz
modules/core/dbutils/pom.xml | 2
modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtilsI18NResourceKeys.java | 5
modules/core/dbutils/src/main/java/org/rhq/core/db/upgrade/BundleVersionOrderUpgradeTask.java | 140 ++++++++++
modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml | 4
4 files changed, 150 insertions(+), 1 deletion(-)
New commits:
commit 9759daf74bf650e13764d80ef8fc4f67d1b8d269
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Feb 28 15:26:10 2013 -0500
[BZ 916380] add java dbupgrade step to fix bundle version ordering
diff --git a/modules/core/dbutils/pom.xml b/modules/core/dbutils/pom.xml
index 109eb3a..a48f2a4 100644
--- a/modules/core/dbutils/pom.xml
+++ b/modules/core/dbutils/pom.xml
@@ -17,7 +17,7 @@
<description>Database schema setup, upgrade and other utilities</description>
<properties>
- <db.schema.version>2.129</db.schema.version>
+ <db.schema.version>2.130</db.schema.version>
<rhq.ds.type-mapping>${rhq.test.ds.type-mapping}</rhq.ds.type-mapping>
<rhq.ds.server-name>${rhq.test.ds.server-name}</rhq.ds.server-name>
<rhq.ds.db-name>${rhq.test.ds.db-name}</rhq.ds.db-name>
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtilsI18NResourceKeys.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtilsI18NResourceKeys.java
index a200076..f74a823 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtilsI18NResourceKeys.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtilsI18NResourceKeys.java
@@ -32,6 +32,11 @@ import mazz.i18n.annotation.I18NResourceBundle;
*/
@I18NResourceBundle(baseName = "dbutils-messages", defaultLocale = "en")
public interface DbUtilsI18NResourceKeys {
+ @I18NMessages({ @I18NMessage("Error: {0}"), @I18NMessage(value = "Fehler: {0}", locale = "de") })
+ String ERROR = "DatabaseType.generic-error";
+
+ @I18NMessages({ @I18NMessage("Message: {0}"), @I18NMessage(value = "Nachricht: {0}", locale = "de") })
+ String MESSAGE = "DatabaseType.generic-message";
@I18NMessages( { @I18NMessage("Executing the following SQL: {0}"),
@I18NMessage(value = "Führe das nachfolgnde SQL aus: {0}", locale = "de") })
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/upgrade/BundleVersionOrderUpgradeTask.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/upgrade/BundleVersionOrderUpgradeTask.java
new file mode 100644
index 0000000..e3b00c3
--- /dev/null
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/upgrade/BundleVersionOrderUpgradeTask.java
@@ -0,0 +1,140 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.core.db.upgrade;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.TreeMap;
+
+import mazz.i18n.Logger;
+
+import org.apache.maven.artifact.versioning.ComparableVersion;
+
+import org.rhq.core.db.DatabaseType;
+import org.rhq.core.db.DbUtilsI18NFactory;
+import org.rhq.core.db.DbUtilsI18NResourceKeys;
+
+/**
+ * Database upgrade task 2.130 to fix BZ 916380 where bundle version orders got disordered when deleting bundles.
+ *
+ * @author John Mazzitelli
+ */
+public class BundleVersionOrderUpgradeTask implements DatabaseUpgradeTask {
+
+ private static final Logger LOG = DbUtilsI18NFactory.getLogger(BundleVersionOrderUpgradeTask.class);
+
+ public void execute(DatabaseType databaseType, Connection connection) throws SQLException {
+ List<Integer> bundleIds = getAllBundleIds(databaseType, connection);
+ if (bundleIds != null && !bundleIds.isEmpty()) {
+ for (Integer bundleId : bundleIds) {
+ List<VersionInfo> versionInfos = getBundleVersions(bundleId, databaseType, connection);
+ if (versionInfos != null && !versionInfos.isEmpty()) {
+
+ // make sure we order the versions properly by comparing version strings
+ TreeMap<ComparableVersion, VersionInfo> ordered = new TreeMap<ComparableVersion, VersionInfo>();
+ for (VersionInfo versionInfo : versionInfos) {
+ ComparableVersion comparableVersion = new ComparableVersion(versionInfo.version);
+ ordered.put(comparableVersion, versionInfo);
+ }
+
+ // now make sure all version ordering is correct - starting from 0 and monotonically increasing
+ int expectedNext = 0;
+ for (VersionInfo orderedBundleVersion : ordered.values()) {
+ if (orderedBundleVersion.versionOrder != expectedNext) {
+ String sql = "UPDATE RHQ_BUNDLE_VERSION SET VERSION_ORDER=" + expectedNext + " WHERE ID="
+ + orderedBundleVersion.id;
+ Statement s = null;
+ try {
+ LOG.debug(DbUtilsI18NResourceKeys.MESSAGE,
+ "Correcting version order for bundle version ID [" + orderedBundleVersion.id + "]");
+ LOG.debug(DbUtilsI18NResourceKeys.EXECUTING_SQL, sql);
+ s = connection.createStatement();
+ int rowsUpdated = s.executeUpdate(sql);
+ if (rowsUpdated != 1) {
+ LOG.error(DbUtilsI18NResourceKeys.ERROR,
+ "Failed to update version order for bundle version ID ["
+ + orderedBundleVersion.id + "]. Will continue but problems may persist.");
+ }
+ } finally {
+ databaseType.closeStatement(s);
+ }
+ }
+ expectedNext++;
+ }
+ }
+ }
+ } else {
+ LOG.debug(DbUtilsI18NResourceKeys.MESSAGE, "No bundles exist - nothing to fix.");
+ }
+ }
+
+ private List<Integer> getAllBundleIds(DatabaseType databaseType, Connection connection) throws SQLException {
+ List<Integer> ids = new ArrayList<Integer>();
+ Statement s = null;
+ try {
+ String sql = "SELECT ID FROM RHQ_BUNDLE";
+ LOG.debug(DbUtilsI18NResourceKeys.EXECUTING_SQL, sql);
+
+ s = connection.createStatement();
+ ResultSet rs = s.executeQuery(sql);
+
+ while (rs.next()) {
+ int id = rs.getInt(1);
+ ids.add(Integer.valueOf(id));
+ }
+ } finally {
+ databaseType.closeStatement(s);
+ }
+ return ids;
+ }
+
+ private List<VersionInfo> getBundleVersions(int bundleId, DatabaseType databaseType, Connection connection)
+ throws SQLException {
+ List<VersionInfo> infos = new ArrayList<VersionInfo>();
+ Statement s = null;
+ try {
+ String sql = "SELECT ID, VERSION_ORDER, VERSION FROM RHQ_BUNDLE_VERSION WHERE BUNDLE_ID = " + bundleId;
+ LOG.debug(DbUtilsI18NResourceKeys.EXECUTING_SQL, sql);
+
+ s = connection.createStatement();
+ ResultSet rs = s.executeQuery(sql);
+
+ while (rs.next()) {
+ VersionInfo info = new VersionInfo();
+ info.id = rs.getInt(1);
+ info.versionOrder = rs.getInt(2);
+ info.version = rs.getString(3);
+ infos.add(info);
+ }
+ } finally {
+ databaseType.closeStatement(s);
+ }
+ return infos;
+ }
+
+ private class VersionInfo {
+ int id;
+ int versionOrder;
+ String version;
+ }
+}
\ No newline at end of file
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index 936c7bf..33388ce 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -2010,6 +2010,10 @@
</schema-directSQL>
</schemaSpec>
+ <!-- BZ 916380 -->
+ <schemaSpec version="2.130">
+ <schema-javaTask className="BundleVersionOrderUpgradeTask" />
+ </schemaSpec>
</dbupgrade>
</target>
10 years, 9 months
[rhq] modules/core
by Thomas Segismont
modules/core/native-system/src/test/java/org/rhq/core/system/DeadProcessInfoRefreshTest.java | 59 +++++-----
modules/core/native-system/src/test/resources/org/rhq/core/system/bash-watch-echo.sh | 7 -
modules/core/native-system/src/test/resources/org/rhq/core/system/win-watch-echo.bat | 5
3 files changed, 30 insertions(+), 41 deletions(-)
New commits:
commit b63460a52459b4bd6515bf7176621e8c8c9f4091
Author: Thomas Segismont <tsegismo(a)redhat.com>
Date: Thu Feb 28 21:24:26 2013 +0100
Fix DeadProcessInfoRefreshTest (will now work on all platforms)
diff --git a/modules/core/native-system/src/test/java/org/rhq/core/system/DeadProcessInfoRefreshTest.java b/modules/core/native-system/src/test/java/org/rhq/core/system/DeadProcessInfoRefreshTest.java
index b8d7d74..9ee811e 100644
--- a/modules/core/native-system/src/test/java/org/rhq/core/system/DeadProcessInfoRefreshTest.java
+++ b/modules/core/native-system/src/test/java/org/rhq/core/system/DeadProcessInfoRefreshTest.java
@@ -23,25 +23,33 @@ package org.rhq.core.system;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.util.ArrayList;
import java.util.List;
-import org.hyperic.sigar.OperatingSystem;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
-import org.rhq.core.util.stream.StreamUtil;
-
/**
* @author Thomas Segismont
*/
public class DeadProcessInfoRefreshTest {
- private static final String KNOWN_ARG = "hellosigar";
+ private static final class SampleProgram {
+
+ @SuppressWarnings("unused")
+ public static void main(String[] args) {
+ while (true) {
+ try {
+ Thread.sleep(5000);
+ } catch (Exception ignore) {
+ }
+ }
+ }
+
+ }
+
+ private static final String SAMPLE_PROGRAM_NAME = SampleProgram.class.getName();
private Process testProcess;
@@ -54,33 +62,26 @@ public class DeadProcessInfoRefreshTest {
throw new RuntimeException("Test process is not alive");
}
NativeSystemInfo systemInfo = new NativeSystemInfo();
- List<ProcessInfo> foundProcesses = systemInfo.getProcesses("arg|" + KNOWN_ARG + "|match=.*");
+ List<ProcessInfo> foundProcesses = systemInfo.getProcesses("arg|" + SAMPLE_PROGRAM_NAME + "|match=.*");
if (foundProcesses.size() != 1) {
- throw new RuntimeException("Found " + foundProcesses.size() + " with arg [" + KNOWN_ARG + "]");
+ throw new RuntimeException("Found " + foundProcesses.size() + " processes with arg ["
+ + SampleProgram.class.getName() + "]");
}
testProcessInfo = foundProcesses.iterator().next();
}
private Process createTestProcess() throws Exception {
- if (OperatingSystem.IS_WIN32) {
- // On Windows run a simple bat file which behaves like 'watch echo'
- File batFile = File.createTempFile("win-watch-echo", ".bat");
- batFile.deleteOnExit();
- InputStream is = getClass().getClassLoader().getResourceAsStream("org/rhq/core/system/win-watch-echo.bat");
- OutputStream os = new FileOutputStream(batFile);
- StreamUtil.copy(is, os, true);
- ProcessBuilder processBuilder = new ProcessBuilder("cmd", batFile.getAbsolutePath(), KNOWN_ARG);
- return processBuilder.start();
- } else {
- // On other systems run a simple bash file which behaves like 'watch echo'
- File bashFile = File.createTempFile("bash-watch-echo", ".sh");
- bashFile.deleteOnExit();
- InputStream is = getClass().getClassLoader().getResourceAsStream("org/rhq/core/system/bash-watch-echo.sh");
- OutputStream os = new FileOutputStream(bashFile);
- StreamUtil.copy(is, os, true);
- ProcessBuilder processBuilder = new ProcessBuilder("bash", bashFile.getAbsolutePath(), KNOWN_ARG);
- return processBuilder.start();
- }
+ String javaHome = System.getProperty("java.home");
+ String javaCmd = javaHome + "/bin/java";
+ List<String> args = new ArrayList<String>();
+ args.add(javaCmd);
+ args.add("-cp");
+ args.add("target/test-classes");
+ args.add(SampleProgram.class.getName());
+ ProcessBuilder processBuilder = new ProcessBuilder(args);
+ processBuilder.inheritIO();
+ Process process = processBuilder.start();
+ return process;
}
@AfterTest(alwaysRun = true)
diff --git a/modules/core/native-system/src/test/resources/org/rhq/core/system/bash-watch-echo.sh b/modules/core/native-system/src/test/resources/org/rhq/core/system/bash-watch-echo.sh
deleted file mode 100644
index 7d0f4c0..0000000
--- a/modules/core/native-system/src/test/resources/org/rhq/core/system/bash-watch-echo.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-while :
-do
- echo $1
- sleep 1
-done
diff --git a/modules/core/native-system/src/test/resources/org/rhq/core/system/win-watch-echo.bat b/modules/core/native-system/src/test/resources/org/rhq/core/system/win-watch-echo.bat
deleted file mode 100644
index 4404159..0000000
--- a/modules/core/native-system/src/test/resources/org/rhq/core/system/win-watch-echo.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@ECHO OFF
-:loop
- echo %1
- timeout /t 2
-goto loop
10 years, 9 months
[rhq] Branch 'feature/cassandra-backend' - modules/common modules/helpers
by John Sanda
modules/common/cassandra-ccm/cassandra-ccm-core/pom.xml | 2
modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms | 46 ------
modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh | 47 ++++++
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java | 71 ++++++----
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorCLI.java | 45 ++++++
modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/StatsCollector.java | 4
modules/helpers/metrics-simulator/src/main/scripts/assembly.xml | 2
modules/helpers/metrics-simulator/src/test/java/org/rhq/metrics/simulator/SimulatorTest.java | 7
8 files changed, 146 insertions(+), 78 deletions(-)
New commits:
commit 621335689754b6ebd4e0fa985f19f3ef59b2f881
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Feb 28 14:36:11 2013 -0500
more clean up for running the simulator from the command line
diff --git a/modules/common/cassandra-ccm/cassandra-ccm-core/pom.xml b/modules/common/cassandra-ccm/cassandra-ccm-core/pom.xml
index 82530a7..73c8e44 100644
--- a/modules/common/cassandra-ccm/cassandra-ccm-core/pom.xml
+++ b/modules/common/cassandra-ccm/cassandra-ccm-core/pom.xml
@@ -89,7 +89,7 @@
<delimiters>
<delimiter>${*}</delimiter>
</delimiters>
- <escapeString>\</escapeString>
+ <escapeString>[escape]</escapeString>
</configuration>
</plugin>
diff --git a/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms b/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms
deleted file mode 100755
index e4388a7..0000000
--- a/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/bash
-
-_DOLLARZERO=`readlink "$0" 2>/dev/null || echo "$0"`
-RHQ_MS_BIN_DIR_PATH=`dirname "$_DOLLARZERO"`
-
-if [ -z "$RHQ_MS_HOME" ]; then
- cd $RHQ_MS_BIN_DIR_PATH/..
-fi
-
-RHQ_MS_HOME=`pwd`
-
-prepare_java()
-{
- if [ -z "$JAVA_HOME" ]; then
- echo "$JAVA_HOME must be set"
- exit 1
- fi
- RHQ_MS_JAVA_EXE=$JAVA_HOME/bin/java
-}
-
-prepare_classpath()
-{
- RHQ_MS_CLASSPATH="$RHQ_MS_HOME/conf"
- lib_dir=`cd "$RHQ_MS_HOME/lib";ls -1 *.jar`
- for jar in $lib_dir ; do
- RHQ_MS_CLASSPATH="$RHQ_MS_CLASSPATH:$RHQ_MS_HOME/lib/$jar"
- done
-}
-
-prepare_java_opts()
-{
- if [ -z "$RHQ_MS_JAVA_OPTS" ]; then
- RHQ_MS_JAVA_OPTS="-Xms64M -Xmx64M -Djava.net.preferIPv4Stack=true"
- fi
-}
-
-launch_simulator()
-{
- class="org.rhq.metrics.simulator.Simulator"
- $RHQ_MS_JAVA_EXE $JAVA_OPTS -cp "$RHQ_MS_CLASSPATH" org.rhq.metrics.simulator.SimulatorCLI "$@"
-}
-
-prepare_java
-prepare_classpath
-prepare_java_opts
-launch_simulator
diff --git a/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh b/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh
new file mode 100644
index 0000000..32319ee
--- /dev/null
+++ b/modules/helpers/metrics-simulator/src/main/assembly/bin/rhq-ms.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+_DOLLARZERO=`readlink "$0" 2>/dev/null || echo "$0"`
+RHQ_MS_BIN_DIR_PATH=`dirname "$_DOLLARZERO"`
+
+if [ -z "$RHQ_MS_HOME" ]; then
+ pushd $RHQ_MS_BIN_DIR_PATH/..
+fi
+RHQ_MS_HOME=`pwd`
+popd
+
+prepare_java()
+{
+ if [ -z "$JAVA_HOME" ]; then
+ echo "$JAVA_HOME must be set"
+ exit 1
+ fi
+ RHQ_MS_JAVA_EXE=$JAVA_HOME/bin/java
+}
+
+prepare_classpath()
+{
+ RHQ_MS_CLASSPATH="$RHQ_MS_HOME/conf"
+ lib_dir=`cd "$RHQ_MS_HOME/lib";ls -1 *.jar`
+ for jar in $lib_dir ; do
+ RHQ_MS_CLASSPATH="$RHQ_MS_CLASSPATH:$RHQ_MS_HOME/lib/$jar"
+ done
+}
+
+prepare_java_opts()
+{
+ if [ -z "$RHQ_MS_JAVA_OPTS" ]; then
+ RHQ_MS_JAVA_OPTS="-Xms64M -Xmx64M -Djava.net.preferIPv4Stack=true"
+ fi
+}
+
+launch_simulator()
+{
+ $RHQ_MS_JAVA_EXE $JAVA_OPTS $RHQ_MS_ADDITIONAL_JAVA_OPTS -cp "$RHQ_MS_CLASSPATH" org.rhq.metrics.simulator.SimulatorCLI "$@" &
+}
+
+source "$RHQ_MS_HOME/bin/rhq-ms-env.sh"
+
+prepare_java
+prepare_classpath
+prepare_java_opts
+launch_simulator $@
diff --git a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java
index 53d2a5e..5d9bfeb 100644
--- a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java
+++ b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/Simulator.java
@@ -55,7 +55,6 @@ import org.rhq.cassandra.schema.SchemaManager;
import org.rhq.metrics.simulator.plan.ClusterConfig;
import org.rhq.metrics.simulator.plan.ScheduleGroup;
import org.rhq.metrics.simulator.plan.SimulationPlan;
-import org.rhq.metrics.simulator.plan.SimulationPlanner;
import org.rhq.server.metrics.DateTimeService;
import org.rhq.server.metrics.MetricsServer;
@@ -66,15 +65,9 @@ public class Simulator {
private final Log log = LogFactory.getLog(Simulator.class);
- public void run(File jsonFile) throws Exception {
- SimulationPlanner planner = new SimulationPlanner();
- SimulationPlan plan = planner.create(jsonFile);
-
- List<CassandraNode> nodes = deployCluster(plan.getClusterConfig());
- waitForClusterToInitialize(nodes);
-
+ public void run(SimulationPlan plan) {
+ List<CassandraNode> nodes = initCluster(plan);
createSchema(nodes);
-
Session session = createSession();
MetricsServer metricsServer = new MetricsServer();
@@ -95,7 +88,8 @@ public class Simulator {
Stats stats = new Stats();
StatsCollector statsCollector = new StatsCollector(stats);
- ScheduledExecutorService executorService = Executors.newScheduledThreadPool(plan.getThreadPoolSize());
+ ScheduledExecutorService executorService = Executors.newScheduledThreadPool(plan.getThreadPoolSize(),
+ new SimulatorThreadFactory());
log.info("Starting executor service");
executorService.scheduleAtFixedRate(statsCollector, 0, 1, TimeUnit.MINUTES);
@@ -120,7 +114,26 @@ public class Simulator {
}
log.info("Shutting down executor service");
executorService.shutdown();
- executorService.awaitTermination(5, TimeUnit.SECONDS);
+ try {
+ executorService.awaitTermination(5, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ }
+ if (!executorService.isTerminated()) {
+ log.info("Forcing executor service shutdown.");
+ executorService.shutdownNow();
+ }
+ log.info("Shut down complete");
+ System.exit(0);
+ }
+
+ private List<CassandraNode> initCluster(SimulationPlan plan) {
+ try {
+ List<CassandraNode> nodes = deployCluster(plan.getClusterConfig());
+ waitForClusterToInitialize(nodes);
+ return nodes;
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to start simulator. Cluster initialization failed.", e);
+ }
}
private List<CassandraNode> deployCluster(ClusterConfig clusterConfig) throws IOException {
@@ -148,23 +161,31 @@ public class Simulator {
}
private void createSchema(List<CassandraNode> nodes) {
- log.info("Creating schema");
- SchemaManager schemaManager = new SchemaManager("rhqadmin", "rhqadmin", nodes);
- schemaManager.createSchema();
- schemaManager.updateSchema();
+ try {
+ log.info("Creating schema");
+ SchemaManager schemaManager = new SchemaManager("rhqadmin", "rhqadmin", nodes);
+ schemaManager.createSchema();
+ schemaManager.updateSchema();
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to start simulator. An error occurred during schema creation.", e);
+ }
}
private Session createSession() throws NoHostAvailableException {
- SimpleAuthInfoProvider authInfoProvider = new SimpleAuthInfoProvider();
- authInfoProvider.add("username", "rhqadmin").add("password", "rhqadmin");
-
- Cluster cluster = Cluster.builder()
- .addContactPoints("127.0.0.1", "127.0.0.2")
- .withAuthInfoProvider(authInfoProvider)
- .withCompression(SNAPPY)
- .build();
-
- return cluster.connect("rhq");
+ try {
+ SimpleAuthInfoProvider authInfoProvider = new SimpleAuthInfoProvider();
+ authInfoProvider.add("username", "rhqadmin").add("password", "rhqadmin");
+
+ Cluster cluster = Cluster.builder()
+ .addContactPoints("127.0.0.1", "127.0.0.2")
+ .withAuthInfoProvider(authInfoProvider)
+ .withCompression(SNAPPY)
+ .build();
+
+ return cluster.connect("rhq");
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to start simulator. Unable to create " + Session.class, e);
+ }
}
private Set<Schedule> initSchedules(ScheduleGroup scheduleSet) {
diff --git a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorCLI.java b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorCLI.java
index 93bb582..d31398a 100644
--- a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorCLI.java
+++ b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/SimulatorCLI.java
@@ -25,9 +25,18 @@
package org.rhq.metrics.simulator;
+import java.io.File;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
+
+import org.rhq.metrics.simulator.plan.SimulationPlan;
+import org.rhq.metrics.simulator.plan.SimulationPlanner;
/**
* @author John Sanda
@@ -51,6 +60,20 @@ public class SimulatorCLI {
printUsage();
System.exit(1);
}
+ try {
+ CommandLineParser parser = new PosixParser();
+ CommandLine cmdLine = parser.parse(options, args);
+
+ if (cmdLine.hasOption("h")) {
+ printUsage();
+ } else if (cmdLine.hasOption("s")) {
+ runSimulator(cmdLine.getOptionValue("s"));
+ } else {
+ printUsage();
+ }
+ } catch (ParseException e) {
+ printUsage();
+ }
}
public void printUsage() {
@@ -62,6 +85,28 @@ public class SimulatorCLI {
helpFormatter.printHelp(syntax, header, options, null);
}
+ public void runSimulator(String file) {
+ File planFile = new File(file);
+ if (!planFile.exists()) {
+ throw new RuntimeException("Simulation file [" + file + "] does not exist.");
+ }
+ if (planFile.isDirectory()) {
+ throw new RuntimeException("[" + file + "] is a directory. The --simulation argument must refer to a " +
+ "file.");
+ }
+
+ SimulationPlanner planner = new SimulationPlanner();
+ SimulationPlan plan = null;
+ try {
+ plan = planner.create(planFile);
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to create simulation: " + e.getMessage(), e);
+ }
+
+ Simulator simulator = new Simulator();
+ simulator.run(plan);
+ }
+
public static void main(String[] args) {
SimulatorCLI cli = new SimulatorCLI();
cli.exec(args);
diff --git a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/StatsCollector.java b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/StatsCollector.java
index 665302a..7f2c35e 100644
--- a/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/StatsCollector.java
+++ b/modules/helpers/metrics-simulator/src/main/java/org/rhq/metrics/simulator/StatsCollector.java
@@ -69,8 +69,4 @@ public class StatsCollector implements Runnable {
"Standard Deviation: " + insertionTimes.getStandardDeviation());
}
- public void logSummary() {
-// log.info("Summary of raw data inserts/minute\n" + stats.getAggregateSummary());
-// log.info("Summary of raw data insertion times in milliseconds\n" + stats.getRawDataInsertTimes());
- }
}
diff --git a/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml b/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml
index 6bee585..ec1a459 100644
--- a/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml
+++ b/modules/helpers/metrics-simulator/src/main/scripts/assembly.xml
@@ -9,7 +9,7 @@
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
- <baseDirectory>rhq-bundle-deployer-${project.version}</baseDirectory> <!-- matches the zip when it is renamed in rhq-container.build.xml -->
+ <baseDirectory>rhq-metrics-simulator-${project.version}</baseDirectory> <!-- matches the zip when it is renamed in rhq-container.build.xml -->
<fileSets>
diff --git a/modules/helpers/metrics-simulator/src/test/java/org/rhq/metrics/simulator/SimulatorTest.java b/modules/helpers/metrics-simulator/src/test/java/org/rhq/metrics/simulator/SimulatorTest.java
index 9f6f517..f01051d 100644
--- a/modules/helpers/metrics-simulator/src/test/java/org/rhq/metrics/simulator/SimulatorTest.java
+++ b/modules/helpers/metrics-simulator/src/test/java/org/rhq/metrics/simulator/SimulatorTest.java
@@ -27,6 +27,9 @@ import java.io.File;
import org.testng.annotations.Test;
+import org.rhq.metrics.simulator.plan.SimulationPlan;
+import org.rhq.metrics.simulator.plan.SimulationPlanner;
+
/**
* @author John Sanda
*/
@@ -35,8 +38,10 @@ public class SimulatorTest {
@Test
public void runSimulator() throws Exception {
File jsonFile = new File(getClass().getResource("test-simulator.json").toURI());
+ SimulationPlanner planner = new SimulationPlanner();
+ SimulationPlan plan = planner.create(jsonFile);
Simulator simulator = new Simulator();
- simulator.run(jsonFile);
+ simulator.run(plan);
}
}
10 years, 9 months
[rhq] .classpath modules/enterprise
by Thomas Segismont
.classpath | 4
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java | 174 ++++++++--
2 files changed, 158 insertions(+), 20 deletions(-)
New commits:
commit 3bb788b5b3d472e1500df7b4bec304814a45bcac
Author: Thomas Segismont <tsegismo(a)redhat.com>
Date: Thu Feb 28 18:38:03 2013 +0100
Better coverage of SubjectManagerBean following criteria API changes
diff --git a/.classpath b/.classpath
index f6ced85..1a0df52 100644
--- a/.classpath
+++ b/.classpath
@@ -218,7 +218,7 @@
<classpathentry exported="true" kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/tomcat/tomcat-jk/4.1.31/tomcat-jk-4.1.31.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/jdom/jdom/1.0/jdom-1.0.jar"/>
- <classpathentry exported="true" kind="var" path="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/>
+ <classpathentry exported="true" kind="var" path="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2.jar" sourcepath="/M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2-sources.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar" sourcepath="/M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0-sources.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/jboss/jboss-jmx/4.2.3.GA/jboss-jmx-4.2.3.GA.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/tomcat/catalina/5.5.20/catalina-5.5.20.jar"/>
@@ -344,7 +344,7 @@
<classpathentry exported="true" kind="var" path="M2_REPO/javax/enterprise/cdi-api/1.0-SP4/cdi-api-1.0-SP4.jar" sourcepath="M2_REPO/javax/enterprise/cdi-api/1.0-SP4/cdi-api-1.0-SP4-sources.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" sourcepath="M2_REPO/javax/inject/javax.inject/1/javax.inject-1-sources.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/org/mozilla/rhino/1.7R4/rhino-1.7R4.jar"/>
- <classpathentry exported="true" kind="var" path="M2_REPO/org/picketbox/picketbox/4.0.7.Final/picketbox-4.0.7.Final.jar"/>
+ <classpathentry exported="true" kind="var" path="M2_REPO/org/picketbox/picketbox/4.0.7.Final/picketbox-4.0.7.Final.jar" sourcepath="/M2_REPO/org/picketbox/picketbox/4.0.7.Final/picketbox-4.0.7.Final-sources.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/org/python/jython-standalone/2.5.2/jython-standalone-2.5.2.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/wordnik/swagger-annotations_2.9.1/1.1.1-SNAPSHOT/swagger-annotations_2.9.1-1.1.1-20121031.024335-6.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/joda-time/joda-time/2.1/joda-time-2.1.jar"/>
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
index fe7691d..4b17dc5 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
@@ -25,11 +25,14 @@ import java.util.List;
import java.util.Set;
import java.util.UUID;
+import javax.ejb.EJBException;
import javax.persistence.EntityManager;
import javax.security.auth.login.LoginException;
import javax.transaction.NotSupportedException;
import javax.transaction.SystemException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.testng.annotations.Test;
import org.rhq.core.domain.auth.Subject;
@@ -48,6 +51,7 @@ import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
import org.rhq.enterprise.server.authz.PermissionException;
import org.rhq.enterprise.server.authz.RoleManagerLocal;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
+import org.rhq.enterprise.server.test.TransactionCallback;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.enterprise.server.util.SessionTestHelper;
@@ -57,18 +61,27 @@ import org.rhq.enterprise.server.util.SessionTestHelper;
@Test
public class SubjectManagerBeanTest extends AbstractEJB3Test {
+ private static final Log LOG = LogFactory.getLog(SubjectManagerBeanTest.class);
+
+ private static final String RHQADMIN = "rhqadmin";
+
+ private static final String ITEST_USER = "smb_itest_user";
+
private SubjectManagerLocal subjectManager;
private AuthorizationManagerLocal authorizationManager;
private RoleManagerLocal roleManager;
- /**
- * Prepares things for the entire test class.
- */
@Override
protected void beforeMethod() {
subjectManager = LookupUtil.getSubjectManager();
authorizationManager = LookupUtil.getAuthorizationManager();
roleManager = LookupUtil.getRoleManager();
+ createITestSubject();
+ }
+
+ private Subject createITestSubject() {
+ Subject subjectToCreate = new Subject(ITEST_USER, true, false);
+ return subjectManager.createSubject(subjectManager.getOverlord(), subjectToCreate, ITEST_USER);
}
/**
@@ -76,11 +89,14 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
*/
@Override
protected void afterMethod() {
+ deleteITestSubject();
+
// create a list of all users we know our tests have used
List<String> usernames = new ArrayList<String>();
usernames.add("admin");
- usernames.add("rhqadmin");
+ usernames.add(RHQADMIN);
usernames.add("new_user");
+ usernames.add(ITEST_USER);
SessionManager session_manager = SessionManager.getInstance();
@@ -95,6 +111,13 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
}
}
+ private void deleteITestSubject() {
+ Subject subject = subjectManager.getSubjectByName(ITEST_USER);
+ if (subject != null) {
+ subjectManager.deleteSubjects(subjectManager.getOverlord(), new int[] { subject.getId() });
+ }
+ }
+
/**
* Tests persisting and retrieving user configuration.
*
@@ -173,7 +196,7 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().begin();
try {
superuser = subjectManager.getOverlord();
- rhqadmin = subjectManager.getSubjectByName("rhqadmin");
+ rhqadmin = subjectManager.getSubjectByName(RHQADMIN);
rhqadmin = createSession(rhqadmin);
try {
@@ -214,7 +237,7 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
try {
superuser = subjectManager.getOverlord();
superuser = createSession(superuser);
- rhqadmin = subjectManager.getSubjectByName("rhqadmin");
+ rhqadmin = subjectManager.getSubjectByName(RHQADMIN);
rhqadmin = createSession(rhqadmin);
try {
@@ -268,9 +291,9 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
assert authorizationManager.getExplicitGlobalPermissions(superuser).containsAll(all_global_perms);
// get the rhqadmin subject
- Subject rhqadmin = subjectManager.getSubjectByName("rhqadmin");
+ Subject rhqadmin = subjectManager.getSubjectByName(RHQADMIN);
assert rhqadmin.getId() == 2;
- assert rhqadmin.getName().equals("rhqadmin");
+ assert rhqadmin.getName().equals(RHQADMIN);
assert authorizationManager.getExplicitGlobalPermissions(rhqadmin).containsAll(all_global_perms);
rhqadmin = createSession(rhqadmin); // our test needs to ensure the rhqadmin user has a session
@@ -286,7 +309,7 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
Subject subject = null;
try {
- subject = subjectManager.loginUnauthenticated("rhqadmin");
+ subject = subjectManager.loginUnauthenticated(RHQADMIN);
} catch (Exception e) {
assert false : "There must be at least rhqadmin user";
}
@@ -441,30 +464,30 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().begin();
try {
- Subject subject1 = subjectManager.loginUnauthenticated("rhqadmin");
+ Subject subject1 = subjectManager.loginUnauthenticated(RHQADMIN);
int session1 = subject1.getSessionId();
Thread.sleep(500); // just wait a bit
- Subject subject2 = subjectManager.loginUnauthenticated("rhqadmin");
+ Subject subject2 = subjectManager.loginUnauthenticated(RHQADMIN);
int session2 = subject2.getSessionId();
assert session1 != session2 : "The same sessionId should never be assigned when logging in twice";
assert subject1.equals(subject2);
- Subject s = subjectManager.getSubjectByNameAndSessionId("rhqadmin", subject1.getSessionId());
+ Subject s = subjectManager.getSubjectByNameAndSessionId(RHQADMIN, subject1.getSessionId());
assert s.getSessionId() == session1;
- s = subjectManager.getSubjectByNameAndSessionId("rhqadmin", subject2.getSessionId());
+ s = subjectManager.getSubjectByNameAndSessionId(RHQADMIN, subject2.getSessionId());
assert s.getSessionId() == session2;
subjectManager.logout(session1);
try {
- s = subjectManager.getSubjectByNameAndSessionId("rhqadmin", subject1.getSessionId());
+ s = subjectManager.getSubjectByNameAndSessionId(RHQADMIN, subject1.getSessionId());
assert false : "Session should be invalid";
} catch (SessionNotFoundException ok) {
}
- s = subjectManager.getSubjectByNameAndSessionId("rhqadmin", subject2.getSessionId());
+ s = subjectManager.getSubjectByNameAndSessionId(RHQADMIN, subject2.getSessionId());
assert s.getSessionId() == session2;
// this should ne a no-op, no exception
@@ -472,7 +495,7 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
subjectManager.logout(session2);
try {
- s = subjectManager.getSubjectByNameAndSessionId("rhqadmin", subject2.getSessionId());
+ s = subjectManager.getSubjectByNameAndSessionId(RHQADMIN, subject2.getSessionId());
fail("Session should be invalid");
} catch (SessionNotFoundException e) {
// expected
@@ -521,7 +544,7 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
try {
Subject overlord = subjectManager.getOverlord();
- Subject rhqadmin = subjectManager.getSubjectByName("rhqadmin");
+ Subject rhqadmin = subjectManager.getSubjectByName(RHQADMIN);
Role roleWithViewUsersPerm = new Role("role" + UUID.randomUUID());
roleWithViewUsersPerm.addPermission(Permission.VIEW_USERS);
@@ -552,7 +575,7 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
try {
Subject overlord = subjectManager.getOverlord();
- Subject rhqadmin = subjectManager.getSubjectByName("rhqadmin");
+ Subject rhqadmin = subjectManager.getSubjectByName(RHQADMIN);
rhqadmin = subjectManager.loginUnauthenticated(rhqadmin.getName());
Subject anotherSubject = new Subject("subject" + UUID.randomUUID(), true, false);
@@ -618,4 +641,119 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
}
}
+ public void subjectCannotUpdateAnotherSubjectWithoutPermission() throws LoginException {
+ executeInTransaction(new TransactionCallback() {
+
+ @Override
+ public void execute() throws Exception {
+ Subject fakeSubject = new Subject("fakeUser", true, false);
+ Subject itestSubject = subjectManager.loginUnauthenticated(ITEST_USER);
+ try {
+ subjectManager.updateSubject(itestSubject, fakeSubject, "newPassword");
+ fail("Subject without permission should not be able to update another subject");
+ } catch (PermissionException e) {
+ assertTrue(e.getMessage().contains("do not have permission to update user"));
+ }
+ }
+ });
+ }
+
+ public void nobodyCanDisableASystemSubject() {
+ executeInTransaction(new TransactionCallback() {
+
+ @Override
+ public void execute() throws Exception {
+ Subject rhqAdminSubject = subjectManager.getSubjectByName(RHQADMIN);
+ try {
+ Subject changedSubject = new Subject(rhqAdminSubject.getName(), false, rhqAdminSubject.getFsystem());
+ changedSubject.setId(rhqAdminSubject.getId());
+ subjectManager.updateSubject(subjectManager.getOverlord(), changedSubject, "newPassword");
+ fail("Nobody should be able to disable a system subject");
+ } catch (PermissionException e) {
+ assertTrue(e.getMessage().startsWith("You cannot disable the system user"));
+ }
+ }
+ });
+ }
+
+ public void nobodyCanChangeASubjectName() {
+ executeInTransaction(new TransactionCallback() {
+
+ @Override
+ public void execute() throws Exception {
+ Subject itestSubject = subjectManager.getSubjectByName(ITEST_USER);
+ Subject changedSubject = new Subject("pipo", itestSubject.getFactive(), itestSubject.getFsystem());
+ changedSubject.setId(itestSubject.getId());
+ try {
+ subjectManager.updateSubject(subjectManager.getOverlord(), changedSubject, "newPassword");
+ fail("Nobody should be able to change a subject name");
+ } catch (EJBException e) {
+ Exception cause = e.getCausedByException();
+ assertEquals(IllegalArgumentException.class, cause.getClass());
+ assertTrue(cause.getMessage().equals("You cannot change a user's username."));
+ }
+ }
+ });
+ }
+
+ public void nobodyCanChangeAnUnknowSubject() {
+ executeInTransaction(new TransactionCallback() {
+
+ @Override
+ public void execute() throws Exception {
+ try {
+ Subject fakeSubject = new Subject("fakeUser", true, false);
+ subjectManager.updateSubject(subjectManager.getOverlord(), fakeSubject, "newPassword");
+ fail("Nobody should be able to change an unknown subject");
+ } catch (EJBException e) {
+ Exception cause = e.getCausedByException();
+ assertEquals(IllegalArgumentException.class, cause.getClass());
+ assertTrue(cause.getMessage().startsWith("No user exists with id"));
+ }
+ }
+ });
+ }
+
+ public void subjectCanUpdateItself() {
+ executeInTransaction(new TransactionCallback() {
+
+ @Override
+ public void execute() throws Exception {
+ Subject itestSubject = subjectManager.loginUnauthenticated(ITEST_USER);
+ Subject changedSubject = new Subject(itestSubject.getName(), itestSubject.getFactive(),
+ itestSubject.getFsystem());
+ changedSubject.setId(itestSubject.getId());
+ changedSubject.setEmailAddress("pipo(a)molo.com");
+ try {
+ changedSubject = subjectManager.updateSubject(itestSubject, changedSubject, "newPassword");
+ assertEquals("pipo(a)molo.com", changedSubject.getEmailAddress());
+ } catch (Exception e) {
+ LOG.error(e);
+ fail("Subject should be able to update itself");
+ }
+ }
+ });
+ }
+
+ public void subjectWhitoutManageSecurityPermissionCannotUpdateItsRoles() throws LoginException {
+ executeInTransaction(new TransactionCallback() {
+
+ @Override
+ public void execute() throws Exception {
+ Subject itestSubject = subjectManager.loginUnauthenticated(ITEST_USER);
+ final PageList<Role> allRoles = roleManager.findRoles(PageControl.getUnlimitedInstance());
+ Subject changedSubject = new Subject(itestSubject.getName(), itestSubject.getFactive(),
+ itestSubject.getFsystem());
+ changedSubject.setId(itestSubject.getId());
+ changedSubject.getRoles().addAll(allRoles);
+ try {
+ subjectManager.updateSubject(itestSubject, changedSubject, "newPassword");
+ fail("Subject whitout " + Permission.MANAGE_SECURITY
+ + " permission should not be able to update its roles");
+ } catch (PermissionException e) {
+ assertTrue(e.getMessage().contains("is not authorized for"));
+ }
+ }
+ });
+ }
}
\ No newline at end of file
10 years, 9 months
[rhq] 2 commits - modules/enterprise
by Simeon Pinder
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java | 48 +++++++
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java | 66 ++++++++++
2 files changed, 114 insertions(+)
New commits:
commit 69de100614c9dcd0be575c6622775c6d20a6f7ec
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Thu Feb 28 09:27:08 2013 -0500
Add new test exercising criteriQuery change, ConfigurationManagerBean and increasing code coverage that was lacking.
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
index 7d0343b..700cfc5 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.server.configuration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -41,6 +42,10 @@ import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
+import org.rhq.core.domain.configuration.definition.PropertySimpleType;
import org.rhq.core.domain.configuration.group.GroupPluginConfigurationUpdate;
import org.rhq.core.domain.criteria.ResourceConfigurationUpdateCriteria;
import org.rhq.core.domain.discovery.AvailabilityReport;
@@ -735,6 +740,67 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
assert requests.size() == 1; // it will create one for us from the "live" configuration
}
+ /** Exercise the ConfigurationManagerBean getOptionsForConfigurationDefinition.
+ *
+ * @throws Exception
+ */
+ @Test(enabled = ENABLE_TESTS)
+ public void testResourceConfigurationDefinitionsOptions() throws Exception {
+ Resource resource = newResource1;
+ Subject overlord = LookupUtil.getSubjectManager().getOverlord();
+ ConfigurationManagerLocal configurationManager = LookupUtil.getConfigurationManager();
+ getTransactionManager().begin();
+
+ try {
+ // this is simulating what the UI would be doing, build the config and call the server-side API
+ // we'll pretend the user is the overlord - another test will check a real user to see permission errors
+ ResourceType newResource1Type = resource.getResourceType();
+ ConfigurationDefinition initialDefinition = newResource1Type.getResourceConfigurationDefinition();
+ int loadCount = 300;
+ HashSet<String> parsedNames = new HashSet<String>();
+ for (int i = 0; i < loadCount; i++) {
+ String name = "fake property" + i;
+ initialDefinition
+ .put(new PropertyDefinitionSimple(name, "fake" + i, false, PropertySimpleType.BOOLEAN));
+ parsedNames.add(name);
+ }
+ newResource1Type.setResourceConfigurationDefinition(initialDefinition);
+ em.merge(newResource1Type);
+ em.flush();
+
+ Configuration configuration = new Configuration();
+ configuration.put(new PropertySimple("myboolean", "true"));
+
+ ConfigurationDefinition configurationDefinition = newResource1.getResourceType()
+ .getResourceConfigurationDefinition();
+ assert configurationDefinition != null : "Configuration Definition could not be located.";
+ //retrieve the options for ConfigurationDefinition
+ ConfigurationDefinition options = configurationManager.getOptionsForConfigurationDefinition(overlord,
+ newResource1.getId(), configurationDefinition);
+ assert options != null : "Unable able to retrieve options for resource with id [" + newResource1.getId()
+ + "].";
+ assert !options.getPropertyDefinitions().entrySet().isEmpty() : "No PropertyDefinitionSimple instances found.";
+
+ PropertyDefinitionSimple locatedPropertyDefSimple = null;
+ int locatedCount = 0;
+ for (Map.Entry<String, PropertyDefinition> entry : options.getPropertyDefinitions().entrySet()) {
+ PropertyDefinition pd = entry.getValue();
+ if (pd instanceof PropertyDefinitionSimple) {
+ PropertyDefinitionSimple pds = (PropertyDefinitionSimple) pd;
+ locatedPropertyDefSimple = pds;
+ locatedCount++;
+ parsedNames.remove(pds.getName());
+ }
+ }
+ assert locatedPropertyDefSimple != null : "PropertyDefinitionSimple was not located!";
+ assert locatedCount >= loadCount : "All expected properties were not loaded. Found '" + locatedCount + "'.";
+ assert parsedNames.size() == 0 : "Not all loaded options were parsed.";
+
+ } finally {
+ getTransactionManager().rollback();
+ }
+ }
+
@Test(enabled = ENABLE_TESTS)
public void testConfigurationRollback() throws Exception {
Resource resource = newResource1;
commit 1cb2426bcd2aefdf458d8edcb1baaf07c7f8e198
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Thu Feb 28 05:43:33 2013 -0500
Add new test for available subjects and increments test coverage for PersistenceUtility.
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
index 9fba041..fe7691d 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
@@ -25,7 +25,10 @@ import java.util.List;
import java.util.Set;
import java.util.UUID;
+import javax.persistence.EntityManager;
import javax.security.auth.login.LoginException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.SystemException;
import org.testng.annotations.Test;
@@ -35,6 +38,7 @@ import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.criteria.SubjectCriteria;
+import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.server.auth.SessionManager;
@@ -45,6 +49,7 @@ import org.rhq.enterprise.server.authz.PermissionException;
import org.rhq.enterprise.server.authz.RoleManagerLocal;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.util.LookupUtil;
+import org.rhq.enterprise.server.util.SessionTestHelper;
/**
* Tests the subject manager.
@@ -360,6 +365,49 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().commit();
}
+ /**
+ * Tests finding Subjects with Roles.
+ * @throws SystemException
+ * @throws NotSupportedException
+ */
+ public void testFindSubjectsWithRoles() throws NotSupportedException, SystemException {
+ getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
+ SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
+ RoleManagerLocal roleManager = LookupUtil.getRoleManager();
+ Subject overlord = subjectManager.getOverlord();
+
+ try {
+ //create new subject
+ Subject subject = SessionTestHelper.createNewSubject(entityMgr, "testSubject");
+ //create new role for subject
+ Role roleWithSubject = SessionTestHelper.createNewRoleForSubject(entityMgr, subject, "role with subject");
+ roleWithSubject.addPermission(Permission.VIEW_RESOURCE);
+ Role newRole = new Role("role without subject");
+ Role roleWithoutSubject = roleManager.createRole(overlord, newRole);
+
+ //exercise findAvailableSubjectsForRole
+ Integer[] pendingSubjectIds = new Integer[0];
+ PageList<Subject> subjects = subjectManager.findAvailableSubjectsForRole(subjectManager.getOverlord(),
+ roleWithoutSubject.getId(), pendingSubjectIds, PageControl.getUnlimitedInstance());
+ assert subjects.size() > 0 : "Unable to locate subject(s) available for role with id '"
+ + roleWithSubject.getId() + "'.";//Should be at least one.
+ // boolean located = false;
+ Subject locatedSubject = null;
+ for (Subject s : subjects) {
+ if (s.getName().equals(subject.getName())) {
+ locatedSubject = s;
+ }
+ }
+ assert locatedSubject != null : "Unable to located subject with name '" + subject.getName() + "'.";
+ assert locatedSubject.getId() == subject.getId() : "Subject id does not match expected subject identifier '"
+ + subject.getId() + "'";//should match.
+
+ } finally {
+ getTransactionManager().rollback();
+ }
+ }
+
/**
* Tests getting a super user subject.
*
10 years, 9 months
[rhq] modules/enterprise
by Jiri Kremser
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java | 149 +++++++++-
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/bundle/TestBundleServerPluginService.java | 6
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java | 4
3 files changed, 153 insertions(+), 6 deletions(-)
New commits:
commit b6ee3734896a67da1dee6fd17f5bd30f641270cf
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Feb 28 15:04:57 2013 +0100
More integration tests for BundleManagerBean. Focus on searching by criteria.
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
index 062d91a..dfe2c72 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
@@ -143,7 +143,6 @@ public class BundleManagerBeanTest extends AbstractEJB3Test {
try {
getTransactionManager().begin();
-
Query q;
List<?> doomed;
@@ -889,17 +888,17 @@ public class BundleManagerBeanTest extends AbstractEJB3Test {
assertNotNull(bv1);
Set<String> filenames = bundleManager.getBundleVersionFilenames(overlord, bv1.getId(), true);
assertNotNull(filenames);
- assertEquals(2, filenames.size());
+ assertEquals(DEFAULT_CRITERIA_PAGE_SIZE + 2, filenames.size());
BundleFile bf1 = bundleManager.addBundleFileViaByteArray(overlord, bv1.getId(), TEST_PREFIX + "-bundlefile-1",
"1.0", null, "Test Bundle File # 1".getBytes());
filenames = bundleManager.getBundleVersionFilenames(overlord, bv1.getId(), true);
assertNotNull(filenames);
- assertEquals(1, filenames.size());
+ assertEquals(DEFAULT_CRITERIA_PAGE_SIZE + 1, filenames.size());
BundleFile bf2 = bundleManager.addBundleFileViaByteArray(overlord, bv1.getId(), TEST_PREFIX + "-bundlefile-2",
"1.0", null, "Test Bundle File # 2".getBytes());
filenames = bundleManager.getBundleVersionFilenames(overlord, bv1.getId(), true);
assertNotNull(filenames);
- assertEquals(0, filenames.size());
+ assertEquals(DEFAULT_CRITERIA_PAGE_SIZE, filenames.size());
}
@Test(enabled = TESTS_ENABLED)
@@ -959,6 +958,55 @@ public class BundleManagerBeanTest extends AbstractEJB3Test {
assertNotNull(r);
assertEquals(b.getName(), r.getName());
}
+
+ @Test(enabled = TESTS_ENABLED)
+ public void testFindBundlesByCriteriaPaging() throws Exception {
+ Bundle b = null;
+ for (int i = 0; i < 9; i++) {
+ createBundle("name" + (i + 1));
+ }
+ Bundle b10 = createBundle("name10");
+
+ BundleCriteria c = new BundleCriteria();
+ PageList<Bundle> bs = null;
+
+ // return first 5
+ c.addFilterName(TEST_PREFIX);
+ c.setPaging(0, 5);
+ c.fetchBundleVersions(true);
+ c.fetchDestinations(true);
+ c.fetchPackageType(true);
+ c.fetchRepo(true);
+ bs = bundleManager.findBundlesByCriteria(overlord, c);
+ assertNotNull(bs);
+ assertEquals(5, bs.size());
+ assertFalse(bs.get(0).equals(bs.get(1)));
+
+ // return last 2
+ c.addFilterName(TEST_PREFIX);
+ c.setPaging(4, 2);
+ c.fetchBundleVersions(true);
+ c.fetchDestinations(true);
+ c.fetchPackageType(true);
+ c.fetchRepo(true);
+ bs = bundleManager.findBundlesByCriteria(overlord, c);
+ assertNotNull(bs);
+ assertEquals(2, bs.size());
+ assertEquals(b10, bs.get(1));
+
+ // return last 1
+ c.addFilterName(TEST_PREFIX);
+ c.setCaseSensitive(true);
+ c.setPaging(1, 9);
+ c.fetchBundleVersions(true);
+ c.fetchDestinations(true);
+ c.fetchPackageType(true);
+ c.fetchRepo(true);
+ bs = bundleManager.findBundlesByCriteria(overlord, c);
+ assertNotNull(bs);
+ assertEquals(1, bs.size());
+ assertEquals(b10, bs.get(0));
+ }
@Test(enabled = TESTS_ENABLED)
public void testFindBundleVersionsByCriteria() throws Exception {
@@ -998,7 +1046,100 @@ public class BundleManagerBeanTest extends AbstractEJB3Test {
assertNotNull(bvOut.getBundleDeployments());
assertTrue(bvOut.getBundleDeployments().isEmpty());
}
+
+ @Test(enabled = TESTS_ENABLED)
+ public void testFindBundleVersionsByCriteriaPaging() throws Exception {
+ Bundle b1 = createBundle("one");
+ for (int i = 0; i < 59; i++) {
+ createBundleVersion(b1.getName(), "1." + String.format("%02d", i + 1), b1);
+ }
+ BundleVersion bv60 = createBundleVersion(b1.getName(), "1.60", b1);
+
+ BundleVersionCriteria c = new BundleVersionCriteria();
+ PageList<BundleVersion> bvs = null;
+ BundleVersion bvOut = null;
+
+ // return first ten
+ c.addFilterName(TEST_PREFIX);
+ c.setPaging(0, 10);
+ bvs = bundleManager.findBundleVersionsByCriteria(overlord, c);
+ assertNotNull(bvs);
+ assertEquals(10, bvs.size());
+ assertFalse(bvs.get(0).equals(bvs.get(1)));
+
+ // return last 3
+ c.addFilterName(TEST_PREFIX);
+ c.setPaging(19, 3);
+ bvs = bundleManager.findBundleVersionsByCriteria(overlord, c);
+ assertNotNull(bvs);
+ assertEquals(3, bvs.size());
+ assertFalse(bvs.get(0).equals(bvs.get(1)));
+ assertEquals(bv60, bvs.get(2));
+ }
+
+ @Test(enabled = TESTS_ENABLED)
+ public void testGetAllBundleVersionFilenames() throws Exception {
+ final Bundle b1 = createBundle("one");
+ assertNotNull(b1);
+ final BundleVersion bv1 = createBundleVersion(b1.getName(), "1.0", b1);
+ assertNotNull(bv1);
+ final HashMap<String, Boolean> files = bundleManager.getAllBundleVersionFilenames(overlord, bv1.getId());
+ assertNotNull(files);
+ assertEquals(DEFAULT_CRITERIA_PAGE_SIZE + 2, files.keySet().size());
+ }
+
+ @Test(enabled = TESTS_ENABLED)
+ public void testCreateBundleAndBundleVersionStrictName1() throws Exception {
+ final Bundle b1 = createBundle("one");
+ final String name = "on";
+ final String fullName = TEST_PREFIX + "-bundle-" + name;
+ final BundleType type = createBundleType(name);
+ final String recipe = "deploy -f " + TEST_PREFIX + ".zip -d @@ test.path @@";
+ final BundleVersion bundleVerison = bundleManager.createBundleAndBundleVersion(overlord, fullName,
+ "description", type.getId(), fullName, fullName + "-desc", "3.0", recipe);
+ assertNotNull(bundleVerison);
+
+ // find the previously created bundle
+ BundleCriteria c = new BundleCriteria();
+ PageList<Bundle> bundles1 = null;
+ c.addFilterName(TEST_PREFIX + "-bundle-one");
+ c.setStrict(true);
+ bundles1 = bundleManager.findBundlesByCriteria(overlord, c);
+ assertNotNull(bundles1);
+ assertEquals(1, bundles1.size());
+ Bundle fetchedBundle1 = bundles1.get(0);
+
+ // find the newly created bundle
+ c = new BundleCriteria();
+ PageList<Bundle> bundles2 = null;
+ c.addFilterName(fullName);
+ c.setStrict(true);
+ bundles2 = bundleManager.findBundlesByCriteria(overlord, c);
+ assertNotNull(bundles2);
+ assertEquals(1, bundles2.size());
+ }
+
+ @Test(enabled = TESTS_ENABLED)
+ public void testCreateBundleAndBundleVersionStrictName2() throws Exception {
+ final String name = "one";
+ final Bundle bundle = createBundle(name);
+ final String fullName = TEST_PREFIX + "-bundle-" + name;
+ final String recipe = "deploy -f " + TEST_PREFIX + ".zip -d @@ test.path @@";
+ final BundleVersion bundleVerison = bundleManager.createBundleAndBundleVersion(overlord, fullName,
+ "description", bundle.getBundleType().getId(), fullName, fullName + "-desc", "3.0", recipe);
+
+ // find the newly created bundle
+ BundleCriteria c = new BundleCriteria();
+ PageList<Bundle> bundles = null;
+ c.addFilterName(fullName);
+ c.setStrict(true);
+ bundles = bundleManager.findBundlesByCriteria(overlord, c);
+ assertNotNull(bundles);
+ assertEquals(1, bundles.size());
+ }
+
+ // helper methods
private BundleType createBundleType(String name) throws Exception {
final String fullName = TEST_PREFIX + "-type-" + name;
ResourceType rt = createResourceTypeForBundleType(name);
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/bundle/TestBundleServerPluginService.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/bundle/TestBundleServerPluginService.java
index 7481496..7c95cb5 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/bundle/TestBundleServerPluginService.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/bundle/TestBundleServerPluginService.java
@@ -50,6 +50,7 @@ import org.rhq.enterprise.server.plugin.pc.bundle.BundleServerPluginManager;
import org.rhq.enterprise.server.plugin.pc.content.ContentServerPluginContainer;
import org.rhq.enterprise.server.plugin.pc.content.ContentServerPluginManager;
import org.rhq.enterprise.server.plugin.pc.content.PackageTypeServerPluginContainer;
+import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.xmlschema.ServerPluginDescriptorMetadataParser;
import org.rhq.enterprise.server.xmlschema.generated.serverplugin.ServerPluginDescriptorType;
@@ -226,8 +227,9 @@ public class TestBundleServerPluginService extends ServerPluginService implement
"Test property for BundleVersion Config Def testing", true, PropertySimpleType.STRING));
bundleFileNames = new HashSet<String>();
- bundleFileNames.add("bundletest-bundlefile-1");
- bundleFileNames.add("bundletest-bundlefile-2");
+ for (int i = 0; i < AbstractEJB3Test.DEFAULT_CRITERIA_PAGE_SIZE + 2; i++) {
+ bundleFileNames.add("bundletest-bundlefile-" + i);
+ }
return new RecipeParseResults(metadata, configDef, bundleFileNames);
}
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
index 1750167..41acc0d 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
@@ -76,6 +76,10 @@ import org.rhq.test.PropertyMatcher;
public abstract class AbstractEJB3Test extends Arquillian {
+ // this value should correspond with the value passed in the default constructor in
+ // org.rhq.core.domain.criteria.Criteria class
+ public static final int DEFAULT_CRITERIA_PAGE_SIZE = 200;
+
protected static final String JNDI_RHQDS = "java:jboss/datasources/RHQDS";
protected static File tmpdirRoot = new File("./target/test-tmpdir");
10 years, 9 months
[rhq] Branch 'mtho11/d3-charts-master' - modules/enterprise
by mike thompson
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/AvailabilityLineGraphType.java | 21 +++++++---
1 file changed, 16 insertions(+), 5 deletions(-)
New commits:
commit c173422fb5684cef0942913819f9f934610e2114
Author: Mike Thompson <mithomps(a)redhat.com>
Date: Wed Feb 27 18:18:50 2013 -0800
Charting - Add unbounded time frames to Availability Hovers where time frames are still running (i.e. Duration: 2.5 hours +)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/AvailabilityLineGraphType.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/AvailabilityLineGraphType.java
index 2812729..30c7b8b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/AvailabilityLineGraphType.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/charttype/AvailabilityLineGraphType.java
@@ -18,6 +18,7 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.common.charttype;
+import java.util.Date;
import java.util.List;
import org.rhq.core.domain.measurement.Availability;
@@ -70,20 +71,31 @@ public class AvailabilityLineGraphType {
for (Availability availability : availabilityList) {
boolean hasValidTimestamps = availability.getStartTime() != null
- && availability.getEndTime() != null;
+ && availability.getEndTime() != null;
// we know we are in an interval
if (hasValidTimestamps && measurement.getTimestamp() >= availability.getStartTime()
- && measurement.getTimestamp() <= availability.getEndTime()) {
+ && measurement.getTimestamp() <= availability.getEndTime()) {
sb.append(" \"availType\":\"" + availability.getAvailabilityType() + "\", ");
sb.append(" \"availStart\":" + availability.getStartTime() + ", ");
sb.append(" \"availEnd\":" + availability.getEndTime() + ", ");
long availDuration = availability.getEndTime() - availability.getStartTime();
- String availDurationString = MeasurementConverterClient.format((double) availDuration,
- MeasurementUnits.MILLISECONDS, true);
+ String availDurationString = MeasurementConverterClient.format((double)availDuration,
+ MeasurementUnits.MILLISECONDS, true);
sb.append(" \"availDuration\": \"" + availDurationString + "\" ");
break;
}
+ else if (availability.getEndTime() == null) {
+ sb.append(" \"availType\":\"" + availability.getAvailabilityType() + "\", ");
+ sb.append(" \"availStart\":" + availability.getStartTime() + ", ");
+ Date now = new Date();
+ sb.append(" \"availEnd\":" + now.getTime() + ",");
+ long availDuration = (new Date()).getTime() - availability.getStartTime();
+ String availDurationString = MeasurementConverterClient.format((double)availDuration,
+ MeasurementUnits.MILLISECONDS, true);
+ sb.append(" \"availDuration\": \"" + availDurationString + " +\" ");
+ break;
+ }
}
}
@@ -211,7 +223,6 @@ public class AvailabilityLineGraphType {
availEnd = new Date(+d.availEnd),
availDuration = d.availDuration;
- // regular bar hover
hoverString =
'<div class="chartHoverEnclosingDiv"><span class="chartHoverTimeLabel">' + availChartContext.timeLabel + ': </span><span style="width:50px;">' + timeFormatter(date) + '</span></div>' +
'<div class="chartHoverAlignLeft"><span class="chartHoverDateLabel">' + availChartContext.dateLabel + ': </span><span style="width:50px;">' + dateFormatter(date) + '</span></div>' +
10 years, 9 months