package com.ctrip.framework.apollo.metaservice.controller; import com.ctrip.framework.apollo.core.dto.ServiceDTO; import com.ctrip.framework.apollo.metaservice.service.DiscoveryService; import com.netflix.appinfo.InstanceInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; @RestController @RequestMapping("/services") public class ServiceController { @Autowired private DiscoveryService discoveryService; @RequestMapping("/meta") public List<ServiceDTO> getMetaService() { List<InstanceInfo> instances = discoveryService.getMetaServiceInstances(); List<ServiceDTO> result = instances.stream().map(new Function<InstanceInfo, ServiceDTO>() { @Override public ServiceDTO apply(InstanceInfo instance) { ServiceDTO service = new ServiceDTO(); service.setAppName(instance.getAppName()); service.setInstanceId(instance.getInstanceId()); service.setHomepageUrl(instance.getHomePageUrl()); return service; } }).collect(Collectors.toList()); return result; } @RequestMapping("/config") public List<ServiceDTO> getConfigService( @RequestParam(value = "appId", defaultValue = "") String appId, @RequestParam(value = "ip", required = false) String clientIp) { List<InstanceInfo> instances = discoveryService.getConfigServiceInstances(); List<ServiceDTO> result = instances.stream().map(new Function<InstanceInfo, ServiceDTO>() { @Override public ServiceDTO apply(InstanceInfo instance) { ServiceDTO service = new ServiceDTO(); service.setAppName(instance.getAppName()); service.setInstanceId(instance.getInstanceId()); service.setHomepageUrl(instance.getHomePageUrl()); return service; } }).collect(Collectors.toList()); return result; } @RequestMapping("/admin") public List<ServiceDTO> getAdminService() { List<InstanceInfo> instances = discoveryService.getAdminServiceInstances(); List<ServiceDTO> result = instances.stream().map(new Function<InstanceInfo, ServiceDTO>() { @Override public ServiceDTO apply(InstanceInfo instance) { ServiceDTO service = new ServiceDTO(); service.setAppName(instance.getAppName()); service.setInstanceId(instance.getInstanceId()); service.setHomepageUrl(instance.getHomePageUrl()); return service; } }).collect(Collectors.toList()); return result; } }