in src/kudu/tools/tool_action_tserver.cc [90:154]
Status ListTServers(const RunnerContext& context) {
LeaderMasterProxy proxy;
RETURN_NOT_OK(proxy.Init(context));
ListTabletServersRequestPB req;
ListTabletServersResponsePB resp;
proxy.SyncRpc<ListTabletServersRequestPB, ListTabletServersResponsePB>(
req, &resp, "ListTabletServers", &MasterServiceProxy::ListTabletServers);
if (resp.has_error()) {
return StatusFromPB(resp.error().status());
}
DataTable table({});
const auto& servers = resp.servers();
auto hostport_to_string = [](const HostPortPB& hostport) {
return strings::Substitute("$0:$1", hostport.host(), hostport.port());
};
for (const auto& column : strings::Split(FLAGS_columns, ",", strings::SkipEmpty())) {
vector<string> values;
if (boost::iequals(column, "uuid")) {
for (const auto& server : servers) {
values.emplace_back(server.instance_id().permanent_uuid());
}
} else if (boost::iequals(column, "seqno")) {
for (const auto& server : servers) {
values.emplace_back(std::to_string(server.instance_id().instance_seqno()));
}
} else if (boost::iequals(column, "rpc-addresses") ||
boost::iequals(column, "rpc_addresses")) {
for (const auto& server : servers) {
values.emplace_back(JoinMapped(server.registration().rpc_addresses(),
hostport_to_string, ","));
}
} else if (boost::iequals(column, "http-addresses") ||
boost::iequals(column, "http_addresses")) {
for (const auto& server : servers) {
values.emplace_back(JoinMapped(server.registration().http_addresses(),
hostport_to_string, ","));
}
} else if (boost::iequals(column, "version")) {
for (const auto& server : servers) {
values.emplace_back(server.registration().software_version());
}
} else if (boost::iequals(column, "heartbeat")) {
for (const auto& server : servers) {
values.emplace_back(strings::Substitute("$0ms", server.millis_since_heartbeat()));
}
} else if (boost::iequals(column, "location")) {
for (const auto& server : servers) {
string loc = server.location();
values.emplace_back(loc.empty() ? "<none>" : std::move(loc));
}
} else {
return Status::InvalidArgument("unknown column (--columns)", column);
}
table.AddColumn(column.ToString(), std::move(values));
}
RETURN_NOT_OK(table.PrintTo(cout));
return Status::OK();
}