From: <cl...@hy...> - 2007-10-31 23:23:08
|
Author: clee Date: 2007-10-31 15:23:02 -0800 (Wed, 31 Oct 2007) New Revision: 6597 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=6597 Modified: trunk/src/org/hyperic/hq/appdef/server/session/CPropManagerEJBImpl.java trunk/src/org/hyperic/hq/appdef/server/session/CPropResource.java trunk/src/org/hyperic/hq/appdef/server/session/CPropResourceSortField.java trunk/src/org/hyperic/hq/appdef/server/session/ServiceManagerEJBImpl.java trunk/src/org/hyperic/hq/bizapp/server/session/AppdefBossEJBImpl.java trunk/src/org/hyperic/hq/dao/CpropDAO.java trunk/src/org/hyperic/hq/dao/ServiceDAO.java trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java trunk/ui_plugins/nagiup/app/NagiupController.groovy trunk/ui_plugins/systemsdown/Plugin.groovy trunk/ui_plugins/systemsdown/etc/systemsdown_i18n.properties Log: Add sorting to the Nagios columns Modified: trunk/src/org/hyperic/hq/appdef/server/session/CPropManagerEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/appdef/server/session/CPropManagerEJBImpl.java 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/src/org/hyperic/hq/appdef/server/session/CPropManagerEJBImpl.java 2007-10-31 23:23:02 UTC (rev 6597) @@ -566,14 +566,15 @@ * Get all Cprops values with specified key name, irregardless of type * @ejb:interface-method */ - public List getCPropValues(AppdefResourceTypeValue appdefType, String key) { + public List getCPropValues(AppdefResourceTypeValue appdefType, String key, + boolean asc) { int type = appdefType.getAppdefType(); int instanceId = appdefType.getId().intValue(); CpropKey pkey = getCPropKeyDAO().findByKey(type, instanceId, key); CpropDAO dao = new CpropDAO(DAOFactory.getDAOFactory()); - return dao.findByKeyName(pkey); + return dao.findByKeyName(pkey, asc); } private CpropKeyDAO getCPropKeyDAO(){ Modified: trunk/src/org/hyperic/hq/appdef/server/session/CPropResource.java =================================================================== --- trunk/src/org/hyperic/hq/appdef/server/session/CPropResource.java 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/src/org/hyperic/hq/appdef/server/session/CPropResource.java 2007-10-31 23:23:02 UTC (rev 6597) @@ -34,13 +34,6 @@ _mv = mv; } - public long getDuration() { - if (_mv != null && _mv instanceof DownMetricValue) { - return ((DownMetricValue) _mv).getDuration(); - } - return 0; - } - public EventLog getLastEvent() { return _el; } Modified: trunk/src/org/hyperic/hq/appdef/server/session/CPropResourceSortField.java =================================================================== --- trunk/src/org/hyperic/hq/appdef/server/session/CPropResourceSortField.java 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/src/org/hyperic/hq/appdef/server/session/CPropResourceSortField.java 2007-10-31 23:23:02 UTC (rev 6597) @@ -41,7 +41,7 @@ "cpropResource.sortField.property") { public boolean isSortable() { - return false; + return true; } }; @@ -50,7 +50,7 @@ "cpropResource.sortField.resource") { public boolean isSortable() { - return false; + return true; } }; @@ -59,7 +59,7 @@ "cpropResource.sortField.metricValue") { public boolean isSortable() { - return false; + return true; } }; @@ -68,19 +68,10 @@ "cpropResource.sortField.metricTimestamp") { public boolean isSortable() { - return false; + return true; } }; - public static final CPropResourceSortField DURATION = - new CPropResourceSortField(4, "duration", - "cpropResource.sortField.duration") - { - public boolean isSortable() { - return false; - } - }; - public static final CPropResourceSortField EVENT_LOG = new CPropResourceSortField(5, "eventLog", "cpropResource.sortField.eventLog") Modified: trunk/src/org/hyperic/hq/appdef/server/session/ServiceManagerEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/appdef/server/session/ServiceManagerEJBImpl.java 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/src/org/hyperic/hq/appdef/server/session/ServiceManagerEJBImpl.java 2007-10-31 23:23:02 UTC (rev 6597) @@ -246,7 +246,7 @@ ServiceDAO sLHome; try { sLHome = getServiceDAO(); - Collection services = sLHome.findByType(servTypeId); + Collection services = sLHome.findByType(servTypeId, true); if (services.size() == 0) { return new Integer[0]; } @@ -752,7 +752,8 @@ /** * @ejb:interface-method */ - public List getServicesByType(AuthzSubject subject, String svcName) + public List getServicesByType(AuthzSubject subject, String svcName, + boolean asc) throws PermissionException, InvalidAppdefTypeException { ServiceType st = getServiceTypeDAO().findByName(svcName); if (st == null) { @@ -760,7 +761,7 @@ } try { - Collection services = getServiceDAO().findByType(st.getId()); + Collection services = getServiceDAO().findByType(st.getId(), asc); if (services.size() == 0) { return new PageList(); } Modified: trunk/src/org/hyperic/hq/bizapp/server/session/AppdefBossEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/bizapp/server/session/AppdefBossEJBImpl.java 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/src/org/hyperic/hq/bizapp/server/session/AppdefBossEJBImpl.java 2007-10-31 23:23:02 UTC (rev 6597) @@ -30,6 +30,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -50,6 +51,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hyperic.hibernate.PageInfo; +import org.hyperic.hibernate.SortField; import org.hyperic.hq.agent.AgentConnectionException; import org.hyperic.hq.agent.AgentRemoteException; import org.hyperic.hq.agent.FileDataResult; @@ -58,6 +60,7 @@ import org.hyperic.hq.appdef.server.session.AppdefResourceType; import org.hyperic.hq.appdef.server.session.Application; import org.hyperic.hq.appdef.server.session.CPropResource; +import org.hyperic.hq.appdef.server.session.CPropResourceSortField; import org.hyperic.hq.appdef.server.session.DownResSortField; import org.hyperic.hq.appdef.server.session.DownResource; import org.hyperic.hq.appdef.server.session.Platform; @@ -3743,7 +3746,71 @@ } return ret; } + + private class ValueComparator implements Comparator { + boolean _asc; + + ValueComparator(boolean asc) { + _asc = asc; + } + + public int compare(Object o1, Object o2) { + Map.Entry me1 = (Map.Entry) o1; + Map.Entry me2 = (Map.Entry) o2; + + MetricValue mv1, mv2; + + if (_asc) { + mv1 = (MetricValue) me1.getValue(); + mv2 = (MetricValue) me2.getValue(); + } + else { + mv1 = (MetricValue) me1.getValue(); + mv2 = (MetricValue) me2.getValue(); + } + + if (mv1.getValue() < mv2.getValue()) + return -1; + + if (mv1.getValue() > mv2.getValue()) + return 1; + + return 0; + } + } + private class TimestampComparator implements Comparator { + boolean _asc; + + TimestampComparator(boolean asc) { + _asc = asc; + } + + public int compare(Object o1, Object o2) { + Map.Entry me1 = (Map.Entry) o1; + Map.Entry me2 = (Map.Entry) o2; + + MetricValue mv1, mv2; + + if (_asc) { + mv1 = (MetricValue) me1.getValue(); + mv2 = (MetricValue) me2.getValue(); + } + else { + mv1 = (MetricValue) me1.getValue(); + mv2 = (MetricValue) me2.getValue(); + } + + if (mv1.getTimestamp() < mv2.getTimestamp()) + return -1; + + if (mv1.getTimestamp() > mv2.getTimestamp()) + return 1; + + return 0; + } + } + /** * Get Service resources and their display information * @ejb:interface-method @@ -3752,13 +3819,12 @@ * @param cprop a unique custom property name to be fetched */ public List getServicesView(AuthzSubject subject, String typeName, - String cprop) + String cprop, String metricName, PageInfo pi) throws PermissionException, InvalidAppdefTypeException { - List ret = new ArrayList(); - // Find all resources of Nagios type List services = - getServiceManager().getServicesByType(subject, typeName); + getServiceManager().getServicesByType(subject, typeName, + pi.isAscending()); if (services.size() == 0) return new ArrayList(); @@ -3767,10 +3833,15 @@ ((AppdefResourceValue) services.get(0)).getAppdefResourceTypeValue(); // Get the Cprop values - List cprops = getCPropManager().getCPropValues(type, cprop); + List cprops = getCPropManager().getCPropValues(type, cprop, + pi.isAscending()); - // XXX - determine sort order, for now assume sorting by cprop value - Map res = new HashMap(); + List ret = new ArrayList(cprops.size()); + + // Get the sort field + SortField sf = pi.getSort(); + + Map res = new HashMap(); for (Iterator it = cprops.iterator(); it.hasNext(); ) { Cprop prop = (Cprop) it.next(); Integer id = prop.getAppdefId(); @@ -3787,18 +3858,32 @@ CPropResource cpRes = new CPropResource(appRes, prop.getPropValue()); - ret.add(cpRes); res.put(id, cpRes); } } - + + if (sf.equals(CPropResourceSortField.RESOURCE)) { + for (Iterator it = services.iterator(); it.hasNext(); ) { + AppdefResourceValue appRes = (AppdefResourceValue) it.next(); + if (res.containsKey(appRes.getId())) { + ret.add(res.get(appRes.getId())); + } + } + } + else { + for (Iterator it = cprops.iterator(); it.hasNext(); ) { + Cprop prop = (Cprop) it.next(); + ret.add(res.get(prop.getAppdefId())); + } + + } + // Get the resource templates List templs = getTemplateManager() - .findTemplates(type.getName(), - MeasurementConstants.CAT_AVAILABILITY, - null, PageControl.PAGE_ALL); + .findTemplates(type.getName(), MeasurementConstants.FILTER_NONE, + metricName); - // There should at least one template for availability + // There should at least one template assert(templs.size() > 0); MeasurementTemplateValue mtv = (MeasurementTemplateValue) templs.get(0); @@ -3808,32 +3893,30 @@ Integer[] instIds = (Integer[]) res.keySet().toArray(new Integer[services.size()]); - Set mids = new HashSet(); - mids.addAll(Arrays.asList( - dmMan.findMeasurementIds(subject, mtv.getId(), instIds))); + Integer[] mids = + dmMan.findMeasurementIds(subject, mtv.getId(), instIds); - // Get the down resources and their duration - List unavailEnts = dmMan.getUnavailEntities(mids); - - for (Iterator it = unavailEnts.iterator(); it.hasNext(); ) { - DownMetricValue dmv = (DownMetricValue) it.next(); - - CPropResource cpRes = - (CPropResource) res.get(dmv.getEntityId().getId()); - - cpRes.setLastValue(dmv); - mids.remove(dmv.getMetricId()); - } - // Now get the availability data of the leftovers - Integer[] leftovers = - (Integer[]) mids.toArray(new Integer[mids.size()]); - Map avail = getDataMan() - .getLastDataPoints(leftovers, MeasurementConstants + .getLastDataPoints(mids, MeasurementConstants .ACCEPTABLE_SERVICE_LIVE_MILLIS); - for (Iterator it = avail.entrySet().iterator(); it.hasNext(); ) { + Collection entries = avail.entrySet(); + boolean sortByValue = + sf.equals(CPropResourceSortField.METRIC_VALUE) || + sf.equals(CPropResourceSortField.METRIC_TIMESTAMP); + /* + if (sortByValue) { + entries = new ArrayList(entries); + Comparator comparator = + sf.equals(CPropResourceSortField.METRIC_VALUE) ? + new ValueComparator(pi.isAscending()) : + new TimestampComparator(pi.isAscending()); + Collections.sort((List) entries, comparator); + } + */ + + for (Iterator it = entries.iterator(); it.hasNext(); ) { Map.Entry entry = (Map.Entry) it.next(); Integer mid = (Integer) entry.getKey(); Modified: trunk/src/org/hyperic/hq/dao/CpropDAO.java =================================================================== --- trunk/src/org/hyperic/hq/dao/CpropDAO.java 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/src/org/hyperic/hq/dao/CpropDAO.java 2007-10-31 23:23:02 UTC (rev 6597) @@ -55,10 +55,10 @@ super.remove(entity); } - public List findByKeyName(CpropKey key) { + public List findByKeyName(CpropKey key, boolean asc) { Criteria c = createCriteria() .add(Expression.eq("key", key)) - .addOrder(Order.asc("propValue")); + .addOrder(asc ? Order.asc("propValue") : Order.desc("propValue")); return c.list(); } } Modified: trunk/src/org/hyperic/hq/dao/ServiceDAO.java =================================================================== --- trunk/src/org/hyperic/hq/dao/ServiceDAO.java 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/src/org/hyperic/hq/dao/ServiceDAO.java 2007-10-31 23:23:02 UTC (rev 6597) @@ -135,9 +135,10 @@ .list(); } - public Collection findByType(Integer st) + public Collection findByType(Integer st, boolean asc) { - String sql="from Service where serviceType.id=?"; + String sql = "from Service where serviceType.id=? order by sortName " + + (asc ? "asc" : "desc"); return getSession().createQuery(sql) .setInteger(0, st.intValue()) .list(); Modified: trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java 2007-10-31 23:23:02 UTC (rev 6597) @@ -1420,7 +1420,7 @@ * * @ejb:interface-method */ - public List getUnavailEntities(Set includes) { + public List getUnavailEntities(List includes) { MetricDataCache cache = MetricDataCache.getInstance(); Map unavailMetrics = cache.getUnavailableMetrics(); List unavailEntities = new ArrayList(); Modified: trunk/ui_plugins/nagiup/app/NagiupController.groovy =================================================================== --- trunk/ui_plugins/nagiup/app/NagiupController.groovy 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/ui_plugins/nagiup/app/NagiupController.groovy 2007-10-31 23:23:02 UTC (rev 6597) @@ -13,7 +13,8 @@ private final NAGIUP_SCHEMA = [ getData: {pageInfo, params -> - AppdefBossEJBImpl.one.getServicesView(user, 'FileServer File', 'fs') + AppdefBossEJBImpl.one.getServicesView(user, 'FileServer File', 'fs', 'Availability', + pageInfo) }, defaultSort: CPropResourceSortField.PROPERTY, defaultSortOrder: 1, // descending @@ -43,15 +44,8 @@ return "${it.lastValue.label}" } }], - [field: CPropResourceSortField.DURATION, - width:'10%', - label:{ - if (it.duration) { - return formatDuration(it.duration) - } - }], [field: CPropResourceSortField.EVENT_LOG, - width:'10%', + width:'20%', label:{ if (it.lastEvent) { return "${it.lastEvent.detail}" Modified: trunk/ui_plugins/systemsdown/Plugin.groovy =================================================================== --- trunk/ui_plugins/systemsdown/Plugin.groovy 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/ui_plugins/systemsdown/Plugin.groovy 2007-10-31 23:23:02 UTC (rev 6597) @@ -2,6 +2,6 @@ class Plugin extends HQUPlugin { Plugin() { - addMastheadView(true, '/systemsdown/index.hqu', 'Systems Down', 'resource') + addMastheadView(true, '/systemsdown/index.hqu', 'Currently Down Resources', 'resource') } } Modified: trunk/ui_plugins/systemsdown/etc/systemsdown_i18n.properties =================================================================== --- trunk/ui_plugins/systemsdown/etc/systemsdown_i18n.properties 2007-10-31 22:05:45 UTC (rev 6596) +++ trunk/ui_plugins/systemsdown/etc/systemsdown_i18n.properties 2007-10-31 23:23:02 UTC (rev 6597) @@ -1,5 +1,5 @@ systemsdown.description=Currently Down -SystemsDownTitle=Currently Down +SystemsDownTitle=Currently Down Resources Duration=Duration Message=Message ResType=Resource Types |