package io.airlift.airship.cli;
import com.google.common.collect.Iterables;
import io.airlift.airship.shared.AgentStatusRepresentation;
import io.airlift.airship.shared.CoordinatorStatusRepresentation;
import io.airlift.airship.shared.SlotStatusRepresentation;
import static io.airlift.airship.cli.AgentRecord.toAgentRecords;
import static io.airlift.airship.cli.Column.externalHost;
import static io.airlift.airship.cli.Column.instanceType;
import static io.airlift.airship.cli.Column.internalHost;
import static io.airlift.airship.cli.Column.machine;
import static io.airlift.airship.cli.Column.shortBinary;
import static io.airlift.airship.cli.Column.shortConfig;
import static io.airlift.airship.cli.Column.shortId;
import static io.airlift.airship.cli.Column.shortLocation;
import static io.airlift.airship.cli.Column.status;
import static io.airlift.airship.cli.Column.statusMessage;
import static io.airlift.airship.cli.CoordinatorRecord.toCoordinatorRecords;
import static io.airlift.airship.cli.SlotRecord.toSlotRecords;
public class TableOutputFormat
implements OutputFormat
{
private final String environmentRef;
private final Config config;
public TableOutputFormat(String environmentRef, Config config)
{
this.environmentRef = environmentRef;
this.config = config;
}
@Override
public void displaySlots(Iterable<SlotStatusRepresentation> slots)
{
if (Iterables.isEmpty(slots)) {
System.out.println("No slots match the provided filters.");
}
else {
TablePrinter tablePrinter = new TablePrinter(shortId, getHostColumn(), machine, status, shortBinary, shortConfig, statusMessage);
tablePrinter.print(toSlotRecords(slots));
}
}
@Override
public void displayAgents(Iterable<AgentStatusRepresentation> agents)
{
if (Iterables.isEmpty(agents)) {
System.out.println("No agents match the provided filters.");
}
else {
TablePrinter tablePrinter = new TablePrinter(shortId, getHostColumn(), machine, status, instanceType, shortLocation);
tablePrinter.print(toAgentRecords(agents));
}
}
@Override
public void displayCoordinators(Iterable<CoordinatorStatusRepresentation> coordinators)
{
if (Iterables.isEmpty(coordinators)) {
System.out.println("No coordinators match the provided filters.");
}
else {
// todo add short id once coordinator is update to get coordinator id from remote coordinators
TablePrinter tablePrinter = new TablePrinter(machine, getHostColumn(), status, instanceType, shortLocation);
tablePrinter.print(toCoordinatorRecords(coordinators));
}
}
private Column getHostColumn()
{
if ("true".equalsIgnoreCase(config.get("environment." + environmentRef + ".use-internal-address"))) {
return internalHost;
}
else {
return externalHost;
}
}
}