goupan
2024-04-03 5506e9a45e717ffcb67ec313b5a4e8206d9b3a39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package cn.stylefeng.roses.kernel.scanner.devops;
 
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.stylefeng.roses.kernel.jwt.JwtTokenOperator;
import cn.stylefeng.roses.kernel.jwt.api.pojo.config.JwtConfig;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.scanner.api.DevOpsReportApi;
import cn.stylefeng.roses.kernel.scanner.api.exception.ScannerException;
import cn.stylefeng.roses.kernel.scanner.api.exception.enums.DevOpsExceptionEnum;
import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportProperties;
import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportResourceParam;
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo;
import com.alibaba.fastjson.JSON;
 
import java.util.HashMap;
import java.util.List;
 
import static cn.stylefeng.roses.kernel.scanner.api.constants.ScannerConstants.*;
 
/**
 * 运维平台资源汇报过程
 *
 * @author fengshuonan
 * @date 2022/4/2 14:38
 */
public class DefaultDevOpsReportImpl implements DevOpsReportApi {
 
    @Override
    public void reportResources(DevOpsReportProperties devOpsReportProperties, List<SysResourcePersistencePojo> sysResourcePersistencePojoList) {
 
        // 去掉请求地址结尾的左斜杠
        String serverHost = devOpsReportProperties.getServerHost();
        if (StrUtil.endWith(serverHost, "/")) {
            serverHost = StrUtil.removeSuffix(serverHost, "/");
        }
 
        // 组装请求DevOps平台的地址
        String devopsReportUrl = serverHost + DEVOPS_REQUEST_PATH;
 
        // jwt token生成
        String projectInteractionSecretKey = devOpsReportProperties.getProjectInteractionSecretKey();
        Long tokenValidityPeriodSeconds = devOpsReportProperties.getTokenValidityPeriodSeconds();
        JwtConfig jwtConfig = new JwtConfig();
        jwtConfig.setJwtSecret(projectInteractionSecretKey);
        jwtConfig.setExpiredSeconds(ObjectUtil.isNotEmpty(tokenValidityPeriodSeconds) ? tokenValidityPeriodSeconds : DEVOPS_REPORT_TIMEOUT_SECONDS);
        JwtTokenOperator jwtTokenOperator = new JwtTokenOperator(jwtConfig);
        String jwtToken = jwtTokenOperator.generateToken(new HashMap<>());
 
        // 组装请求参数
        DevOpsReportResourceParam devOpsReportResourceParam = new DevOpsReportResourceParam(
                devOpsReportProperties.getProjectUniqueCode(), jwtToken, sysResourcePersistencePojoList, devOpsReportProperties.getFieldMetadataClassPath());
 
        // 进行post请求,汇报资源
        HttpRequest httpRequest = HttpUtil.createPost(devopsReportUrl);
        httpRequest.body(JSON.toJSONString(devOpsReportResourceParam));
        httpRequest.setConnectionTimeout(Convert.toInt(DEVOPS_REPORT_CONNECTION_TIMEOUT_SECONDS * 1000));
        ResponseData<?> responseData = null;
        HttpResponse execute = httpRequest.execute();
        String body = execute.body();
        responseData = JSON.parseObject(body, ResponseData.class);
        // 返回结果为空
        if (responseData == null) {
            throw new ScannerException(DevOpsExceptionEnum.HTTP_RESPONSE_EMPTY);
        }
        // 返回失败
        if (!responseData.getSuccess()) {
            throw new ScannerException(DevOpsExceptionEnum.HTTP_RESPONSE_ERROR, responseData.getMessage());
        }
    }
 
}