private JobStatus filterJobStatus(final JobStatus jobStatus, final Iterable<String> matchingHosts) { final Map<String, TaskStatus> taskStatuses = Maps.newHashMap(jobStatus.getTaskStatuses()); final Set<String> matchingHostSet = Sets.newHashSet(matchingHosts); for (final String key : Sets.newHashSet(taskStatuses.keySet())) { if (!matchingHostSet.contains(key)) { taskStatuses.remove(key); } } final Map<String, Deployment> deployments = Maps.newHashMap(jobStatus.getDeployments()); for (final String key : Sets.newHashSet(deployments.keySet())) { if (!matchingHostSet.contains(key)) { deployments.remove(key); } } return JobStatus.newBuilder() .setJob(jobStatus.getJob()) .setDeployments(deployments) .setTaskStatuses(taskStatuses) .build(); }
public JobStatus build() { return new JobStatus(this); } }
@Override public void matchedStatus(JobStatus jobStatus, Iterable<String> matchingHosts, Map<String, TaskStatus> taskStatuses) { for (final String host : matchingHosts) { final Map<String, Deployment> deployments = jobStatus.getDeployments(); final Deployment deployment = (deployments == null) ? null : deployments.get(host); if (deployment != null) { returnStatuses.put(jobStatus.getJob().getId(), filterJobStatus(jobStatus, matchingHosts)); } } }
final Map<String, TaskStatus> taskStatuses = new TreeMap<>(jobStatus.getTaskStatuses()); for (final String host : jobStatus.getDeployments().keySet()) { if (!taskStatuses.containsKey(host)) { taskStatuses.put(host, null);
private Map<JobId, JobStatus> getJobStatuses( final HeliosClient client, final Map<JobId, Job> jobs, final boolean deployed) throws InterruptedException, ExecutionException { final Map<JobId, JobStatus> jobStatuses = client.jobStatuses(jobs.keySet()).get(); // maybe filter on deployed jobs final Map<JobId, JobStatus> filteredJobStatuses = Maps.newHashMap(); if (!deployed) { filteredJobStatuses.putAll(jobStatuses); } else { for (final Entry<JobId, JobStatus> e : jobStatuses.entrySet()) { if (!e.getValue().getDeployments().isEmpty()) { filteredJobStatuses.put(e.getKey(), e.getValue()); } } } return filteredJobStatuses; }
@Override public TaskStatus call() throws Exception { final JobStatus jobStatus = client.jobStatus(jobId).get(); final TaskStatus taskStatus = jobStatus.getTaskStatuses().get(testHost()); return taskStatus != null && Objects.equals(taskStatus.getContainerId(), secondRestartedContainerId) ? taskStatus : null; } });
return JobStatus.newBuilder() .setJob(job) .setDeployments(deploymentsMap)
@Override public void matchedStatus(JobStatus jobStatus, Iterable<String> matchingHosts, Map<String, TaskStatus> taskStatuses) { displayTask(full, table, jobStatus.getJob().getId(), jobStatus, taskStatuses, matchingHosts); } });
private void displayTask(final boolean full, final JobStatusTable table, final JobId jobId, final JobStatus jobStatus, final Map<String, TaskStatus> taskStatuses, final Iterable<String> matchingHosts) { for (final String host : matchingHosts) { final Map<String, Deployment> deployments = jobStatus.getDeployments(); final TaskStatus ts = taskStatuses.get(host); final Deployment deployment = (deployments == null) ? null : deployments.get(host); table.task(jobId, formatHostname(full, host), ts, deployment); } } }
assertTrue(cliStatuses.containsKey(jobId)); final JobStatus status = cliStatuses.get(jobId); assertEquals("deployments should have only one item", 1, status.getDeployments().size()); assertTrue("should only have deployment info for aHost", status.getDeployments().containsKey(aHost)); assertEquals("Task statuses should only have one item", 1, status.getTaskStatuses().size()); assertTrue("should only have status info for aHost", status.getTaskStatuses().containsKey(aHost));
@Override public void matchedStatus(JobStatus jobStatus, Iterable<String> matchingHosts, Map<String, TaskStatus> taskStatuses) { for (final String host : matchingHosts) { final Map<String, Deployment> deployments = jobStatus.getDeployments(); final Deployment deployment = (deployments == null) ? null : deployments.get(host); if (deployment != null) { returnStatuses.put(jobStatus.getJob().getId(), filterJobStatus(jobStatus, matchingHosts)); } } }
@Override public Object call() throws Exception { final JobStatus jobStatus = getOrNull(client.jobStatus(jobId)); final TaskStatus taskStatus = jobStatus.getTaskStatuses().get(host); if (taskStatus.getThrottled() == FLAPPING) { return true; } final PortMapping port = taskStatus.getPorts().get("poke"); assert port.getExternalPort() != null; poke(port.getExternalPort()); return null; } });
return JobStatus.newBuilder() .setJob(job) .setDeployments(deploymentsMap)
final Job job = statuses.get(jobId).getJob(); assertEquals(ServicePorts.of("foo"), job.getRegistration().get(ServiceEndpoint.of("foo-service", "tcp")));
private JobStatus filterJobStatus(final JobStatus jobStatus, final Iterable<String> matchingHosts) { final Map<String, TaskStatus> taskStatuses = Maps.newHashMap(jobStatus.getTaskStatuses()); final Set<String> matchingHostSet = Sets.newHashSet(matchingHosts); for (final String key : Sets.newHashSet(taskStatuses.keySet())) { if (!matchingHostSet.contains(key)) { taskStatuses.remove(key); } } final Map<String, Deployment> deployments = Maps.newHashMap(jobStatus.getDeployments()); for (final String key : Sets.newHashSet(deployments.keySet())) { if (!matchingHostSet.contains(key)) { deployments.remove(key); } } return JobStatus.newBuilder() .setJob(jobStatus.getJob()) .setDeployments(deployments) .setTaskStatuses(taskStatuses) .build(); }
protected void undeployJob(final JobId jobId, final String host) throws Exception { final String undeployOutput = cli("undeploy", jobId.toString(), host); assertThat(undeployOutput, containsString(host + ": done")); final String output = cli("status", "--host", host, "--json"); final Map<JobId, JobStatus> statuses = Json.readUnchecked(output, new TypeReference<Map<JobId, JobStatus>>() { }); final JobStatus status = statuses.get(jobId); assertTrue(status == null || status.getDeployments().get(host) == null); }
private boolean showStatusesForHosts(final String hostPattern, final Set<JobId> jobIds, final Map<JobId, JobStatus> statuses, final HostStatusDisplayer statusDisplayer) { boolean noHostMatchedEver = true; for (final JobId jobId : Ordering.natural().sortedCopy(jobIds)) { final JobStatus jobStatus = statuses.get(jobId); // jobStatus will be null if the job was deleted after we first got the list of job IDs if (jobStatus == null) { continue; } final Map<String, TaskStatus> taskStatuses = Maps.newTreeMap(); taskStatuses.putAll(jobStatus.getTaskStatuses()); // Add keys for jobs that were deployed to a host, // but for which we didn't get a reported task status. // This will help us see hosts where jobs aren't running correctly. for (final String host : jobStatus.getDeployments().keySet()) { if (!taskStatuses.containsKey(host)) { taskStatuses.put(host, null); } } final FluentIterable<String> matchingHosts = FluentIterable .from(taskStatuses.keySet()) .filter(containsPattern(hostPattern)); if (Strings.isNullOrEmpty(hostPattern) || !Strings.isNullOrEmpty(hostPattern) && !matchingHosts.isEmpty()) { noHostMatchedEver = false; } statusDisplayer.matchedStatus(jobStatus, matchingHosts, taskStatuses); } return noHostMatchedEver; }
@Override public TaskStatus call() throws Exception { final String output = cli("status", "--json", "--job", jobId.toString()); final Map<JobId, JobStatus> statusMap; try { statusMap = Json.read(output, new TypeReference<Map<JobId, JobStatus>>() {}); } catch (IOException e) { return null; } final JobStatus status = statusMap.get(jobId); if (status == null) { return null; } final TaskStatus taskStatus = status.getTaskStatuses().get(host); if (taskStatus == null) { return null; } if (taskStatus.getState() != state) { return null; } return taskStatus; } });
@Override public void matchedStatus(JobStatus jobStatus, Iterable<String> matchingHosts, Map<String, TaskStatus> taskStatuses) { displayTask(full, table, jobStatus.getJob().getId(), jobStatus, taskStatuses, matchingHosts); } });
} else if (job.getExpires().getTime() <= clock.now().getMillis()) { final JobStatus status = masterModel.getJobStatus(jobId); final List<String> hosts = ImmutableList.copyOf(status.getDeployments().keySet());