Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.spotify.helios.cli.command.JobInspectCommand Maven / Gradle / Ivy
package com.spotify.helios.cli.command;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Strings;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import com.spotify.helios.client.HeliosClient;
import com.spotify.helios.common.Json;
import com.spotify.helios.common.descriptors.ExecHealthCheck;
import com.spotify.helios.common.descriptors.HealthCheck;
import com.spotify.helios.common.descriptors.HttpHealthCheck;
import com.spotify.helios.common.descriptors.Job;
import com.spotify.helios.common.descriptors.JobId;
import com.spotify.helios.common.descriptors.PortMapping;
import com.spotify.helios.common.descriptors.ServicePorts;
import com.spotify.helios.common.descriptors.TcpHealthCheck;
import net.sourceforge.argparse4j.inf.Namespace;
import net.sourceforge.argparse4j.inf.Subparser;
import java.io.BufferedReader;
import java.io.PrintStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.concurrent.ExecutionException;
import static com.google.common.base.CharMatcher.WHITESPACE;
import static com.spotify.helios.cli.Utils.printMap;
public class JobInspectCommand extends WildcardJobCommand {
private static final DateFormat DATE_FORMATTER =
new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z" );
private static final Function QUOTE = new Function() {
@Override
public String apply (final String input) {
return quote(input);
}
};
private static final Function FORMAT_PORTMAPPING =
new Function() {
@Override
public String apply (final PortMapping input) {
String s = String.valueOf(input.getInternalPort());
if (input.getExternalPort() != null ) {
s += ":" + input.getExternalPort();
}
if (input.getProtocol() != null ) {
s += "/" + input.getProtocol();
}
return s;
}
};
private static final Function FORMAT_SERVICE_PORTS =
new Function() {
@Override
public String apply (final ServicePorts input) {
return Joiner.on(", " ).join(Ordering.natural().sortedCopy(input.getPorts().keySet()));
}
};
private static String formatHealthCheck (final HealthCheck healthCheck) {
if (healthCheck == null ) {
return "" ;
}
String s = String.format("type: %s" , String.valueOf(healthCheck.getType()));
if (healthCheck instanceof HttpHealthCheck) {
final HttpHealthCheck httpHealthCheck = (HttpHealthCheck) healthCheck;
s += String.format(", port: %s, path: %s" , httpHealthCheck.getPort(),
httpHealthCheck.getPath());
} else if (healthCheck instanceof TcpHealthCheck) {
final TcpHealthCheck tcpHealthCheck = (TcpHealthCheck) healthCheck;
s += String.format(", port: %s" , tcpHealthCheck.getPort());
} else if (healthCheck instanceof ExecHealthCheck) {
final ExecHealthCheck execHealthCheck = (ExecHealthCheck) healthCheck;
s += String.format(", command: %s" , Joiner.on(" " ).join(execHealthCheck.getCommand()));
}
return s;
}
public JobInspectCommand (final Subparser parser) {
super (parser);
parser.help("print the configuration of a job" );
}
public JobInspectCommand (final Subparser parser, final TimeZone timeZone) {
super (parser);
DATE_FORMATTER.setTimeZone(timeZone);
parser.help("print the configuration of a job" );
}
@Override
protected int runWithJobId (final Namespace options, final HeliosClient client,
final PrintStream out, final boolean json, final JobId jobId,
final BufferedReader stdin)
throws ExecutionException, InterruptedException {
final Map jobs = client.jobs(jobId.toString()).get();
if (jobs.size() == 0 ) {
out.printf("Unknown job: %s%n" , jobId);
return 1 ;
}
final Job job = Iterables.getOnlyElement(jobs.values());
if (json) {
out.println(Json.asPrettyStringUnchecked(job));
} else {
out.printf("Id: %s%n" , job.getId());
out.printf("Image: %s%n" , job.getImage());
out.printf("Created: %s%n" ,
job.getCreated() == null ? "" : DATE_FORMATTER.format(new Date(job.getCreated())));
out.printf("Expires: %s%n" ,
job.getExpires() == null ? "never" : DATE_FORMATTER.format(job.getExpires()));
out.printf("Hostname: %s%n" , job.getHostname());
out.printf("Command: %s%n" , quote(job.getCommand()));
printMap(out, "Env: " , QUOTE, job.getEnv());
out.printf("Health check: %s%n" , formatHealthCheck(job.getHealthCheck()));
out.printf("Grace period (seconds): %s%n" , job.getGracePeriod());
printMap(out, "Metadata: " , QUOTE, job.getMetadata());
printMap(out, "Ports: " , FORMAT_PORTMAPPING, job.getPorts());
printMap(out, "Reg: " , FORMAT_SERVICE_PORTS, job.getRegistration());
out.printf("Security options: %s%n" , job.getSecurityOpt());
out.printf("Network mode: %s%n" , job.getNetworkMode());
out.printf("Token: %s%n" , job.getToken());
printVolumes(out, job.getVolumes());
out.printf("Add capabilities: %s%n" , Joiner.on(", " ).join(job.getAddCapabilities()));
out.printf("Drop capabilities: %s%n" , Joiner.on(", " ).join(job.getDropCapabilities()));
}
return 0 ;
}
private void printVolumes (final PrintStream out, final Map volumes) {
final String prefix = "Volumes: " ;
out.print(prefix);
boolean first = true ;
for (final Map.Entry entry : volumes.entrySet()) {
if (!first) {
out.print(Strings.repeat(" " , prefix.length()));
}
final String path = entry.getValue();
final String source = entry.getKey();
if (source == null ) {
out.printf("%s%n" , path);
} else {
out.printf("%s:%s%n" , path, source);
}
first = false ;
}
if (first) {
out.println();
}
}
private static String quote (final String s) {
if (s == null ) {
return "" ;
}
return WHITESPACE.matchesAnyOf(s)
? '"' + s + '"'
: s;
}
private static List quote (final List ss) {
final List output = Lists.newArrayList();
for (final String s : ss) {
output.add(quote(s));
}
return output;
}
}