AliyunEcsDescribeInstancesServiceImpl.java 7.73 KB
package com.zteits.sys.biz.aliyunecs;

import com.aliyun.openservices.shade.com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest;
import com.aliyuncs.ecs.model.v20140526.DescribeInstancesResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.xiaoleilu.hutool.date.DateUtil;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.bean.PageBean;
import com.zteits.clouds.api.dto.aliyunecs.dto.DescribeInstancesDTO;
import com.zteits.clouds.api.dto.aliyunecs.param.QueryDescribeInstancesReq;
import com.zteits.clouds.api.service.aliyunecs.AliyunEcsDescribeInstancesService;
import com.zteits.sys.dao.AliyunEcsConfigDao;
import com.zteits.sys.domain.AliyunEcsConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * Copyright: Copyright (c) 2017  zteits
 *
 * @ClassName: AliyunEcsDescribeInstancesServiceImpl.java
 * @Description:
 * @version: v1.0.0
 * @author: wangfs
 * @date: 2019-11-27 10:25
 * Modification History:
 * Date             Author          Version            Description
 * ---------------------------------------------------------*
 * 2019-11-27     wangfs              v1.0.0               创建
 */
@Service("com.zteits.sys.biz.aliyunecs.AliyunEcsDescribeInstancesServiceImpl")
public class AliyunEcsDescribeInstancesServiceImpl implements AliyunEcsDescribeInstancesService {

    private static final Logger logger = LoggerFactory.getLogger(AliyunEcsDescribeInstancesServiceImpl.class);

    @Autowired
    private AliyunEcsConfigDao aliyunEcsConfigDao;

    /**
     * 阿里云ESC服务器基本信息查询
     *
     * @param
     * @return
     * @Auther: wangfs
     */
    @Override
    public BizResult<PageBean<DescribeInstancesDTO>> queryDescribeInstances(QueryDescribeInstancesReq req) {
        logger.info("begin阿里云ESC服务器基本信息查询,入参={}", JSONObject.toJSON(req));
        PageBean<DescribeInstancesDTO> pageBean = new PageBean<DescribeInstancesDTO>();
        List<DescribeInstancesDTO> list = new ArrayList<>();
        /**1.查询阿里云秘钥配置*/
        AliyunEcsConfig aliyunEcsConfig = aliyunEcsConfigDao.queryAliyunEcsConfigByOrgId(req.getOrgId());
        logger.info("从阿里云服务器配置表中获取阿里云秘钥配置信息={}",JSONObject.toJSON(aliyunEcsConfig));
        DefaultProfile profile = null;
        if(null != aliyunEcsConfig && !StringUtils.isEmpty(aliyunEcsConfig.getAccessKeyId())){
            profile = DefaultProfile.getProfile(aliyunEcsConfig.getRegionId(), aliyunEcsConfig.getAccessKeyId(), aliyunEcsConfig.getSecret());
        }else{
            profile = DefaultProfile.getProfile("cn-zhangjiakou", "LTAIPilBAoqEmuTN", "m4tlVIqQTMJ7NjqRkSS1kYiSP2FNOV");
        }

        IAcsClient client = new DefaultAcsClient(profile);
        DescribeInstancesRequest request = new DescribeInstancesRequest();
        request.setPageNumber(req.getBaseRequest().getPageNum());
        request.setPageSize(req.getBaseRequest().getPageSize());
//        request.setDryRun(false);

        try {
            DescribeInstancesResponse response = client.getAcsResponse(request);

            if (null != response) {
                pageBean.setPageNum(req.getBaseRequest().getPageNum());
                pageBean.setPageSize(req.getBaseRequest().getPageSize());
                //设置总条数
                pageBean.setPageTotals(response.getTotalCount());
                List<DescribeInstancesResponse.Instance> instancesList = response.getInstances();
                if (!CollectionUtils.isEmpty(instancesList)) {
                    for (DescribeInstancesResponse.Instance instance : instancesList) {
                        if (null == instance) {
                            continue;
                        }
                        DescribeInstancesDTO describeInstancesDTO = new DescribeInstancesDTO();
                        describeInstancesDTO.setRequestId(response.getRequestId());
                        describeInstancesDTO.setInstanceId(instance.getInstanceId());
                        describeInstancesDTO.setInstanceName(instance.getInstanceName());
                        describeInstancesDTO.setoSName(instance.getOSName());
                        describeInstancesDTO.setRegionId(instance.getRegionId());
                        if (null != instance.getEipAddress()) {
                            describeInstancesDTO.setPublicIpAddress(instance.getEipAddress().getIpAddress());
                        } else {
                            describeInstancesDTO.setPublicIpAddress("");
                        }
                        if ("vpc".equals(instance.getInstanceNetworkType())) {
                            describeInstancesDTO.setInstanceNetworkType("VPC专有网络");
                        } else {
                            describeInstancesDTO.setInstanceNetworkType(instance.getInstanceNetworkType() + "网络");
                        }
                        //运行状态
                        if ("Running".equals(instance.getStatus())) {
                            describeInstancesDTO.setStatus("运行中");
                        } else if ("Starting".equals(instance.getStatus())) {
                            describeInstancesDTO.setStatus("启动中");
                        } else if ("Stopping".equals(instance.getStatus())) {
                            describeInstancesDTO.setStatus("停止中");
                        } else {
                            describeInstancesDTO.setStatus("已停止");
                        }
                        describeInstancesDTO.setCpuCoreCount(instance.getCpu());
                        describeInstancesDTO.setMemory(instance.getMemory());

                        if ("PostPaid".equals(instance.getInstanceChargeType())) {
                            describeInstancesDTO.setInstanceChargeType("按量付费");
                        } else {
                            describeInstancesDTO.setInstanceChargeType("包年包月");
                        }
                        if ("PayByBandwidth".equals(instance.getInternetChargeType())) {
                            describeInstancesDTO.setInternetChargeType("按固定带宽计费");
                        } else {
                            describeInstancesDTO.setInternetChargeType("按流量计费");
                        }
                        describeInstancesDTO.setCreationTime(!StringUtils.isEmpty(instance.getCreationTime()) ? instance.getCreationTime().replaceAll("T"," ").replaceAll("Z"," ") : null);
                        describeInstancesDTO.setExpiredTime(!StringUtils.isEmpty(instance.getExpiredTime()) ? instance.getExpiredTime().replaceAll("T"," ").replaceAll("Z"," ") : null);
                        list.add(describeInstancesDTO);

                    }
                }
            }

        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
            e.printStackTrace();
        }
        pageBean.setDataList(list);
        logger.info("end阿里云ESC服务器基本信息查询。。。");
        return new BizResult<PageBean<DescribeInstancesDTO>>(pageBean);
    }

}