From: <sc...@hy...> - 2009-05-01 05:44:15
|
Author: scottmf Date: 2009-04-30 22:44:10 -0700 (Thu, 30 Apr 2009) New Revision: 13116 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=13116 Modified: trunk/src/org/hyperic/hq/bizapp/server/session/MeasurementBossEJBImpl.java trunk/src/org/hyperic/hq/bizapp/server/session/MetricSessionEJB.java trunk/src/org/hyperic/hq/measurement/server/session/MeasurementManagerEJBImpl.java Log: cleaned up code and javadocs. Collapsed some availability measurement sql calls. Modified: trunk/src/org/hyperic/hq/bizapp/server/session/MeasurementBossEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/bizapp/server/session/MeasurementBossEJBImpl.java 2009-05-01 03:30:51 UTC (rev 13115) +++ trunk/src/org/hyperic/hq/bizapp/server/session/MeasurementBossEJBImpl.java 2009-05-01 05:44:10 UTC (rev 13116) @@ -1972,18 +1972,21 @@ throws SessionTimeoutException, SessionNotFoundException, AppdefEntityNotFoundException, PermissionException { - List summaries = new ArrayList(); + final List summaries = new ArrayList(); // Create Map of auto-group'd/singleton resources and a List of clusters // since their current health summarizations are not flattened // auto-group'd entities are kept track of in here where keys are the // type id's and the values are lists of resources - HashMap resTypeMap = new HashMap(); + final HashMap resTypeMap = new HashMap(); // to avoid looking up singleton/autogroup resources again later, we // keep them here where keys are AppdefEntityID's and values are the // AppdefResourceValues - HashMap resourcemap = new HashMap(); + final HashMap resourcemap = new HashMap(); + final List appdefVals = Arrays.asList(resources); + final Map tmp = getMetricManager().getAvailMeasurements(appdefVals); + final Map midMap = getMidMap(getAeids(appdefVals), tmp); // keys are type id's and the values are AppdefResourceTypeValues for (int i = 0; i < resources.length; i++) { if (resources[i] instanceof ServiceClusterValue) { @@ -2004,7 +2007,7 @@ memberIds.toArray(new AppdefEntityID[0]); setResourceTypeDisplaySummary(subject, cds, agval.getAppdefResourceTypeValue(), - ids); + ids, midMap); summaries.add(cds); } else { // all of the non-clusters get organized in here @@ -2047,7 +2050,7 @@ } setResourceTypeDisplaySummary(subject, summary, resource.getAppdefResourceTypeValue(), - ids); + ids, midMap); summaries.add(summary); } @@ -2069,7 +2072,7 @@ HashMap resTypeMap = new HashMap(); // keys are type id's and the values are AppdefResources - for (Iterator it = resources.iterator(); it.hasNext(); ) { + for (final Iterator it = resources.iterator(); it.hasNext(); ) { AppdefResource resource = (AppdefResource) it.next(); AppdefResourceType type = resource.getAppdefResourceType(); Integer typeId = type.getId(); @@ -2082,13 +2085,15 @@ // Add resource to list siblings.add(resource); } + final Map measCache = getMetricManager().getAvailMeasurements(resources); + final Map midMap = getMidMap(getAeids(resources), measCache); // first deal with the autogroups and singletons (singletons // are just the degenerative case of an autogroup, why it's // its own type is... silly) for (Iterator it = resTypeMap.entrySet().iterator(); it.hasNext();) { - Map.Entry entry = (Map.Entry) it.next(); - Collection siblings = (Collection) entry.getValue(); + final Map.Entry entry = (Map.Entry) it.next(); + final Collection siblings = (Collection) entry.getValue(); // Make sure we have valid IDs if (siblings == null || siblings.size() == 0) continue; @@ -2119,7 +2124,7 @@ } setResourceTypeDisplaySummary(subject, summary, type.getAppdefResourceTypeValue(), - ids); + ids, midMap); summaries.add(summary); } @@ -2127,12 +2132,10 @@ return summaries; } - private void - setResourceTypeDisplaySummary(AuthzSubject subject, + private void setResourceTypeDisplaySummary(AuthzSubject subject, ResourceTypeDisplaySummary summary, AppdefResourceTypeValue resType, - AppdefEntityID[] ids) - { + AppdefEntityID[] ids, Map midMap) { // Now get each category of measurements long end = System.currentTimeMillis(); @@ -2145,14 +2148,12 @@ // Availability try { - double[] data = getAvailability(subject, ids); + double[] data = getAvailability(subject, ids, midMap, null); if (data.length > 0) { - double sum = 0; for (int i = 0; i < data.length; i++) { sum += data[i]; } - summary.setAvailability( new Double(sum / (double) data.length)); } Modified: trunk/src/org/hyperic/hq/bizapp/server/session/MetricSessionEJB.java =================================================================== --- trunk/src/org/hyperic/hq/bizapp/server/session/MetricSessionEJB.java 2009-05-01 03:30:51 UTC (rev 13115) +++ trunk/src/org/hyperic/hq/bizapp/server/session/MetricSessionEJB.java 2009-05-01 05:44:10 UTC (rev 13116) @@ -41,6 +41,7 @@ import org.apache.commons.logging.LogFactory; import org.hyperic.hq.appdef.Agent; import org.hyperic.hq.appdef.server.session.AgentManagerEJBImpl; +import org.hyperic.hq.appdef.server.session.AppdefResource; import org.hyperic.hq.appdef.server.session.PlatformType; import org.hyperic.hq.appdef.shared.AgentManagerLocal; import org.hyperic.hq.appdef.shared.AgentNotFoundException; @@ -393,26 +394,35 @@ } /** - * @param midMap {@link Map} of {@link AppdefEntityID} to {@link Measurement} + * @param midMap {@link Map} of {@link Integer} to {@link Measurement} + * Integer = Resource.getId() + * @param availCache {@link Map} of {@link Integer} to {@link MetricValue} + * Integer = Measurement.getId() */ - protected double[] getAvailability(AuthzSubject subject, - AppdefEntityID[] ids, - Map midMap, - Map availCache) + protected double[] getAvailability(final AuthzSubject subject, + final AppdefEntityID[] ids, + final Map midMap, + final Map availCache) throws ApplicationNotFoundException, AppdefEntityNotFoundException, PermissionException { final AgentManagerLocal agentMan = AgentManagerEJBImpl.getOne(); - - double[] result = new double[ids.length]; + final double[] result = new double[ids.length]; Arrays.fill(result, MeasurementConstants.AVAIL_UNKNOWN); - - Map data = new HashMap(0); + final Map data = new HashMap(); + final MeasurementManagerLocal mMan = getMetricManager(); + final ResourceManagerLocal rMan = getResourceManager(); if (midMap.size() > 0) { - data = new HashMap(); final List mids = new ArrayList(); - for (final Iterator it=midMap.values().iterator(); it.hasNext(); ) { - final Measurement meas = (Measurement)it.next(); + final List aeids = Arrays.asList(ids); + for (final Iterator it=aeids.iterator(); it.hasNext(); ) { + final AppdefEntityID aeid = (AppdefEntityID)it.next(); + final Resource r = rMan.findResource(aeid); + Measurement meas; + if (null == midMap || + null == (meas = (Measurement)midMap.get(r.getId()))) { + meas = mMan.getAvailabilityMeasurement(r); + } MetricValue mv; if (null != availCache && null != (mv = (MetricValue)availCache.get(meas.getId()))) { @@ -495,7 +505,7 @@ } /** - * @param availCache Map<Integer, MetricValue> + * @param availCache {@link Map} of {@link Integer} to {@link MetricValue} * Integer => Measurement.getId(), may be null. * * Given an array of AppdefEntityID's, disqulifies their aggregate @@ -546,6 +556,37 @@ return sum / count; } + + protected final AppdefEntityID[] getAeids(final Collection resources) { + final AppdefEntityID[] aeids = new AppdefEntityID[resources.size()]; + int i = 0; + for (final Iterator it=resources.iterator(); it.hasNext(); i++) { + final Object o = it.next(); + AppdefEntityID aeid = null; + if (o instanceof AppdefEntityValue) { + final AppdefEntityValue rv = (AppdefEntityValue) o; + aeid = rv.getID(); + } else if (o instanceof AppdefEntityID) { + aeid = (AppdefEntityID) o; + } else if (o instanceof AppdefResource) { + final AppdefResource r = (AppdefResource)o; + aeid = r.getEntityId(); + } else if (o instanceof Resource) { + final Resource resource = (Resource) o; + aeid = new AppdefEntityID(resource); + } else if (o instanceof ResourceGroup) { + final ResourceGroup grp = (ResourceGroup) o; + final Resource resource = grp.getResource(); + aeid = new AppdefEntityID(resource); + } else { + final AppdefResourceValue r = (AppdefResourceValue) o; + aeid = r.getEntityId(); + } + aeids[i] = aeid; + } + return aeids; + + } /** * @return {@link Map} of {@link AppdefEntityID} to {@link Measurement} Modified: trunk/src/org/hyperic/hq/measurement/server/session/MeasurementManagerEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/MeasurementManagerEJBImpl.java 2009-05-01 03:30:51 UTC (rev 13115) +++ trunk/src/org/hyperic/hq/measurement/server/session/MeasurementManagerEJBImpl.java 2009-05-01 05:44:10 UTC (rev 13116) @@ -45,6 +45,7 @@ import org.apache.commons.logging.LogFactory; import org.hyperic.hq.appdef.Agent; import org.hyperic.hq.appdef.AppService; +import org.hyperic.hq.appdef.server.session.AppdefResource; import org.hyperic.hq.appdef.server.session.Application; import org.hyperic.hq.appdef.server.session.ApplicationManagerEJBImpl; import org.hyperic.hq.appdef.server.session.ConfigManagerEJBImpl; @@ -785,7 +786,8 @@ * TODO: scottmf, need to do some more work to handle other authz resource * types other than platform, server, service, and group * - * @return Map<Integer, List<Measurement>>, Integer => Resource.getId(), + * @return {@link Map} of {@link Integer} to {@link List} of + * {@link Measurement}s, Integer => Resource.getId(), * @ejb:interface-method */ public Map getAvailMeasurements(Collection resources) { @@ -803,6 +805,9 @@ } else if (o instanceof AppdefEntityID) { AppdefEntityID aeid = (AppdefEntityID) o; resource = resMan.findResource(aeid); + } else if (o instanceof AppdefResource) { + AppdefResource r = (AppdefResource)o; + resource = resMan.findResource(r.getEntityId()); } else if (o instanceof Resource) { resource = (Resource) o; } else if (o instanceof ResourceGroup) { |