新增:hpc任务状态轮询更新状态
This commit is contained in:
@@ -1,16 +1,23 @@
|
||||
package com.sdm.common.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.*;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 日期时间工具类
|
||||
*/
|
||||
@Slf4j
|
||||
public class DateUtils {
|
||||
|
||||
// 常用日期时间格式
|
||||
@@ -22,6 +29,10 @@ public class DateUtils {
|
||||
public static final String PATTERN_COMPACT = "yyyyMMddHHmmss";
|
||||
public static final String PATTERN_COMPACT_DATE = "yyyyMMdd";
|
||||
|
||||
// 时间格式
|
||||
private static final String DEFAULT_DATE_FORMAT = "yyyy/MM/dd HH:mm:ss";
|
||||
private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
|
||||
|
||||
private DateUtils() {
|
||||
throw new IllegalStateException("Utility class");
|
||||
}
|
||||
@@ -229,4 +240,79 @@ public class DateUtils {
|
||||
return toDate(localDate);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算两个时间字符串的耗时(单位:毫秒)
|
||||
* @param startTimeStr 开始时间字符串(格式:yyyy/MM/dd HH:mm:ss)
|
||||
* @param endTimeStr 结束时间字符串(格式:yyyy/MM/dd HH:mm:ss)
|
||||
* @return 耗时(毫秒),时间无效返回null
|
||||
*/
|
||||
public static Long calculateTimeConsume(String startTimeStr, String endTimeStr) {
|
||||
// 空值校验
|
||||
if (startTimeStr == null || startTimeStr.trim().isEmpty() ||
|
||||
endTimeStr == null || endTimeStr.trim().isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
// 解析时间字符串
|
||||
Date startTime = DATE_FORMATTER.parse(startTimeStr.trim());
|
||||
Date endTime = DATE_FORMATTER.parse(endTimeStr.trim());
|
||||
|
||||
// 计算耗时(确保结束时间不早于开始时间)
|
||||
long consumeMillis = endTime.getTime() - startTime.getTime();
|
||||
return consumeMillis >= 0 ? consumeMillis : null;
|
||||
|
||||
} catch (Exception e) {
|
||||
// 时间格式解析失败
|
||||
log.warn("时间格式解析失败,startTime: {}, endTime: {}, 格式要求:{}",
|
||||
startTimeStr, endTimeStr, DEFAULT_DATE_FORMAT);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算耗时并转换为指定时间单位
|
||||
* @param startTimeStr 开始时间字符串
|
||||
* @param endTimeStr 结束时间字符串
|
||||
* @param timeUnit 目标时间单位
|
||||
* @return 耗时(指定单位),时间无效返回null
|
||||
*/
|
||||
public static Long calculateTimeConsume(String startTimeStr, String endTimeStr, TimeUnit timeUnit) {
|
||||
Long consumeMillis = calculateTimeConsume(startTimeStr, endTimeStr);
|
||||
if (consumeMillis == null) {
|
||||
return null;
|
||||
}
|
||||
return timeUnit.convert(consumeMillis, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取格式化的耗时字符串(xx小时xx分xx秒)
|
||||
* @param startTimeStr 开始时间字符串
|
||||
* @param endTimeStr 结束时间字符串
|
||||
* @return 格式化耗时字符串,时间无效返回null
|
||||
*/
|
||||
public static String getFormattedConsumeTime(String startTimeStr, String endTimeStr) {
|
||||
Long consumeMillis = calculateTimeConsume(startTimeStr, endTimeStr);
|
||||
if (consumeMillis == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
long hours = TimeUnit.MILLISECONDS.toHours(consumeMillis);
|
||||
long minutes = TimeUnit.MILLISECONDS.toMinutes(consumeMillis) % 60;
|
||||
long seconds = TimeUnit.MILLISECONDS.toSeconds(consumeMillis) % 60;
|
||||
long millis = consumeMillis % 1000;
|
||||
|
||||
if (hours > 0) {
|
||||
return String.format("%d小时%d分%d秒%d毫秒", hours, minutes, seconds, millis);
|
||||
} else if (minutes > 0) {
|
||||
return String.format("%d分%d秒%d毫秒", minutes, seconds, millis);
|
||||
} else if (seconds > 0) {
|
||||
return String.format("%d秒%d毫秒", seconds, millis);
|
||||
} else {
|
||||
return String.format("%d毫秒", millis);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.sdm.common.utils;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.TypeReference;
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.entity.resp.pbs.hpc.FileNodeInfo;
|
||||
import com.sdm.common.log.CoreLogger;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -43,6 +44,9 @@ public class HpcCommandExcuteUtil {
|
||||
@Value("${hpc.remoteDownLoadFileUrl:}")
|
||||
private String remoteDownLoadFileUrl;
|
||||
|
||||
@Value("${hpc.callHpcUpload:}")
|
||||
private String callHpcUpload;
|
||||
|
||||
@Autowired
|
||||
private HttpClientUtil httpClientUtil;
|
||||
|
||||
@@ -159,6 +163,27 @@ public class HpcCommandExcuteUtil {
|
||||
return builder.body(body);
|
||||
}
|
||||
|
||||
public SdmResponse<Boolean> callHpcUploadToTarget(String jobId, String workDir) {
|
||||
com.alibaba.fastjson2.JSONObject paramJson = new com.alibaba.fastjson2.JSONObject();
|
||||
paramJson.put("jobId", jobId);
|
||||
paramJson.put("jobWorkDir", workDir);
|
||||
Boolean call = false;
|
||||
String resultString = "";
|
||||
try {
|
||||
resultString = httpClientUtil.doPostJson(callHpcUpload, paramJson.toJSONString());
|
||||
CoreLogger.info("callHpcUploadToTarget back:{}", resultString);
|
||||
call = JSON.parseObject(
|
||||
resultString,
|
||||
new TypeReference<Boolean>() {
|
||||
}
|
||||
);
|
||||
return SdmResponse.success(call);
|
||||
} catch (Exception e) {
|
||||
CoreLogger.error("callHpcUploadToTarget error,jobId:{},workDir:{},errMsg:{}", jobId,workDir, e.getMessage());
|
||||
return SdmResponse.failed(call);
|
||||
}
|
||||
}
|
||||
|
||||
private String extractFileName(String path) {
|
||||
if (path == null || path.isBlank()) {
|
||||
return "unknown";
|
||||
@@ -171,4 +196,5 @@ public class HpcCommandExcuteUtil {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.sdm.common.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class String2NumberUtil {
|
||||
|
||||
/**
|
||||
* 将字符串转换为Long,转换失败返回null
|
||||
* @param str 待转换的字符串
|
||||
* @return 转换后的Long值,失败返回null
|
||||
*/
|
||||
public static Long stringToLong(String str) {
|
||||
if (str == null || str.trim().isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return Long.parseLong(str.trim());
|
||||
} catch (NumberFormatException e) {
|
||||
log.warn("字符串转换Long失败,输入值:{}", str, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user