From: <jt...@hy...> - 2008-01-04 23:49:25
|
Author: jtravis Date: 2008-01-04 15:49:21 -0800 (Fri, 04 Jan 2008) New Revision: 7415 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=7415 Modified: trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementDAO.java trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java Log: HHQ-1461. add findNumMetricsPerAgent() Modified: trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementDAO.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementDAO.java 2008-01-04 22:10:02 UTC (rev 7414) +++ trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementDAO.java 2008-01-04 23:49:21 UTC (rev 7415) @@ -37,6 +37,7 @@ import org.hibernate.Session; import org.hibernate.criterion.Restrictions; import org.hyperic.dao.DAOFactory; +import org.hyperic.hq.appdef.server.session.AgentManagerEJBImpl; import org.hyperic.hq.appdef.shared.AppdefEntityID; import org.hyperic.hq.appdef.shared.AppdefUtil; import org.hyperic.hq.dao.HibernateDAO; @@ -498,4 +499,73 @@ return getSession().createQuery(sql).list(); } + + /** + * @see DerivedMeasurementManagerEJBImpl#findNumMetricsPerAgent() + */ + Map findNumMetricsPerAgent() { + String platSQL = + "select a.id, count(m) from Agent a " + + "join a.platforms p, " + + "Measurement as m " + + "join m.template templ " + + "join templ.monitorableType monType " + + "where " + + " monType.appdefType = '1' and m.instanceId = p.id " + + "and m.enabled = true " + + "group by a"; + String serverSQL = + "select a.id, count(m) from Agent a " + + "join a.platforms p " + + "join p.servers s, " + + "Measurement as m " + + "join m.template templ " + + "join templ.monitorableType monType " + + "where " + + " monType.appdefType = '2' and m.instanceId = s.id " + + "and m.enabled = true " + + "group by a"; + String serviceSQL = + "select a.id, count(m) from Agent a " + + "join a.platforms p " + + "join p.servers s " + + "join s.services v, " + + "Measurement as m " + + "join m.template templ " + + "join templ.monitorableType monType " + + "where " + + " monType.appdefType = '3' and m.instanceId = v.id " + + "and m.enabled = true " + + "group by a"; + String[] queries = {platSQL, serverSQL, serviceSQL}; + Map idToCount = new HashMap(); + + for (int i=0; i<queries.length; i++) { + List tuples = getSession().createQuery(queries[i]).list(); + + for (Iterator j=tuples.iterator(); j.hasNext(); ) { + Object[] tuple = (Object[])j.next(); + Integer id = (Integer)tuple[0]; + java.lang.Number count = (java.lang.Number)tuple[1]; + Long curCount; + + curCount = (Long)idToCount.get(id); + if (curCount == null) { + curCount = new Long(0); + } + curCount = new Long(curCount.longValue() + count.longValue()); + idToCount.put(id, curCount); + } + } + + Map res = new HashMap(idToCount.size()); + for (Iterator i=idToCount.entrySet().iterator(); i.hasNext(); ) { + Map.Entry ent = (Map.Entry)i.next(); + Integer id = (Integer)ent.getKey(); + Long count = (Long)ent.getValue(); + + res.put(AgentManagerEJBImpl.getOne().findAgentPojo(id), count); + } + return res; + } } Modified: trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java 2008-01-04 22:10:02 UTC (rev 7414) +++ trunk/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java 2008-01-04 23:49:21 UTC (rev 7415) @@ -46,6 +46,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hyperic.hq.appdef.Agent; import org.hyperic.hq.appdef.server.session.ConfigManagerEJBImpl; import org.hyperic.hq.appdef.server.session.ResourceCreatedZevent; import org.hyperic.hq.appdef.server.session.ResourceRefreshZevent; @@ -1376,6 +1377,17 @@ } /** + * Get the # of metrics that each agent is collecting. + * + * @return a map of {@link Agent} onto Longs indicating how many metrics + * that agent is collecting. + * @ejb:interface-method + */ + public Map findNumMetricsPerAgent() { + return getDerivedMeasurementDAO().findNumMetricsPerAgent(); + } + + /** * Handle events from the {@link MeasurementEnabler}. This method * is required to place the operation within a transaction (and session) * |