class HostResource implements HostApi {

    @Override
    public GetHostResponse getHost(String hostNameString) {
        HostName hostName = new HostName(hostNameString);
        try {
            Host host = orchestrator.getHost(hostName);

            URI applicationUri = uriInfo.getBaseUriBuilder()
                    .path(InstanceResource.class)
                    .path(host.getApplicationInstanceReference().asString())
                    .build();

            List<HostService> hostServices = host.getServiceInstances().stream()
                    .map(serviceInstance -> new HostService(
                            serviceInstance.getServiceCluster().clusterId().s(),
                            serviceInstance.getServiceCluster().serviceType().s(),
                            serviceInstance.configId().s(),
                            serviceInstance.serviceStatus().name()))
                    .collect(Collectors.toList());

            return new GetHostResponse(
                    host.getHostName().s(),
                    host.getHostInfo().status().name(),
                    host.getHostInfo().suspendedSince().map(Instant::toString).orElse(null),
                    applicationUri.toString(),
                    hostServices);
        } catch (UncheckedTimeoutException e) {
            log.log(Level.FINE, "Failed to get host " + hostName + ": " + e.getMessage());
            throw webExceptionFromTimeout("getHost", hostName, e);
        } catch (HostNameNotFoundException e) {
            log.log(Level.FINE, "Host not found: " + hostName);
            throw new NotFoundException(e);
        }
    }

    @Inject public  HostResource(@Component Orchestrator orchestrator, @Context UriInfo uriInfo);

}