diff --git a/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
index 5eb7972..9b6c516 100644
--- a/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
+++ b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
@@ -12,8 +12,8 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
-
-
+
+
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/object/ProjectState.java b/ruoyi-file/src/main/java/com/ruoyi/file/object/ProjectState.java
index 283292f..5f65017 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/object/ProjectState.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/object/ProjectState.java
@@ -2,6 +2,7 @@ package com.ruoyi.file.object;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
+import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
@@ -15,8 +16,11 @@ public final class ProjectState
public long numUpload = 0; // 上传文件数
public long numWrite = 0; // 写入文件数
public long numError = 0; // 处理错误数
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
public Date lastUploadTime; // 最近上传时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
public Date lastWriteTime; // 最近写入时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
public Date lastErrorTime; // 最近错误时间
public long maxUploadSize = 0; // 最大上传字节数
public long maxWriteSize = 0; // 最大写入字节数
@@ -96,9 +100,9 @@ public final class ProjectState
if(state.maxUploadSize > maxUploadSize)
maxUploadSize = state.maxUploadSize;
if(state.maxWriteSize > maxWriteSize)
- maxWriteSize += state.maxWriteSize;
+ maxWriteSize = state.maxWriteSize;
if(state.maxHandleDuration > maxHandleDuration)
- maxHandleDuration += state.maxHandleDuration;
+ maxHandleDuration = state.maxHandleDuration;
}
public String ToString(String split)
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/object/StateMachine.java b/ruoyi-file/src/main/java/com/ruoyi/file/object/StateMachine.java
index 7beb4b6..930d010 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/object/StateMachine.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/object/StateMachine.java
@@ -2,6 +2,7 @@ package com.ruoyi.file.object;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
+import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -16,18 +17,26 @@ public final class StateMachine
public long numUpload = 0; // 上传文件数
public long numWrite = 0; // 写入文件数
public long numError = 0; // 处理错误数
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
public Date lastUploadTime; // 最近上传时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
public Date lastWriteTime; // 最近写入时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
public Date lastErrorTime; // 最近错误时间
public long maxUploadSize = 0; // 最大上传字节数
public long maxWriteSize = 0; // 最大写入字节数
public long maxHandleDuration = 0; // 最长处理时间
public long gcCount; // GC次数
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
public Date lastGCTime; // 最近GC时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
public Date startTime = new Date(); // 本次开始时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
public Date lastEndTime; // 上次结束时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
+ public Date lastDumpTime; // 上次dump时间
private final Map stateMap = new LinkedHashMap<>();
public static final StateMachine INSTANCE = new StateMachine();
@@ -58,9 +67,9 @@ public final class StateMachine
if(state.maxUploadSize > this.maxUploadSize)
this.maxUploadSize = state.maxUploadSize;
if(state.maxWriteSize > this.maxWriteSize)
- this.maxWriteSize += state.maxWriteSize;
+ this.maxWriteSize = state.maxWriteSize;
if(state.maxHandleDuration > this.maxHandleDuration)
- this.maxHandleDuration += state.maxHandleDuration;
+ this.maxHandleDuration = state.maxHandleDuration;
}
private ProjectState State(String token)
@@ -187,7 +196,7 @@ public final class StateMachine
public void FromMap(Map, ?> parms)
{
CopyOptions options = CopyOptions.create();
- options.setIgnoreProperties("startTime");
+ options.setIgnoreProperties("startTime", "gcCount", "lastGCTime");
options.setIgnoreError(true);
BeanUtil.fillBeanWithMap(parms, this, options);
Object obj = parms.get("stateMap");
@@ -210,9 +219,15 @@ public final class StateMachine
public void Finish()
{
+ Save();
lastEndTime = new Date();
}
+ public void Save()
+ {
+ lastDumpTime = new Date();
+ }
+
public String ToString(String split)
{
StringBuilder sb = new StringBuilder();
@@ -246,6 +261,8 @@ public final class StateMachine
sb.append(split);
sb.append("上次结束时间: ").append(lastEndTime);
sb.append(split);
+ sb.append("上次dump时间: ").append(lastDumpTime);
+ sb.append(split);
sb.append("记录数: ").append(stateMap.size());
return sb.toString();
}
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/service/FileService.java b/ruoyi-file/src/main/java/com/ruoyi/file/service/FileService.java
index 57cedd8..54597e3 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/service/FileService.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/service/FileService.java
@@ -39,7 +39,6 @@ import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.TimerTask;
@Service
public class FileService
@@ -234,7 +233,6 @@ public class FileService
if(session.result.isSuccess())
{
state.AddNumWrite(1);
- state.AddUploadSize(session.task.UploadSize());
state.AddWriteSize(session.result.getFileSize());
state.AddWriteSize(session.result.getThumbnailFileSize());
state.SetLastWriteTime(session.result.getTime());
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/service/StateService.java b/ruoyi-file/src/main/java/com/ruoyi/file/service/StateService.java
index 3d0540a..9bc957e 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/service/StateService.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/service/StateService.java
@@ -45,7 +45,25 @@ public class StateService
public void dump()
{
- destroy();
+ StateMachine.INSTANCE.Save();
+ save();
+ }
+
+ private void save()
+ {
+ try
+ {
+ Map, ?> map = StateMachine.INSTANCE.ToMap();
+ String json = JSON.toJSONString(map);
+ RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
+ redisCache.setCacheObject(STATE_MACHINE_KEY, json);
+ log.info("备份持久化状态机信息: ");
+ log.info(StateMachine.INSTANCE.ToString("; "));
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ }
}
@PostConstruct
@@ -72,19 +90,7 @@ public class StateService
@PreDestroy
public void destroy()
{
- try
- {
- StateMachine.INSTANCE.Finish();
- Map, ?> map = StateMachine.INSTANCE.ToMap();
- String json = JSON.toJSONString(map);
- RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
- redisCache.setCacheObject(STATE_MACHINE_KEY, json);
- log.info("备份持久化状态机信息: ");
- log.info(StateMachine.INSTANCE.ToString("; "));
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
+ StateMachine.INSTANCE.Finish();
+ save();
}
}
diff --git a/ruoyi-ui/src/utils/file.js b/ruoyi-ui/src/utils/file.js
index 754e583..89336a0 100644
--- a/ruoyi-ui/src/utils/file.js
+++ b/ruoyi-ui/src/utils/file.js
@@ -2,6 +2,8 @@
/* 文件大小格式化 */
export function formatFileSize(size) {
+ if(size === null || size === undefined)
+ return '0';
const Unit = ["Bytes", "Kb", "Mb", "Gb", "Tb"];
//const Unit = ["byte", "K", "M", "G", "T"];
let s, i;
diff --git a/ruoyi-ui/src/views/file/state/ProjectState.vue b/ruoyi-ui/src/views/file/state/ProjectState.vue
index 7645a77..ac1633d 100644
--- a/ruoyi-ui/src/views/file/state/ProjectState.vue
+++ b/ruoyi-ui/src/views/file/state/ProjectState.vue
@@ -1,15 +1,15 @@
- {{state.uploadSize}}
- {{state.writeSize}}
+ {{state.uploadSize | formatFileSize}}
+ {{state.writeSize | formatFileSize}}
{{state.numUpload}}
{{state.numWrite}}
{{state.numError}}
{{state.lastUploadTime}}
{{state.lastWriteTime}}
{{state.lastErrorTime}}
- {{state.maxUploadSize}}
- {{state.maxWriteSize}}
+ {{state.maxUploadSize | formatFileSize}}
+ {{state.maxWriteSize | formatFileSize}}
{{state.maxHandleDuration}}
@@ -18,6 +18,7 @@
import Descriptions from "@/components/common/Descriptions.vue";
import {stateDetail} from "@/api/file/state";
+import {formatFileSize} from "@/utils/file";
export default {
name: 'ProjectState',
@@ -57,6 +58,9 @@ export default {
this.getStateDetail();
},
},
+ filters: {
+ formatFileSize,
+ },
}
diff --git a/ruoyi-ui/src/views/file/state/index.vue b/ruoyi-ui/src/views/file/state/index.vue
index fc907f5..309194b 100644
--- a/ruoyi-ui/src/views/file/state/index.vue
+++ b/ruoyi-ui/src/views/file/state/index.vue
@@ -18,21 +18,22 @@
- {{state.uploadSize}}
- {{state.writeSize}}
+ {{state.uploadSize | formatFileSize}}
+ {{state.writeSize | formatFileSize}}
{{state.numUpload}}
{{state.numWrite}}
{{state.numError}}
{{state.lastUploadTime}}
{{state.lastWriteTime}}
{{state.lastErrorTime}}
- {{state.maxUploadSize}}
- {{state.maxWriteSize}}
+ {{state.maxUploadSize | formatFileSize}}
+ {{state.maxWriteSize | formatFileSize}}
{{state.maxHandleDuration}}
{{state.gcCount}}
{{state.lastGCTime}}
{{state.startTime}}
{{state.lastEndTime}}
+ {{state.lastDumpTime}}
{{total}}
@@ -41,11 +42,11 @@
-
+
-
+
@@ -68,6 +69,7 @@ import FullscreenDialog from "@/components/FullscreenDialog.vue";
import ProjectState from "@/views/file/state/ProjectState.vue";
import {stateList, gc, stateMachine, dump} from "@/api/file/state";
import Descriptions from "@/components/common/Descriptions.vue";
+import {formatFileSize} from "@/utils/file";
export default {
@@ -185,6 +187,7 @@ export default {
gc() {
gc().then((resp) => {
this.$message.success('成功');
+ this.getStateMachine();
});
},
getStateMachine() {
@@ -196,8 +199,15 @@ export default {
dump() {
dump().then((resp) => {
this.$message.success('成功');
+ this.getStateMachine();
});
},
+ fileSizeFormatter(row, col, val) {
+ return formatFileSize(val);
+ },
+ },
+ filters: {
+ formatFileSize,
},
};