modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
| 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesDataSource.java
| 160 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesView.java
| 46 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/MeasurementDataGWTService.java
| 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleCompositeDataSource.java
| 33 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
| 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/schedules/SchedulesDataSource.java
| 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
| 24 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
| 186 +++++-----
9 files changed, 359 insertions(+), 131 deletions(-)
New commits:
commit 73bff1bdd0a1ea3c5efca7af2f6b886c235d53a9
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Oct 28 18:58:38 2010 -0400
implement Metric Templates view and hook into the new Resource Types view; still need
to add the "Update Existing Resources" checkbox
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
index d7c2180..43d51a2 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
@@ -47,7 +47,6 @@ import org.rhq.enterprise.gui.coregui.client.LinkManager;
import org.rhq.enterprise.gui.coregui.client.ViewId;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import
org.rhq.enterprise.gui.coregui.client.alert.definitions.TemplateAlertDefinitionsView;
-import org.rhq.enterprise.gui.coregui.client.components.FullHTMLPane;
import org.rhq.enterprise.gui.coregui.client.components.buttons.BackButton;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository.TypesLoadedCallback;
@@ -221,13 +220,11 @@ public class ResourceTypeTreeView extends LocatableVLayout
implements Bookmarkab
});
}
- private void editMetricTemplate(int resourceTypeId) {
- // TODO: convert this to GWT
+ private void editMetricTemplate(int resourceTypeId) {
Layout metricCanvas = getMetricTemplateCanvas();
- FullHTMLPane jspPage = new
FullHTMLPane(extendLocatorId("MetricTemplate"),
-
"/admin/platform/monitor/Config.do?nomenu=true&mode=configure&id="
- + resourceTypeId + "&type=" + resourceTypeId);
- prepareSubCanvas(metricCanvas, jspPage, true);
+ TemplateSchedulesView templateSchedulesView = new
TemplateSchedulesView(extendLocatorId("MetricTemplate"),
+ resourceTypeId);
+ prepareSubCanvas(metricCanvas, templateSchedulesView, true);
switchToCanvas(ResourceTypeTreeView.this, metricCanvas);
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesDataSource.java
new file mode 100644
index 0000000..bad1853
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesDataSource.java
@@ -0,0 +1,160 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2010 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.admin.templates;
+
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.common.EntityContext;
+import org.rhq.core.domain.criteria.MeasurementScheduleCriteria;
+import org.rhq.core.domain.measurement.composite.MeasurementScheduleComposite;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.gwt.MeasurementDataGWTServiceAsync;
+import
org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMeasurementScheduleCompositeDataSource;
+import
org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMeasurementScheduleListView;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+
+/**
+ * A DataSource for reading and updating the default metric schedules for a particular
ResourceType.
+ *
+ * @author Ian Springer
+ */
+public class TemplateSchedulesDataSource extends
AbstractMeasurementScheduleCompositeDataSource {
+ private MeasurementDataGWTServiceAsync measurementService =
GWTServiceLookup.getMeasurementDataService();
+ private int resourceTypeId;
+
+ public TemplateSchedulesDataSource(int resourceTypeId) {
+ this.resourceTypeId = resourceTypeId;
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+
+ DataSourceField resourceGroupIdField = new DataSourceIntegerField(
+ MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_TYPE_ID, "Resource
Type Id");
+ resourceGroupIdField.setHidden(true);
+ fields.add(resourceGroupIdField);
+
+ return fields;
+ }
+
+ @Override
+ protected void executeFetch(DSRequest request, DSResponse response) {
+ super.executeFetch(request, response);
+
+ }
+
+ @Override
+ protected EntityContext getEntityContext(DSRequest request) {
+ Criteria requestCriteria = request.getCriteria();
+ Integer typeId =
requestCriteria.getAttributeAsInt(MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_TYPE_ID);
+ return EntityContext.forTemplate(typeId);
+ }
+
+ @Override
+ public ListGridRecord copyValues(MeasurementScheduleComposite from) {
+ ListGridRecord record = super.copyValues(from);
+ record.setAttribute(MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_TYPE_ID,
this.resourceTypeId);
+ return record;
+ }
+
+ @Override
+ protected void enableSchedules(final AbstractMeasurementScheduleListView
measurementScheduleListView,
+ final int[] measurementDefinitionIds, final List<String>
measurementDefinitionDisplayNames) {
+ final String s = (measurementDefinitionIds.length > 1) ? "s" :
"";
+ this.measurementService.enableMeasurementTemplates(measurementDefinitionIds,
+ new AsyncCallback<Void>() {
+ @Override
+ public void onFailure(Throwable throwable) {
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to enable collection of metric" + s + "
" + measurementDefinitionDisplayNames
+ + " by default for ResourceType with id [" +
resourceTypeId + "].", throwable);
+ }
+
+ @Override
+ public void onSuccess(Void aVoid) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Enabled collection of selected metric" + s
+ ".", "Enabled collection of metric"
+ + s + " " + measurementDefinitionDisplayNames +
" by default for ResourceType with id ["
+ + resourceTypeId + "].", Message.Severity.Info));
+ measurementScheduleListView.refresh();
+ }
+ });
+ }
+
+ @Override
+ protected void disableSchedules(final AbstractMeasurementScheduleListView
measurementScheduleListView,
+ int[] measurementDefinitionIds, final List<String>
measurementDefinitionDisplayNames) {
+ final String s = (measurementDefinitionIds.length > 1) ? "s" :
"";
+ this.measurementService.disableSchedulesForCompatibleGroup(this.resourceTypeId,
measurementDefinitionIds,
+ new AsyncCallback<Void>() {
+ @Override
+ public void onFailure(Throwable throwable) {
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to disable collection of metric" + s + "
" + measurementDefinitionDisplayNames
+ + " by default for ResourceType with id [" +
resourceTypeId + "].", throwable);
+ }
+
+ @Override
+ public void onSuccess(Void aVoid) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Disabled collection of selected metric" +
s + ".", "Disabled collection of metric"
+ + s + " " + measurementDefinitionDisplayNames +
" by default for ResourceType with id ["
+ + resourceTypeId + "].", Message.Severity.Info));
+ measurementScheduleListView.refresh();
+ }
+ });
+ }
+
+ @Override
+ protected void updateSchedules(final AbstractMeasurementScheduleListView
measurementScheduleListView,
+ int[] measurementDefinitionIds, final List<String>
measurementDefinitionDisplayNames,
+ final long collectionInterval) {
+ final String s = (measurementDefinitionIds.length > 1) ? "s" :
"";
+ this.measurementService.updateMeasurementTemplates(measurementDefinitionIds,
collectionInterval,
+ new AsyncCallback<Void>() {
+ @Override
+ public void onFailure(Throwable throwable) {
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to set collection interval to " +
(collectionInterval / 1000) + " seconds for metric"
+ + s + " " + measurementDefinitionDisplayNames +
" by default for ResourceType with id ["
+ + resourceTypeId + "].", throwable);
+ }
+
+ @Override
+ public void onSuccess(Void aVoid) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Updated collection intervals of selected
metric" + s + ".",
+ "Collection interval for metric" + s + "
" + measurementDefinitionDisplayNames
+ + " by default for ResourceType with id [" +
resourceTypeId + "] set to "
+ + (collectionInterval / 1000) + " seconds.",
Message.Severity.Info));
+ measurementScheduleListView.refresh();
+ }
+ });
+ }
+}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesView.java
new file mode 100644
index 0000000..648ae40
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesView.java
@@ -0,0 +1,46 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2010 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.admin.templates;
+
+import com.smartgwt.client.data.Criteria;
+
+import org.rhq.core.domain.criteria.MeasurementScheduleCriteria;
+import
org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMeasurementScheduleListView;
+
+/**
+ * A view for viewing and updating the default metric schedules ("metric
templates") for a particular ResourceType.
+ *
+ * @author Ian Springer
+ */
+public class TemplateSchedulesView extends AbstractMeasurementScheduleListView {
+ private static final String TITLE = "Template Metric Collection
Schedules";
+
+ private static final String[] EXCLUDED_FIELD_NAMES = new String[] {
MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_TYPE_ID };
+
+ public TemplateSchedulesView(String locatorId, int resourceTypeId) {
+ super(locatorId, TITLE, new TemplateSchedulesDataSource(resourceTypeId),
createCriteria(resourceTypeId),
+ EXCLUDED_FIELD_NAMES);
+ }
+
+ private static Criteria createCriteria(int resourceTypeId) {
+ Criteria criteria = new Criteria();
+ criteria.addCriteria(MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_TYPE_ID,
resourceTypeId);
+ return criteria;
+ }
+}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/MeasurementDataGWTService.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/MeasurementDataGWTService.java
index c6c44d8..ea64488 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/MeasurementDataGWTService.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/MeasurementDataGWTService.java
@@ -80,6 +80,12 @@ public interface MeasurementDataGWTService extends RemoteService {
void updateSchedulesForCompatibleGroup(int resourceGroupId, int[]
measurementDefinitionIds, long collectionInterval);
+ void enableMeasurementTemplates(int[] measurementDefinitionIds);
+
+ void disableMeasurementTemplates(int[] measurementDefinitionIds);
+
+ void updateMeasurementTemplates(int[] measurementDefinitionIds, long
collectionInterval);
+
PageList<MeasurementDataTrait>
findTraitsByCriteria(MeasurementDataTraitCriteria criteria);
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleCompositeDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleCompositeDataSource.java
index 1f7da77..cac8051 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleCompositeDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleCompositeDataSource.java
@@ -20,10 +20,8 @@ package org.rhq.enterprise.gui.coregui.client.inventory.common;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSourceField;
@@ -116,31 +114,7 @@ public abstract class AbstractMeasurementScheduleCompositeDataSource
extends
});
}
- protected EntityContext getEntityContext(DSRequest request) {
- EntityContext entityContext = null;
-
- Criteria requestCriteria = request.getCriteria();
- if (requestCriteria != null) {
- Map values = requestCriteria.getValues();
- for (Object key : values.keySet()) {
- String fieldName = (String) key;
- if
(fieldName.equals(MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_ID)) {
- Integer resourceId = (Integer) values.get(fieldName);
- entityContext = EntityContext.forResource(resourceId);
- } else if
(fieldName.equals(MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_GROUP_ID)) {
- Integer groupId = (Integer) values.get(fieldName);
- entityContext = EntityContext.forGroup(groupId);
- }
- // TODO: Add support for other fields we need to filter by (e.g.
resourceTypeId for metric templates).
- }
- }
-
- if (entityContext == null) {
- throw new IllegalStateException("No support criteria fields were
found.");
- }
-
- return entityContext;
- }
+ protected abstract EntityContext getEntityContext(DSRequest request);
@Override
public MeasurementScheduleComposite copyValues(ListGridRecord from) {
@@ -161,8 +135,6 @@ public abstract class AbstractMeasurementScheduleCompositeDataSource
extends
record.setAttribute(MeasurementScheduleCriteria.SORT_FIELD_ENABLED,
from.getCollectionEnabled());
record.setAttribute(MeasurementScheduleCriteria.SORT_FIELD_INTERVAL,
from.getCollectionInterval());
- // TODO: resourceId and resourceGroupId (in subclasses)
-
return record;
}
@@ -170,7 +142,6 @@ public abstract class AbstractMeasurementScheduleCompositeDataSource
extends
int[] ids = getMeasurementDefinitionIds(measurementScheduleListView);
List<String> displayNames =
getMeasurementDefinitionDisplayNames(measurementScheduleListView);
enableSchedules(measurementScheduleListView, ids, displayNames);
- measurementScheduleListView.refresh();
}
protected abstract void enableSchedules(AbstractMeasurementScheduleListView
measurementScheduleListView,
@@ -180,7 +151,6 @@ public abstract class AbstractMeasurementScheduleCompositeDataSource
extends
int[] ids = getMeasurementDefinitionIds(measurementScheduleListView);
List<String> displayNames =
getMeasurementDefinitionDisplayNames(measurementScheduleListView);
disableSchedules(measurementScheduleListView, ids, displayNames);
- measurementScheduleListView.refresh();
}
protected abstract void disableSchedules(AbstractMeasurementScheduleListView
measurementScheduleListView,
@@ -190,7 +160,6 @@ public abstract class AbstractMeasurementScheduleCompositeDataSource
extends
int[] ids = getMeasurementDefinitionIds(measurementScheduleListView);
List<String> displayNames =
getMeasurementDefinitionDisplayNames(measurementScheduleListView);
updateSchedules(measurementScheduleListView, ids, displayNames, interval);
- measurementScheduleListView.refresh();
}
private int[] getMeasurementDefinitionIds(AbstractMeasurementScheduleListView
measurementScheduleListView) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
index 79a9b2a..0ba35d0 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
@@ -84,7 +84,7 @@ public class SchedulesDataSource extends
AbstractMeasurementScheduleCompositeDat
}
@Override
- protected void enableSchedules(AbstractMeasurementScheduleListView
measurementScheduleListView,
+ protected void enableSchedules(final AbstractMeasurementScheduleListView
measurementScheduleListView,
final int[] measurementDefinitionIds, final List<String>
measurementDefinitionDisplayNames) {
final String s = (measurementDefinitionIds.length > 1) ? "s" :
"";
this.measurementService.enableSchedulesForCompatibleGroup(this.resourceGroupId,
measurementDefinitionIds,
@@ -102,13 +102,13 @@ public class SchedulesDataSource extends
AbstractMeasurementScheduleCompositeDat
new Message("Enabled collection of selected metric" + s
+ ".", "Enabled collection of metric"
+ s + " " + measurementDefinitionDisplayNames +
" for Resource group with id ["
+ resourceGroupId + "].", Message.Severity.Info));
-
+ measurementScheduleListView.refresh();
}
});
}
@Override
- protected void disableSchedules(AbstractMeasurementScheduleListView
measurementScheduleListView,
+ protected void disableSchedules(final AbstractMeasurementScheduleListView
measurementScheduleListView,
int[] measurementDefinitionIds, final List<String>
measurementDefinitionDisplayNames) {
final String s = (measurementDefinitionIds.length > 1) ? "s" :
"";
this.measurementService.disableSchedulesForCompatibleGroup(this.resourceGroupId,
measurementDefinitionIds,
@@ -126,13 +126,13 @@ public class SchedulesDataSource extends
AbstractMeasurementScheduleCompositeDat
new Message("Disabled collection of selected metric" +
s + ".", "Disabled collection of metric"
+ s + " " + measurementDefinitionDisplayNames +
" for Resource group with id ["
+ resourceGroupId + "].", Message.Severity.Info));
-
+ measurementScheduleListView.refresh();
}
});
}
@Override
- protected void updateSchedules(AbstractMeasurementScheduleListView
measurementScheduleListView,
+ protected void updateSchedules(final AbstractMeasurementScheduleListView
measurementScheduleListView,
int[] measurementDefinitionIds, final List<String>
measurementDefinitionDisplayNames,
final long collectionInterval) {
final String s = (measurementDefinitionIds.length > 1) ? "s" :
"";
@@ -153,7 +153,7 @@ public class SchedulesDataSource extends
AbstractMeasurementScheduleCompositeDat
"Collection interval for metric" + s + "
" + measurementDefinitionDisplayNames
+ " for Resource group with id [" +
resourceGroupId + "] set to "
+ (collectionInterval / 1000) + " seconds.",
Message.Severity.Info));
-
+ measurementScheduleListView.refresh();
}
});
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/schedules/SchedulesDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/schedules/SchedulesDataSource.java
index ac7c8dd..7d631ba 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/schedules/SchedulesDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/schedules/SchedulesDataSource.java
@@ -77,7 +77,7 @@ public class SchedulesDataSource extends
AbstractMeasurementScheduleCompositeDat
}
@Override
- protected void enableSchedules(AbstractMeasurementScheduleListView
measurementScheduleListView,
+ protected void enableSchedules(final AbstractMeasurementScheduleListView
measurementScheduleListView,
int[] measurementDefinitionIds, final List<String>
measurementDefinitionDisplayNames) {
this.measurementService.enableSchedulesForResource(this.resourceId,
measurementDefinitionIds,
new AsyncCallback<Void>() {
@@ -93,13 +93,13 @@ public class SchedulesDataSource extends
AbstractMeasurementScheduleCompositeDat
CoreGUI.getMessageCenter().notify(
new Message("Enabled collection of metrics " +
measurementDefinitionDisplayNames
+ " for Resource with id [" + resourceId +
"].", Message.Severity.Info));
-
+ measurementScheduleListView.refresh();
}
});
}
@Override
- protected void disableSchedules(AbstractMeasurementScheduleListView
measurementScheduleListView,
+ protected void disableSchedules(final AbstractMeasurementScheduleListView
measurementScheduleListView,
int[] measurementDefinitionIds, final List<String>
measurementDefinitionDisplayNames) {
this.measurementService.disableSchedulesForResource(this.resourceId,
measurementDefinitionIds,
new AsyncCallback<Void>() {
@@ -115,13 +115,13 @@ public class SchedulesDataSource extends
AbstractMeasurementScheduleCompositeDat
CoreGUI.getMessageCenter().notify(
new Message("Disabled collection of metrics " +
measurementDefinitionDisplayNames
+ " for Resource with id [" + resourceId +
"].", Message.Severity.Info));
-
+ measurementScheduleListView.refresh();
}
});
}
@Override
- protected void updateSchedules(AbstractMeasurementScheduleListView
measurementScheduleListView,
+ protected void updateSchedules(final AbstractMeasurementScheduleListView
measurementScheduleListView,
int[] measurementDefinitionIds, final List<String>
measurementDefinitionDisplayNames,
final long collectionInterval) {
this.measurementService.updateSchedulesForResource(this.resourceId,
measurementDefinitionIds,
@@ -140,7 +140,7 @@ public class SchedulesDataSource extends
AbstractMeasurementScheduleCompositeDat
new Message("Collection interval for metrics " +
measurementDefinitionDisplayNames
+ " for Resource with id [" + resourceId + "]
set to " + (collectionInterval / 1000)
+ " seconds.", Message.Severity.Info));
-
+ measurementScheduleListView.refresh();
}
});
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
index 8f5c9be..9073af2 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
@@ -199,6 +199,30 @@ public class MeasurementDataGWTServiceImpl extends
AbstractGWTServiceImpl implem
}
}
+ public void enableMeasurementTemplates(int[] measurementDefinitionIds) {
+ try {
+ scheduleManager.enableMeasurementTemplates(getSessionSubject(),
measurementDefinitionIds);
+ } catch (RuntimeException e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
+ public void disableMeasurementTemplates(int[] measurementDefinitionIds) {
+ try {
+ scheduleManager.disableMeasurementTemplates(getSessionSubject(),
measurementDefinitionIds);
+ } catch (RuntimeException e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
+ public void updateMeasurementTemplates(int[] measurementDefinitionIds, long
collectionInterval) {
+ try {
+ scheduleManager.updateMeasurementTemplates(getSessionSubject(),
measurementDefinitionIds, collectionInterval);
+ } catch (RuntimeException e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
public PageList<MeasurementDataTrait>
findTraitsByCriteria(MeasurementDataTraitCriteria criteria) {
try {
return
SerialUtility.prepare(dataManager.findTraitsByCriteria(getSessionSubject(), criteria),
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
index 4053a25..ccd65bc 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2010 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -53,6 +53,7 @@ import org.rhq.core.db.SQLServerDatabaseType;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.common.EntityContext;
+import org.rhq.core.domain.criteria.MeasurementDefinitionCriteria;
import org.rhq.core.domain.criteria.MeasurementScheduleCriteria;
import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.measurement.DataType;
@@ -173,7 +174,7 @@ public class MeasurementScheduleManagerBean implements
MeasurementScheduleManage
/**
* Return a list of MeasurementSchedules for the given ids
*
- * @param ids PrimaryKeys of the schedules searched
+ * @param scheduleIds PrimaryKeys of the schedules searched
*
* @return a list of Schedules
*/
@@ -1179,92 +1180,117 @@ public class MeasurementScheduleManagerBean implements
MeasurementScheduleManage
pc.addDefaultOrderingField("definition.displayName");
// check authorization up front, so that criteria-based queries can run without
authz checks
- if (context.type == EntityContext.Type.Resource) {
- if (authorizationManager.canViewResource(subject, context.resourceId) ==
false) {
- throw new PermissionException("User [" + subject.getName()
- + "] does not have permission to view measurement schedules for
resource[id=" + context.resourceId
- + "]");
- }
- } else if (context.type == EntityContext.Type.ResourceGroup) {
- if (authorizationManager.canViewGroup(subject, context.groupId) == false) {
- throw new PermissionException("User [" + subject.getName()
- + "] does not have permission to view measurement schedules for
resourceGroup[id="
- + context.groupId + "]");
- }
- } else if (context.type == EntityContext.Type.AutoGroup) {
- if (authorizationManager.canViewAutoGroup(subject, context.parentResourceId,
context.resourceTypeId) == false) {
- throw new PermissionException("User [" + subject.getName()
- + "] does not have permission to view measurement schedules for
autoGroup[parentResourceId="
- + context.parentResourceId + ", resourceTypeId=" +
context.resourceTypeId + "]");
- }
- }
-
- // general criteria setup
- MeasurementScheduleCriteria criteria = new MeasurementScheduleCriteria();
- //criteria.addFilterDefinitionIds(measurementDefinitionIds);
- if (context.type == EntityContext.Type.Resource) {
- criteria.addFilterResourceId(context.resourceId);
- } else if (context.type == EntityContext.Type.ResourceGroup) {
- criteria.addFilterResourceGroupId(context.groupId);
- } else if (context.type == EntityContext.Type.AutoGroup) {
- criteria.addFilterAutoGroupParentResourceId(context.parentResourceId);
- criteria.addFilterAutoGroupResourceTypeId(context.resourceTypeId);
+ switch (context.type) {
+ case Resource:
+ if (authorizationManager.canViewResource(subject, context.resourceId) ==
false) {
+ throw new PermissionException("User [" + subject.getName()
+ + "] does not have permission to view measurement schedules
for resource[id=" +
+ context.resourceId
+ + "]");
+ }
+ break;
+ case ResourceGroup:
+ if (authorizationManager.canViewGroup(subject, context.groupId) == false)
{
+ throw new PermissionException("User [" + subject.getName()
+ + "] does not have permission to view measurement schedules
for resourceGroup[id="
+ + context.groupId + "]");
+ }
+ break;
+ case AutoGroup:
+ if (authorizationManager.canViewAutoGroup(subject,
context.parentResourceId, context.resourceTypeId) ==
+ false) {
+ throw new PermissionException("User [" + subject.getName()
+ + "] does not have permission to view measurement schedules
for autoGroup[parentResourceId="
+ + context.parentResourceId + ", resourceTypeId=" +
context.resourceTypeId + "]");
+ }
+ break;
}
- criteria.setPageControl(pc); // for primary return list, use passed PageControl
- // get the core definitions
- CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject,
criteria);
- ;
- generator.alterProjection(" distinct measurementschedule.definition
");
- CriteriaQueryRunner<MeasurementDefinition> queryRunner = new
CriteriaQueryRunner(criteria, generator,
- entityManager);
- PageList<MeasurementDefinition> definitions = queryRunner.execute();
-
- // reset paging -- remove ordering, add group by
- criteria.setPageControl(PageControl.getUnlimitedInstance());
- generator.setGroupByClause(" measurementschedule.definition.id ");
-
- // get the interval results
- generator.alterProjection("" //
- + " measurementschedule.definition.id, " //
- + " min(measurementschedule.interval), " //
- + " max(measurementschedule.interval) ");
- Query query = generator.getQuery(entityManager);
- List<Object[]> definitionIntervalResults = query.getResultList();
-
- // get the enabled results
- criteria.addFilterEnabled(true);
- generator.alterProjection(" measurementschedule.definition.id,
count(measurementschedule.id) ");
- query = generator.getQuery(entityManager);
- List<Object[]> definitionEnabledResults = query.getResultList();
-
- // generate intermediate maps
+ PageList<MeasurementDefinition> definitions;
Map<Integer, Long> definitionIntervalMap = new HashMap<Integer,
Long>();
- for (Object[] nextInterval : definitionIntervalResults) {
- int definitionId = (Integer) nextInterval[0];
- long minInterval = (Long) nextInterval[1];
- long maxInterval = (Long) nextInterval[2];
-
- long interval = (minInterval != maxInterval) ? 0 : minInterval;
- definitionIntervalMap.put(definitionId, interval);
- }
- int size = getResourceCount(context);
Map<Integer, Boolean> definitionEnabledMap = new HashMap<Integer,
Boolean>();
- for (Object[] nextEnabled : definitionEnabledResults) {
- int definitionId = (Integer) nextEnabled[0];
- long enabledCount = (Long) nextEnabled[1];
-
- Boolean enabled = null;
- if (enabledCount == size) {
- enabled = true;
- } else if (enabledCount == 0) {
- enabled = false;
+ if (context.type == EntityContext.Type.ResourceTemplate) {
+ MeasurementDefinitionCriteria criteria = new
MeasurementDefinitionCriteria();
+ criteria.addFilterResourceTypeId(context.resourceTypeId);
+
+ CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject,
criteria);
+ CriteriaQueryRunner<MeasurementDefinition> queryRunner = new
CriteriaQueryRunner(criteria, generator,
+ entityManager);
+ definitions = queryRunner.execute();
+ for (MeasurementDefinition definition : definitions) {
+ definitionIntervalMap.put(definition.getId(),
definition.getDefaultInterval());
+ definitionEnabledMap.put(definition.getId(), definition.isDefaultOn());
}
+ } else {
+ // Do general criteria setup.
+ MeasurementScheduleCriteria criteria = new MeasurementScheduleCriteria();
+ //criteria.addFilterDefinitionIds(measurementDefinitionIds);
+ switch (context.type) {
+ case Resource:
+ criteria.addFilterResourceId(context.resourceId);
+ break;
+ case ResourceGroup:
+ criteria.addFilterResourceGroupId(context.groupId);
+ break;
+ case AutoGroup:
+
criteria.addFilterAutoGroupParentResourceId(context.parentResourceId);
+ criteria.addFilterAutoGroupResourceTypeId(context.resourceTypeId);
+ break;
+ }
+ criteria.setPageControl(pc); // for primary return list, use passed
PageControl
+
+ // Get the core definitions.
+ CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject,
criteria);
+
+ generator.alterProjection(" distinct measurementschedule.definition
");
+ CriteriaQueryRunner<MeasurementDefinition> queryRunner = new
CriteriaQueryRunner(criteria, generator,
+ entityManager);
+ definitions = queryRunner.execute();
+
+ // Reset paging -- remove ordering, add group by.
+ criteria.setPageControl(PageControl.getUnlimitedInstance());
+ generator.setGroupByClause(" measurementschedule.definition.id ");
+
+ // Get the interval results.
+ generator.alterProjection("" //
+ + " measurementschedule.definition.id, " //
+ + " min(measurementschedule.interval), " //
+ + " max(measurementschedule.interval) ");
+ Query query = generator.getQuery(entityManager);
+ List<Object[]> definitionIntervalResults = query.getResultList();
+
+ // Get the enabled results.
+ criteria.addFilterEnabled(true);
+ generator.alterProjection(" measurementschedule.definition.id,
count(measurementschedule.id) ");
+ query = generator.getQuery(entityManager);
+ List<Object[]> definitionEnabledResults = query.getResultList();
+
+ // Generate intermediate maps for intervals and enabled values.
+ for (Object[] nextInterval : definitionIntervalResults) {
+ int definitionId = (Integer) nextInterval[0];
+ long minInterval = (Long) nextInterval[1];
+ long maxInterval = (Long) nextInterval[2];
+
+ long interval = (minInterval != maxInterval) ? 0 : minInterval;
+ definitionIntervalMap.put(definitionId, interval);
+ }
+ int size = getResourceCount(context);
+ for (Object[] nextEnabled : definitionEnabledResults) {
+ int definitionId = (Integer) nextEnabled[0];
+ long enabledCount = (Long) nextEnabled[1];
+
+ Boolean enabled = null;
+ if (enabledCount == size) {
+ enabled = true;
+ } else if (enabledCount == 0) {
+ enabled = false;
+ }
- definitionEnabledMap.put(definitionId, enabled);
+ definitionEnabledMap.put(definitionId, enabled);
+ }
}
- // finally merge everything together
+ // Finally, merge everything together.
List<MeasurementScheduleComposite> composites = new
ArrayList<MeasurementScheduleComposite>();
for (MeasurementDefinition next : definitions) {
int definitionId = next.getId();