package com.vci.ubcs.deploy.service.impl;
|
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.nacos.shaded.com.google.protobuf.ServiceException;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.vci.ubcs.deploy.entity.DeployApps;
|
import com.vci.ubcs.deploy.entity.Instance;
|
import com.vci.ubcs.deploy.mapper.DeployAppsMapper;
|
import com.vci.ubcs.deploy.service.IDeployAppsService;
|
import com.vci.ubcs.deploy.vo.DeployAppsVO;
|
import com.vci.ubcs.starter.util.HttpUtils;
|
import org.springblade.core.tool.utils.Func;
|
import org.springblade.core.tool.utils.UrlUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.cloud.client.ServiceInstance;
|
import org.springframework.cloud.client.discovery.DiscoveryClient;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.MediaType;
|
import org.springframework.stereotype.Service;
|
|
import javax.servlet.ServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
import java.net.URL;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* @author ludc
|
* @date 2024/1/7 19:54
|
*/
|
@Service
|
public class DeployAppsServiceImpl extends ServiceImpl<DeployAppsMapper, DeployApps> implements IDeployAppsService {
|
|
@Autowired
|
private DeployAppsMapper deployAppsMapper;
|
|
@Value("${password-free.pwd-free-addr:localhost}")
|
private String pwdFreeAddr;
|
|
// 通过服务注册中心获取网关的端口号
|
@Autowired
|
private DiscoveryClient discoveryClient;
|
|
@Override
|
public List<DeployAppsVO> getApplications(ServletRequest servletRequest) throws ServiceException {
|
HttpServletRequest request = (HttpServletRequest) servletRequest;
|
String baldeAuth = request.getHeaders("Blade-Auth").nextElement();
|
String cookie = request.getHeaders("Cookie").nextElement();
|
// 免密登录接口地址
|
String loginUrl = "http://"+pwdFreeAddr+":"+this.getGatewayPort("ubcs-gateway")+"/ubcs-admin/applications";
|
log.debug("获取服务信息调用地址:"+loginUrl);
|
// 请求ubcs-admin获取服务信息
|
HttpHeaders headers = new HttpHeaders();
|
ArrayList<MediaType> mediaTypes = new ArrayList<>();
|
mediaTypes.add(MediaType.APPLICATION_JSON);
|
headers.set("Authorization","Basic c2FiZXI6c2FiZXJfc2VjcmV0");
|
headers.set("Blade-Auth",baldeAuth);
|
headers.set("Cookie",cookie);
|
headers.setAccept(mediaTypes);
|
List<DeployAppsVO> deployAppsVOList = new ArrayList<>();
|
try {
|
// 发送GET请求
|
String responseBody = HttpUtils.get(loginUrl, headers);
|
if(Func.isNotEmpty(responseBody)){
|
// 将 JSON 字符串转换为 JSONArray
|
JSONArray jsonArray = JSON.parseArray(responseBody);
|
for (Object obj : jsonArray) {
|
DeployAppsVO deployAppsVO = new DeployAppsVO();
|
JSONObject jsonObject = (JSONObject) obj;
|
List instances = ((List) jsonObject.get("instances"));
|
deployAppsVO.setName(jsonObject.get("name").toString());
|
String serviceUrl = ((JSONObject) ((JSONObject) instances.get(0)).get("registration")).get("serviceUrl").toString();
|
deployAppsVO.setPort(String.valueOf(new URL(serviceUrl).getPort()));
|
deployAppsVO.setServiceNum(instances.size());
|
deployAppsVO.setStatus(jsonObject.get("status").toString());
|
deployAppsVO.setStatusTimestamp(jsonObject.get("statusTimestamp").toString());
|
deployAppsVOList.add(deployAppsVO);
|
}
|
|
}
|
}catch (Exception e){
|
throw new ServiceException("调用ubcs-admin获取服务信息失败,原因:"+e.getMessage());
|
}
|
return deployAppsVOList;
|
}
|
|
/**
|
* 根据服务名获取端口号
|
* @param serviceId
|
* @return
|
*/
|
public String getGatewayPort(String serviceId) {
|
List<ServiceInstance> instances = discoveryClient.getInstances(serviceId);
|
if (!instances.isEmpty()) {
|
ServiceInstance gatewayInstance = instances.get(0);
|
return String.valueOf(gatewayInstance.getPort());
|
}
|
return "8080";
|
}
|
|
|
}
|