Commit f41957ad authored by SN150021's avatar SN150021

对接腾讯云api

parent eaaeee8c
......@@ -36,6 +36,8 @@ import com.edgec.browserbackend.common.commons.utils.NotifyUtils;
import com.edgec.browserbackend.common.enums.RegionMappingEnum;
import com.edgec.browserbackend.common.utils.ThreadPoolUtils;
import com.edgec.browserbackend.common.utils.Trans;
import com.tencentcloudapi.cvm.v20170312.models.ModifyInstancesChargeTypeResponse;
import com.tencentcloudapi.cvm.v20170312.models.TerminateInstancesResponse;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
......@@ -294,7 +296,7 @@ public class BrowserTask {
Instance instance = response.getBody().getInstances()
.getInstance().get(0);
if (instance.getInstanceChargeType().equals("PrePaid")) {
//包年包 更新ip状态
//包年包 更新ip状态
ipResource.setAddr(
instance.getPublicIpAddress().getIpAddress().get(0));
ipResource.setStatus(0);
......@@ -380,10 +382,84 @@ public class BrowserTask {
com.tencentcloudapi.cvm.v20170312.models.DescribeInstancesResponse response =
TenCentEcsClient.getDescribeInstances(ipResource.getOwner(), cloudPlatformOrder.getPlatformOrderId(),
cloudPlatformOrder.getRegionId());
/* if (!response.getStatusCode().equals(200)) {
log.error(", fail to query ip : {}",
JSON.toJSON(response.getBody()));
}*/
if (Objects.isNull(response) || Objects.isNull(response.getInstanceSet())) {
log.error("fail to query ip");
}
com.tencentcloudapi.cvm.v20170312.models.Instance instance = response.getInstanceSet()[0];
if (instance.getInstanceChargeType().equals("PREPAID")) {
//包年包月 更新ip状态
ipResource.setAddr(instance.getPublicIpAddresses()[0]);
ipResource.setStatus(0);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX");
Instant instant = Instant.from(formatter.parse(instance.getExpiredTime()));
ipResource.setValidTime(instant.toEpochMilli());
if (StringUtils.isNotBlank(ipResource.getRegion())
&& region.contains(ipResource.getRegion())) {
ipResource.setProxyUsername(ipResource.getAddr());
ipResource.setProxyPassword(genRandom(3, 12));
ipResource.setSpecialLine(true);
}
ipResourceRepository.save(ipResource);
IpHistory ipHistory = new IpHistory();
ipHistory.setIpNo(ipResource.getAddr());
ipHistory.setPlatformType(
cloudPlatformOrder.getPlatformType());
ipHistory.setPurchasedTime(Instant.now().toEpochMilli());
ipHistoryRepository.save(ipHistory);
return;
}
//查询是否为重复ip
String ipNo = instance.getPublicIpAddresses()[0];
LocalDateTime localDateTime = LocalDateTime.now().minus(3, ChronoUnit.MONTHS);
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
List<IpHistory> ipHistoryList = ipHistoryRepository.findByIpNoAndPurchasedTimeAfter(
ipNo,
instant.toEpochMilli());
if (CollectionUtils.isNotEmpty(ipHistoryList) &&
(Objects.isNull(cloudPlatformOrder.getRetryCount()) ||
cloudPlatformOrder.getRetryCount() < 5)) {
//重新分配ip(删除旧的 购买新的)
TenCentEcsClient.deleteInstance(
ipResource.getOwner(),
cloudPlatformOrder.getPlatformOrderId(),
cloudPlatformOrder.getRegionId());
CloudPlatformConfig config = cloudPlatformConfigRepository.findByPlatformAndRegionId(
"tenCent",
cloudPlatformOrder.getRegionId());
com.tencentcloudapi.cvm.v20170312.models.RunInstancesResponse response1 = TenCentEcsClient.runInstances(
ipResource.getOwner(), ipResource.getUsername(),
ipResource.getPassword(), config);
if (null == response1 || null == response1.getInstanceIdSet()) {
log.error("queryIpNewTasks, fail to buy ip again : {}",
JSON.toJSON(response));
} else{
int oldRetryCount =
Objects.isNull(cloudPlatformOrder.getRetryCount())
? 0 : cloudPlatformOrder.getRetryCount();
cloudPlatformOrder.setRetryCount(oldRetryCount + 1);
cloudPlatformOrderRepository.save(cloudPlatformOrder);
String instanceId = response1.getInstanceIdSet()[0];
cloudPlatformOrder.setPlatformOrderId(instanceId);
ipResource.setStatus(3);
ipResourceRepository.save(ipResource);
cloudPlatformOrderRepository.save(cloudPlatformOrder);
}
} else {
//将ip改为包年包月
//TODO 腾讯云目前只有包月
ModifyInstancesChargeTypeResponse response1 = TenCentEcsClient.modifyInstanceChargeType(
ipResource.getOwner(),
ipResource.getPeriod(),
cloudPlatformOrder.getRegionId(),
cloudPlatformOrder.getPlatformOrderId());
if (null == response1) {
//TODO 目前先抛错误 待确认如何解决
log.error("queryIpNewTasks, fail to buy ip again : {}",
JSON.toJSON(response));
}
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
......@@ -450,6 +526,26 @@ public class BrowserTask {
}
}
}else if("tenCent".equals(cloudPlatformOrder.getPlatformType())){
com.tencentcloudapi.cvm.v20170312.models.DescribeInstancesResponse describeInstances = TenCentEcsClient.getDescribeInstances(
ipResource.getOwner(), cloudPlatformOrder.getPlatformOrderId(),
cloudPlatformOrder.getRegionId());
if (null == describeInstances) {
log.error(", fail to query ip ");
}
assert describeInstances != null;
if (Objects.nonNull(describeInstances.getInstanceSet())) {
//判断是否重复购买
com.tencentcloudapi.cvm.v20170312.models.Instance instance = describeInstances.getInstanceSet()[0];
if (instance.getInstanceChargeType().equals("PREPAID")) {
//包年包夜 更新ip状态
ipResource.setStatus(0);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX");
Instant instant = Instant.from(formatter.parse(instance.getExpiredTime()));
ipResource.setValidTime(instant.toEpochMilli());
ipResourceRepository.save(ipResource);
}
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
......@@ -748,6 +844,13 @@ public class BrowserTask {
if(null != response && response.getStatusCode().equals(200)) {
isDelet = true;
}
}else if("tenCent".equals(cloudPlatformOrder.getPlatformType())){
String aliRegion = RegionMappingEnum.getAliRegion(ipResource.getRegion());
TerminateInstancesResponse response = TenCentEcsClient.deleteInstance(
ipResource.getOwner(), cloudPlatformOrder.getPlatformOrderId(), aliRegion);
if(null != response) {
isDelet = true;
}
}
if(isDelet){
ipResource.setShopIds(null);
......
......@@ -114,7 +114,6 @@ public class TenCentEcsClient {
describeInstancesResponse = cvmClient.DescribeInstances(req);
log.info("调用TenCentEcs查询单个实例,响应参数:owner:{},response:{}", owner,
JSON.toJSON(describeInstancesResponse));
} catch (Exception e) {
log.error("fail to TenCentEcs getDescribeInstances {}", e.getMessage());
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment