private static void incrementInstanceCounts(ServerGroup.InstanceCounts source, ServerGroup.InstanceCounts target) { target.setTotal(target.getTotal() + source.getTotal()); target.setUp(target.getUp() + source.getUp()); target.setDown(target.getDown() + source.getDown()); target.setOutOfService(target.getOutOfService() + source.getOutOfService()); target.setStarting(target.getStarting() + source.getStarting()); target.setUnknown(target.getUnknown() + source.getUnknown()); }
public Status failed(String message) { failed.setMessage(message); failed.setState(true); return this; }
/** * The human-readable name of the instance * * @return human-readable name */ default String getHumanReadableName() { return getName(); }
Map<String, RegionClusterModel> regionClusters = new HashMap<>(); appClusters.stream() .flatMap(ac -> ac.getServerGroups().stream()) .filter(serverGroup -> serverGroup != null && (serverGroup.isDisabled() == null || !serverGroup.isDisabled()) && serverGroup.getInstanceCounts().getTotal() > 0) .forEach((ServerGroup serverGroup) -> { RegionClusterModel regionCluster = regionClusters.computeIfAbsent( serverGroup.getRegion(), s -> new RegionClusterModel(serverGroup.getRegion()) ); incrementInstanceCounts(serverGroup, regionCluster.instanceCounts); ServerGroup.ImagesSummary imagesSummary = serverGroup.getImagesSummary(); List<? extends ServerGroup.ImageSummary> imageSummaries = imagesSummary == null ? new ArrayList() : imagesSummary.getSummaries(); JenkinsBuildInfo buildInfo = extractJenkinsBuildInfo(imageSummaries); Optional<DeployedBuild> existingBuild = regionCluster.builds.stream() b.deployed = Math.max(b.deployed, serverGroup.getCreatedTime()); List images = getServerGroupBuildInfoImages(imageSummaries); if (images != null) { buildInfo.name, buildInfo.number, serverGroup.getCreatedTime(), getServerGroupBuildInfoImages(imageSummaries) ))
EntityTags.EntityRef entityRef = entityTags.getEntityRef(); Optional<NetflixAmazonCredentials> credentials = Optional.ofNullable( accountCredentialsProvider.getCredentials(entityRef.getAccount())) .filter((c) -> c instanceof NetflixAmazonCredentials) .map(NetflixAmazonCredentials.class::cast); log.warn("No account configuration for {}. Unable to determine if '{}' has launch failures", entityRef.getAccount(), entityTags.getId()); return; entityRef.getRegion() ); entityRef.getAccountId(), entityRef.getRegion(), EntityTagger.ENTITY_TYPE_SERVER_GROUP, entityRef.getEntityId(), TAG_NAME ); } catch (Exception e) { log.error("Unable to determine if '{}' has launch failures", entityTags.getId(), e);
private List<RetrievedClusters> retrieveClusters(String application, Project project) { return clusterProviders.get().stream() .map(clusterProvider -> { Map<String, Set<Cluster>> clusterSummariesByAccount = clusterProvider.getClusterSummaries(application); if (clusterSummariesByAccount == null) { return null; } Set<Cluster> allClusterSummaries = clusterSummariesByAccount .values() .stream() .flatMap(Collection::stream) .collect(Collectors.toSet()); Set<Cluster> matchingClusterSummaries = new HashSet<>(); for (ProjectCluster projectCluster : project.config.clusters) { matchingClusterSummaries.addAll(findClustersForProject(allClusterSummaries, projectCluster)); } Set<Cluster> expandedClusters = matchingClusterSummaries .stream() .map(c -> clusterProvider.getCluster(c.getMoniker().getApp(), c.getAccountName(), c.getName())) .collect(Collectors.toSet()); return new RetrievedClusters(application, expandedClusters); }) .filter(Objects::nonNull) .collect(Collectors.toList()); }
ServerGroup.InstanceCounts getInstanceCounts() { ServerGroup.InstanceCounts instanceCounts = new ServerGroup.InstanceCounts(); applications.stream() .flatMap(a -> a.clusters.stream()) .map(c -> c.instanceCounts) .forEach(i -> incrementInstanceCounts(i, instanceCounts)); return instanceCounts; } }
private Set<Cluster> findClustersForProject(Set<Cluster> appClusters, ProjectCluster projectCluster) { if (appClusters == null || appClusters.isEmpty()) { return Collections.emptySet(); } return appClusters.stream() .filter(appCluster -> { Names clusterNameParts = Names.parseName(appCluster.getName()); return appCluster.getAccountName().equals(projectCluster.account) && nameMatches(clusterNameParts.getStack(), projectCluster.stack) && nameMatches(clusterNameParts.getDetail(), projectCluster.detail); }) .collect(Collectors.toSet()); }
/** * Fetch scaling activities and determine if the most recent activity was successful. * * A successful scaling activity is sufficient to indicate that a server group is no longer having launch failures. */ protected boolean hasLaunchFailures(AmazonAutoScaling amazonAutoScaling, EntityTags entityTags) { EntityTags.EntityRef entityRef = entityTags.getEntityRef(); try { DescribeScalingActivitiesResult describeScalingActivitiesResult = amazonAutoScaling.describeScalingActivities( new DescribeScalingActivitiesRequest().withAutoScalingGroupName(entityRef.getEntityId()) ); List<Activity> activities = describeScalingActivitiesResult.getActivities(); return !activities.isEmpty() && !activities.get(0).getStatusCode().equals(ScalingActivityStatusCode.Successful.toString()); } catch (Exception e) { AmazonServiceException amazonServiceException = amazonServiceException(e); if (amazonServiceException != null) { if (amazonServiceException.getErrorMessage().toLowerCase().contains("name not found")) { return false; } } throw e; } }
private static List getServerGroupBuildInfoImages(List<? extends ServerGroup.ImageSummary> imageSummaries) { if (imageSummaries.isEmpty()) { return null; } ServerGroup.ImageSummary imageSummary = imageSummaries.get(0); Map<String, Object> buildInfo = imageSummary.getBuildInfo(); if (buildInfo == null || !buildInfo.containsKey("images")) { return null; } return (List) buildInfo.get("images"); }
private static void incrementInstanceCounts(ServerGroup source, ServerGroup.InstanceCounts target) { incrementInstanceCounts(source.getInstanceCounts(), target); }
@Empty default Set<T> getClusters(String application, String account, boolean includeDetails) { return getClusters(application, account); }
AutoScalingGroup autoScalingGroup = event.getAutoScalingGroup(); if (event.getCapacity() == null || event.getCapacity().getDesired() == null) { return; if (event.getCapacity().getDesired() > 0) { return;
public Status unstable(String message) { stable.setMessage(message); stable.setState(false); return this; }
@Nonnull private static JenkinsBuildInfo extractJenkinsBuildInfo(List<? extends ServerGroup.ImageSummary> imageSummaries) { if (imageSummaries.isEmpty()) { return new JenkinsBuildInfo(); } ServerGroup.ImageSummary imageSummary = imageSummaries.get(0); Map<String, Object> buildInfo = imageSummary.getBuildInfo(); if (buildInfo == null || !buildInfo.containsKey("jenkins")) { return new JenkinsBuildInfo(); } if (!(buildInfo.get("jenkins") instanceof Map)) { return new JenkinsBuildInfo(); } Map jenkinsBuildInfo = (Map) buildInfo.get("jenkins"); String buildNumber = (String) jenkinsBuildInfo.getOrDefault("number", "0"); String host = (String) jenkinsBuildInfo.get("host"); String job = (String) jenkinsBuildInfo.get("name"); return new JenkinsBuildInfo(buildNumber, host, job); }
public Status paused(String message) { paused.setMessage(message); paused.setState(true); return this; }
public Status unavailable(String message) { available.setMessage(message); available.setState(false); return this; }