class OrchestratorImpl implements Orchestrator {

    @Override
    public Host getHost(HostName hostName) throws HostNameNotFoundException {
        ApplicationInstance applicationInstance = serviceMonitor
                .getApplicationNarrowedTo(hostName)
                .orElseThrow(() -> new HostNameNotFoundException(hostName));

        List<ServiceInstance> serviceInstances = applicationInstance
                .serviceClusters().stream()
                .flatMap(cluster -> cluster.serviceInstances().stream())
                .filter(serviceInstance -> hostName.equals(serviceInstance.hostName()))
                .collect(Collectors.toList());

        HostInfo hostInfo = statusService.getHostInfo(applicationInstance.reference(), hostName);

        return new Host(hostName, hostInfo, applicationInstance.reference(), serviceInstances);
    }

    @Inject public  OrchestratorImpl(ClusterControllerClientFactory clusterControllerClientFactory,
                            StatusService statusService,
                            OrchestratorConfig orchestratorConfig,
                            ServiceMonitor serviceMonitor,
                            ConfigserverConfig configServerConfig,
                            FlagSource flagSource);
    public  OrchestratorImpl(Policy policy,
                            ClusterControllerClientFactory clusterControllerClientFactory,
                            StatusService statusService,
                            ServiceMonitor serviceMonitor,
                            int serviceMonitorConvergenceLatencySeconds,
                            Clock clock,
                            ApplicationApiFactory applicationApiFactory,
                            FlagSource flagSource);

}