@Override public String toString() { return toString(false); }
public void setEnablementReport(boolean enablementReport) { this.enablementReport = enablementReport; // all enablement reports are generated server side if (enablementReport) { setServerSideReport(true); } }
/** * Tries to find the availability for given resource in this report. * * @param resourceId the id of the resource to look for * @return the availability type found in this report for given report on null if not found */ public AvailabilityType forResource(int resourceId) { for(Datum d : availabilities) { if (d.getResourceId() == resourceId) { return d.getAvailabilityType(); } } return null; }
@Override @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public void setResourceAvailabilities(Map<Agent, int[]> map, AvailabilityType avail) { long now = System.currentTimeMillis(); for (Agent agent : map.keySet()) { AvailabilityReport report = new AvailabilityReport(true, null); report.setServerSideReport(true); for (int resourceId : map.get(agent)) { report.addAvailability(new Datum(resourceId, avail, now)); } AvailabilityReportSerializer.getSingleton().lock(agent.getName()); try { this.availabilityManager.mergeAvailabilityReport(report); } finally { AvailabilityReportSerializer.getSingleton().unlock(agent.getName()); } } return; }
/** * Shows the list of availabilities known so far * for resources that have been discovered * @param tokens tokenized command line tokens[0] is the command itself */ private void avail(String[] tokens) { Set<Resource> resources = getResources(); int id = getResourceIdFromTokens(tokens, 0); for (Resource res : resources) { if (id == 0 || (res.getId() == id)) { AvailabilityReport availabilityReport = inventoryManager.getCurrentAvailability(res, false); for(AvailabilityReport.Datum datum : availabilityReport.getResourceAvailability()) { if (datum.getResourceId() == res.getId()) { System.out.println(res.getName() + "( " + res.getId() + " ):" + datum.getAvailabilityType()); break; } } } } }
ResourceSyncInfo platformResourceSyncInfo = platformSyncInfo.getPlatform(); allServerSideUuids.add(platformResourceSyncInfo.getUuid()); addAllUuids(platformSyncInfo.getServices(), allServerSideUuids); Collection<ResourceSyncInfo> syncInfos = platformSyncInfo.getServices(); syncInfos.add(platformResourceSyncInfo); log.info("Sync Starting: Platform [" + platformSyncInfo.getPlatform().getId() + "]"); log.info("Sync Starting: Platform Top level services [" + platformSyncInfo.getPlatform().getId() + "]"); boolean hadSyncedResources = syncResources(platformResourceSyncInfo.getId(), syncInfos); log.info("Sync Complete: Platform Top level services [" + platformSyncInfo.getPlatform().getId() + "] Local inventory changed: [" + hadSyncedResources + "]"); Collection<Integer> topLevelServerIds = platformSyncInfo.getTopLevelServerIds(); if (null != topLevelServerIds) { DiscoveryServerService service = configuration.getServerServices().getDiscoveryServerService(); log.info("Sync Complete: Platform [" + platformSyncInfo.getPlatform().getId() + "]."); + platformSyncInfo.getPlatform().getId() + "]");
public static PlatformSyncInfo buildPlatformSyncInfo(Resource platform) { Set<Integer> toplevelServerIds = new HashSet<Integer>(); for (Resource r : platform.getChildResources()) { if (r.getResourceType().getCategory().equals(ResourceCategory.SERVER)) { toplevelServerIds.add(r.getId()); } } ResourceSyncInfo resSyncInfo = ResourceSyncInfo.buildResourceSyncInfo(platform); PlatformSyncInfo syncInfo = new PlatformSyncInfo(resSyncInfo, new HashSet<ResourceSyncInfo>(1), toplevelServerIds); return syncInfo; } }
@Override public boolean mergeAvailabilityReport(AvailabilityReport availabilityReport) { AvailabilityReportSerializer.getSingleton().lock(availabilityReport.getAgentName()); try { String reportToString = availabilityReport.toString(false); if (log.isDebugEnabled()) log.debug("Processing " + reportToString); long start = System.currentTimeMillis(); AvailabilityManagerLocal availabilityManager = LookupUtil.getAvailabilityManager(); boolean ok = availabilityManager.mergeAvailabilityReport(availabilityReport); long elapsed = (System.currentTimeMillis() - start); if (elapsed > 20000L) { log.warn("Performance: processed " + reportToString + " - needFull=[" + !ok + "] in (" + elapsed + ")ms"); } else { if (log.isDebugEnabled()) { log.debug("Performance: processed " + reportToString + " - needFull=[" + !ok + "] in (" + elapsed + ")ms"); } } return ok; } catch (Exception e) { log.info("Error processing availability report from [" + availabilityReport.getAgentName() + "]: " + ThrowableUtil.getAllMessages(e)); return true; // not sure what happened, but avoid infinite recursion during error conditions; do not ask for a full report } finally { AvailabilityReportSerializer.getSingleton().unlock(availabilityReport.getAgentName()); } }
@Override public void synchronizePlatform(PlatformSyncInfo syncInfo) { syncPlatform(syncInfo); performServiceScan(syncInfo.getPlatform().getId()); // NOTE: This will block (the initial scan blocks). // TODO: (jshaughn) should we also request a full avail scan? }
@Override public MergeResourceResponse addResource(Resource resource, int creatorSubjectId) { return new MergeResourceResponse(manualAddResourceCounter++, System.currentTimeMillis(), false); }
public void addAvailability(Availability availability) { this.availabilities.add(new Datum(availability)); }
/** * At the time of writing (4.10) platform top level services don't have children so this will be quick, but * write it to handle any future children. In general this will still be a relatively small number of resources. * * @param topLevelServices * @return The top level service hierarchy sync info */ private Set<ResourceSyncInfo> getToplevelServiceSyncInfo(Set<Resource> topLevelServices) { Set<ResourceSyncInfo> result = new HashSet<ResourceSyncInfo>(topLevelServices.size()); Set<Integer> topLevelServiceIds = new HashSet<Integer>(); for (Resource topLevelService : topLevelServices) { result.add(ResourceSyncInfo.buildResourceSyncInfo(topLevelService)); topLevelServiceIds.add(topLevelService.getId()); } getToplevelServiceSyncInfoHierarchy(topLevelServiceIds, result); return result; }
private void getToplevelServiceSyncInfoHierarchy(Set<Integer> parentIds, Set<ResourceSyncInfo> result) { if (parentIds.isEmpty()) { return; } Query q = entityManager.createNamedQuery(ResourceSyncInfo.QUERY_SERVICE_CHILDREN); q.setParameter("parentIds", parentIds); List<ResourceSyncInfo> childSyncInfos = q.getResultList(); if (!childSyncInfos.isEmpty()) { result.addAll(childSyncInfos); Set<Integer> childIds = new HashSet<Integer>(childSyncInfos.size()); for (ResourceSyncInfo childSyncInfo : childSyncInfos) { childIds.add(childSyncInfo.getId()); } getToplevelServiceSyncInfoHierarchy(childIds, result); } }
static public ResourceSyncInfo buildResourceSyncInfo(Resource res) { return new ResourceSyncInfo(res.getId(), res.getUuid(), res.getMtime(), res.getInventoryStatus()); } }
public boolean isServerSideReport() { return report.isServerSideReport(); }
public boolean isEnablementReport() { return report.isEnablementReport(); }
private void addAllUuids(Collection<ResourceSyncInfo> syncInfos, Set<String> allServerSideUuids) { for (ResourceSyncInfo syncInfo : syncInfos) { allServerSideUuids.add(syncInfo.getUuid()); } }
public MergeInventoryReportResults(PlatformSyncInfo psi, Collection<ResourceType> ignoredResourceTypes) { platformSyncInfo = psi; if (ignoredResourceTypes == null || ignoredResourceTypes.isEmpty()) { this.ignoredResourceTypes = null; } else { this.ignoredResourceTypes = new ArrayList<ResourceTypeFlyweight>(ignoredResourceTypes.size()); for (ResourceType ignoredType : ignoredResourceTypes) { this.ignoredResourceTypes.add(new ResourceTypeFlyweight(ignoredType)); } } }
@Override public PlatformSyncInfo getPlatformSyncInfo(Agent knownAgent) { Resource platform = resourceManager.getPlatform(knownAgent); if (null == platform) { return null; } Set<Resource> toplevelServices = new HashSet<Resource>(); Set<Integer> topLevelServerIds = new HashSet<Integer>(); for (Resource platformChild : platform.getChildResources()) { switch (platformChild.getResourceType().getCategory()) { case SERVER: topLevelServerIds.add(platformChild.getId()); break; case SERVICE: toplevelServices.add(platformChild); break; default: break; } } ResourceSyncInfo platformSyncInfo = ResourceSyncInfo.buildResourceSyncInfo(platform); Set<ResourceSyncInfo> topLevelServiceSyncInfo = getToplevelServiceSyncInfo(toplevelServices); PlatformSyncInfo result = new PlatformSyncInfo(platformSyncInfo, topLevelServiceSyncInfo, topLevelServerIds); return result; }
public String toString(boolean includeAll) { return report.toString(includeAll); } }