Author: jtravis
Date: 2008-02-07 20:52:47 -0800 (Thu, 07 Feb 2008)
New Revision: 7716
URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=7716
Added:
branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/MetricHelper.groovy
branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/MeasurementTemplateSortField.java
branches/HQ_3_2/tools/unit_tests/metric_template_find.and_perm.groovy
Modified:
branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/BaseController.groovy
branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/BaseHelper.groovy
branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/ResourceHelper.groovy
branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/MeasurementTemplateDAO.java
branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/TemplateManagerEJBImpl.java
Log:
Add MetricHelper to HQU, plus more appropriate finders in the measurement template Managers/DAOs
Modified: branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/BaseController.groovy
===================================================================
--- branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/BaseController.groovy 2008-02-08 00:36:48 UTC (rev 7715)
+++ branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/BaseController.groovy 2008-02-08 04:52:47 UTC (rev 7716)
@@ -15,6 +15,7 @@
import org.hyperic.hq.hqu.rendit.helpers.AlertHelper
import org.hyperic.hq.hqu.rendit.helpers.AuditHelper
import org.hyperic.hq.hqu.rendit.helpers.ResourceHelper
+import org.hyperic.hq.hqu.rendit.helpers.MetricHelper
import org.hyperic.hq.hqu.rendit.render.RenderFrame
import org.hyperic.util.Runnee
@@ -279,6 +280,10 @@
new ResourceHelper(user)
}
+ protected MetricHelper getMetricHelper() {
+ new MetricHelper(user)
+ }
+
/**
* Get the attachment point for the view associated with the current
* request.
Modified: branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/BaseHelper.groovy
===================================================================
--- branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/BaseHelper.groovy 2008-02-08 00:36:48 UTC (rev 7715)
+++ branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/BaseHelper.groovy 2008-02-08 04:52:47 UTC (rev 7716)
@@ -1,9 +1,11 @@
package org.hyperic.hq.hqu.rendit.helpers
+import org.hyperic.hq.authz.server.session.AuthzSubjectManagerEJBImpl
import org.hyperic.hq.authz.server.session.AuthzSubject
import org.hyperic.hq.authz.shared.AuthzSubjectValue
abstract class BaseHelper {
+ private AuthzSubject overlord = AuthzSubjectManagerEJBImpl.one.overlordPojo
AuthzSubject user
AuthzSubjectValue userValue
@@ -11,4 +13,8 @@
this.user = user
this.userValue = user.authzSubjectValue
}
+
+ protected AuthzSubject getOverlord() {
+ this.overlord
+ }
}
Added: branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/MetricHelper.groovy
===================================================================
--- branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/MetricHelper.groovy (rev 0)
+++ branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/MetricHelper.groovy 2008-02-08 04:52:47 UTC (rev 7716)
@@ -0,0 +1,75 @@
+package org.hyperic.hq.hqu.rendit.helpers
+
+import org.hyperic.hq.measurement.server.session.TemplateManagerEJBImpl
+import org.hyperic.hq.measurement.server.session.MeasurementTemplate
+import org.hyperic.hq.measurement.server.session.MeasurementTemplateSortField
+
+import org.hyperic.hq.authz.shared.PermissionException
+import org.hyperic.hibernate.SortField
+import org.hyperic.hibernate.PageInfo
+import org.hyperic.hq.authz.server.session.AuthzSubject
+import org.hyperic.hq.authz.server.session.ResourceManagerEJBImpl
+import org.hyperic.hq.authz.server.session.ResourceSortField
+import org.hyperic.hq.authz.server.session.Resource
+import org.hyperic.hq.authz.HasAuthzOperations
+
+class MetricHelper extends BaseHelper {
+ private tmplMan = TemplateManagerEJBImpl.one
+
+ MetricHelper(AuthzSubject user) {
+ super(user)
+ }
+
+ /**
+ * General purpose utility method for finding metrics and metric
+ * templates. Note that these are the metadata for metrics, not the
+ * actual metric data itself.
+ *
+ * Optional arguments:
+ * 'user', defaults to the current user {@link AuthzSubject}
+ * 'permCheck', defaults to true (check user permission)
+ *
+ *
+ * To find all metric templates: find all: 'templates'
+ * for a specific resource type: find all: 'templates', resourceType: 'Linux'
+ * or : find all: 'templates', resourceType: 'regex:Win.*'
+ */
+ def find(Map args) {
+ args = args + [:]
+ ['all', 'withPaging', 'resourceType', 'enabled'].each {args.get(it, null)}
+ args.get('user', user)
+ args.get('permCheck', true)
+
+ if (!args.permCheck && !args.user.isSuperUser()) {
+ args.user = overlord
+ }
+
+ if (args.all == 'templates') {
+ if (args.withPaging == null) {
+ args.withPaging = PageInfo.getAll(MeasurementTemplateSortField.TEMPLATE_NAME, true)
+ }
+
+ def filter = {it}
+ def resourceType = args.resourceType
+ if (resourceType && resourceType.startsWith('regex')) {
+ def regex = ~resourceType[6..-1]
+
+ // XXX: This does not page correctly!
+ return tmplMan.findTemplates(args.user, args.withPaging,
+ args.enabled).grep {
+ it.monitorableType.name ==~ regex
+ }
+ } else if (resourceType) {
+ return tmplMan.findTemplatesByMonitorableType(args.user,
+ args.withPaging,
+ resourceType,
+ args.enabled)
+ } else {
+ return tmplMan.findTemplates(args.user, args.withPaging,
+ args.enabled)
+ }
+ }
+
+ throw new IllegalArgumentException("Unsupported find args")
+ }
+}
Modified: branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/ResourceHelper.groovy
===================================================================
--- branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/ResourceHelper.groovy 2008-02-08 00:36:48 UTC (rev 7715)
+++ branches/HQ_3_2/src/org/hyperic/hq/hqu/rendit_sys/helpers/ResourceHelper.groovy 2008-02-08 04:52:47 UTC (rev 7716)
@@ -51,7 +51,7 @@
* find service:serviceId
* find server:10001, service:'My Service'
*
- * See also: AppdefCategory.checkPerms
+ * Additional arguments are possible, See: AppdefCategory.checkPerms
*
* TODO:
* Currently, this does not take permissions into account whe returning
Modified: branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/MeasurementTemplateDAO.java
===================================================================
--- branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/MeasurementTemplateDAO.java 2008-02-08 00:36:48 UTC (rev 7715)
+++ branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/MeasurementTemplateDAO.java 2008-02-08 04:52:47 UTC (rev 7716)
@@ -31,8 +31,10 @@
import java.util.Iterator;
import java.util.List;
+import org.hibernate.Query;
import org.hibernate.criterion.Restrictions;
import org.hyperic.dao.DAOFactory;
+import org.hyperic.hibernate.PageInfo;
import org.hyperic.hq.dao.HibernateDAO;
import org.hyperic.hq.measurement.MeasurementConstants;
import org.hyperic.hq.product.MeasurementInfo;
@@ -180,6 +182,25 @@
}
}
+ List findAllTemplates(PageInfo pInfo, Boolean defaultOn) {
+ String sql = "select t from MeasurementTemplate t " +
+ "where t.defaultInterval > 0 ";
+
+ if (defaultOn != null) {
+ sql += "and t.defaultOn = :defaultOn ";
+ }
+
+ sql +=
+ "order by " +
+ ((MeasurementTemplateSortField)pInfo.getSort()).getSortString("t");
+
+ Query q = getSession().createQuery(sql);
+ if (defaultOn != null) {
+ q.setParameter("defaultOn", defaultOn);
+ }
+ return pInfo.pageResults(q).list();
+ }
+
List findTemplates(Integer[] ids) {
if (ids.length == 1) {
Object res = get(ids[0]);
@@ -198,14 +219,35 @@
}
List findTemplatesByMonitorableType(String type) {
+ PageInfo pInfo =
+ PageInfo.getAll(MeasurementTemplateSortField.TEMPLATE_NAME, true);
+ return findTemplatesByMonitorableType(pInfo, type, null);
+ }
+
+ List findTemplatesByMonitorableType(PageInfo pInfo, String type,
+ Boolean defaultOn)
+ {
String sql =
"select t from MeasurementTemplate t " +
"join fetch t.monitorableType mt " +
- "where mt.name=? and t.defaultInterval > 0 order by t.name";
- return getSession().createQuery(sql).
- setString(0, type).list();
+ "where mt.name=:typeName and t.defaultInterval > 0 ";
+
+ if (defaultOn != null) {
+ sql += " and t.defaultOn = :defaultOn ";
+ }
+
+ sql += "order by " +
+ ((MeasurementTemplateSortField)pInfo.getSort()).getSortString("t");
+
+ Query q = getSession().createQuery(sql)
+ .setString("typeName", type);
+
+ if (defaultOn != null)
+ q.setParameter("defaultOn", defaultOn);
+
+ return pInfo.pageResults(q).list();
}
-
+
List findTemplatesByMonitorableTypeAndCategory(String type,
String cat) {
String sql =
Added: branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/MeasurementTemplateSortField.java
===================================================================
--- branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/MeasurementTemplateSortField.java (rev 0)
+++ branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/MeasurementTemplateSortField.java 2008-02-08 04:52:47 UTC (rev 7716)
@@ -0,0 +1,71 @@
+/*
+ * NOTE: This copyright does *not* cover user programs that use HQ
+ * program services by normal system calls through the application
+ * program interfaces provided as part of the Hyperic Plug-in Development
+ * Kit or the Hyperic Client Development Kit - this is merely considered
+ * normal use of the program, and does *not* fall under the heading of
+ * "derived work".
+ *
+ * Copyright (C) [2004, 2005, 2006], Hyperic, Inc.
+ * This file is part of HQ.
+ *
+ * HQ is free software; you can redistribute it and/or modify
+ * it under the terms version 2 of the GNU General Public License as
+ * published by the Free Software Foundation. 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ */
+
+package org.hyperic.hq.measurement.server.session;
+
+import java.util.ResourceBundle;
+
+import org.hyperic.hibernate.SortField;
+import org.hyperic.util.HypericEnum;
+
+public abstract class MeasurementTemplateSortField
+ extends HypericEnum
+ implements SortField
+{
+ private static final String BUNDLE = "org.hyperic.hq.measurement.Resources";
+
+ public static final MeasurementTemplateSortField TEMPLATE_NAME =
+ new MeasurementTemplateSortField(0, "name",
+ "measurementTemplate.sortField.name")
+ {
+ public boolean isSortable() {
+ return true;
+ }
+
+ public String getSortString(String template) {
+ return template + ".name";
+ }
+ };
+
+ private MeasurementTemplateSortField(int code, String desc,
+ String localeProp)
+ {
+ super(MeasurementTemplateSortField.class, code, desc, localeProp,
+ ResourceBundle.getBundle(BUNDLE));
+ }
+
+ public abstract String getSortString(String template);
+
+ public static MeasurementTemplateSortField findByCode(int code) {
+ return (MeasurementTemplateSortField)
+ HypericEnum.findByCode(MeasurementTemplateSortField.class, code);
+ }
+
+ public static MeasurementTemplateSortField findByDescription(String desc){
+ return (MeasurementTemplateSortField)
+ HypericEnum.findByDescription(MeasurementTemplateSortField.class,
+ desc);
+ }
+}
Modified: branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/TemplateManagerEJBImpl.java
===================================================================
--- branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/TemplateManagerEJBImpl.java 2008-02-08 00:36:48 UTC (rev 7715)
+++ branches/HQ_3_2/src/org/hyperic/hq/measurement/server/session/TemplateManagerEJBImpl.java 2008-02-08 04:52:47 UTC (rev 7716)
@@ -50,6 +50,7 @@
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.impl.SessionFactoryImpl;
import org.hibernate.impl.SessionImpl;
+import org.hyperic.hibernate.PageInfo;
import org.hyperic.hibernate.Util;
import org.hyperic.hq.appdef.shared.AppdefEntityConstants;
import org.hyperic.hq.appdef.shared.AppdefEntityID;
@@ -58,6 +59,7 @@
import org.hyperic.hq.authz.server.session.AuthzSubject;
import org.hyperic.hq.authz.shared.AuthzSubjectValue;
import org.hyperic.hq.authz.shared.PermissionException;
+import org.hyperic.hq.authz.shared.PermissionManagerFactory;
import org.hyperic.hq.measurement.server.session.Category;
import org.hyperic.hq.measurement.server.session.DerivedMeasurement;
import org.hyperic.hq.measurement.server.session.MeasurementArg;
@@ -173,6 +175,54 @@
}
/**
+ * Get all the templates. Must be superuser to execute.
+ *
+ * @param pInfo must contain a sort field of type
+ * {@link MeasurementTemplateSortField}
+ * @param enabled If non-null, return templates with defaultOn == defaultOn
+ *
+ * @return a list of {@link MeasurementTemplate}s
+ * @ejb:interface-method
+ */
+ public List findTemplates(AuthzSubject user, PageInfo pInfo,
+ Boolean defaultOn)
+ throws PermissionException
+ {
+ assertSuperUser(user);
+ return getMeasurementTemplateDAO().findAllTemplates(pInfo, defaultOn);
+ }
+
+ /**
+ * Get all templates for a given MonitorableType
+ *
+ * @param pInfo must contain a sort field of type
+ * {@link MeasurementTemplateSortField}
+ * @param enabled If non-null, return templates with defaultOn == defaultOn
+ *
+ * @return a list of {@link MeasurementTemplate}s
+ * @ejb:interface-method
+ */
+ public List findTemplatesByMonitorableType(AuthzSubject user, PageInfo pInfo,
+ String type, Boolean defaultOn)
+ throws PermissionException
+ {
+ assertSuperUser(user);
+ return getMeasurementTemplateDAO()
+ .findTemplatesByMonitorableType(pInfo, type, defaultOn);
+ }
+
+ private void assertSuperUser(AuthzSubject s)
+ throws PermissionException
+ {
+ boolean authorized = PermissionManagerFactory.getInstance()
+ .hasAdminPermission(s.getId());
+
+ if (!authorized) {
+ throw new PermissionException("Permission denied");
+ }
+ }
+
+ /**
* Look up a measurement templates for a monitorable type and
* category.
*
Added: branches/HQ_3_2/tools/unit_tests/metric_template_find.and_perm.groovy
===================================================================
--- branches/HQ_3_2/tools/unit_tests/metric_template_find.and_perm.groovy (rev 0)
+++ branches/HQ_3_2/tools/unit_tests/metric_template_find.and_perm.groovy 2008-02-08 04:52:47 UTC (rev 7716)
@@ -0,0 +1,25 @@
+import org.hyperic.hq.authz.shared.PermissionException
+import org.hyperic.hq.authz.server.session.AuthzSubjectManagerEJBImpl as asm
+import org.hyperic.hq.hqu.rendit.helpers.MetricHelper
+
+def overlord = asm.one.overlordPojo
+def guest = asm.one.findSubjectById(2)
+
+def mhelp = new MetricHelper(overlord)
+
+try {
+ mhelp.find(all: 'templates', user: guest)
+ assert false, "Guest find of templates didn't throw an exception"
+} catch(PermissionException e) {
+}
+
+try {
+ mhelp.find(all: 'templates', user: guest, permCheck: true)
+ assert false, "Guest find of templates didn't throw an exception"
+} catch(PermissionException e) {
+}
+
+
+mhelp.find(all: 'templates', user: guest, permCheck: false)
+
+mhelp.find(all: 'templates')
|