瀏覽代碼

1.StoreNode 添加 StoreDisk, 节点的磁盘使用信息
2.更新 StoreNode 的前端页面

reghao 2 年之前
父節點
當前提交
51864ea026

+ 3 - 2
oss-console/src/main/java/cn/reghao/oss/console/app/controller/OssStoreController.java

@@ -4,6 +4,7 @@ import cn.reghao.jutil.jdk.result.WebResult;
 import cn.reghao.oss.console.app.model.po.StoreNode;
 import cn.reghao.oss.console.app.service.OssStoreService;
 import cn.reghao.oss.store.api.dto.ObjectChannel;
+import cn.reghao.oss.store.api.dto.StoreNodeDto;
 import cn.reghao.oss.store.api.dto.StoreProperties;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -29,8 +30,8 @@ public class OssStoreController {
 
     @ApiOperation(value = "注册存储节点")
     @PostMapping(value = "/register", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addStoreNode(@RequestBody @Validated StoreNode storeNode) {
-        ossStoreService.registerNode(storeNode);
+    public String addStoreNode(@RequestBody @Validated StoreNodeDto storeNodeDto) {
+        ossStoreService.registerNode(storeNodeDto);
         return WebResult.success();
     }
 

+ 28 - 0
oss-console/src/main/java/cn/reghao/oss/console/app/model/po/StoreDisk.java

@@ -0,0 +1,28 @@
+package cn.reghao.oss.console.app.model.po;
+
+import cn.reghao.oss.store.api.dto.StoreDiskDto;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author reghao
+ * @date 2024-03-04 17:08:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Getter
+@Embeddable
+public class StoreDisk {
+    private String diskDir;
+    private Long total;
+    private Long avail;
+
+    public StoreDisk(StoreDiskDto storeDiskDto) {
+        this.diskDir = storeDiskDto.getDiskDir();
+        this.total = storeDiskDto.getTotal();
+        this.avail = storeDiskDto.getAvail();
+    }
+}

+ 16 - 5
oss-console/src/main/java/cn/reghao/oss/console/app/model/po/StoreNode.java

@@ -1,18 +1,25 @@
 package cn.reghao.oss.console.app.model.po;
 
-import cn.reghao.jutil.jdk.security.RandomString;
 import cn.reghao.oss.console.util.db.BaseEntity;
+import cn.reghao.oss.store.api.dto.StoreNodeDto;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
+import org.hibernate.annotations.LazyCollection;
+import org.hibernate.annotations.LazyCollectionOption;
 
 import javax.persistence.Column;
+import javax.persistence.ElementCollection;
 import javax.persistence.Entity;
 import javax.validation.constraints.NotNull;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
  * @date 2024-02-23 11:29:14
  */
+@NoArgsConstructor
 @Getter
 @Setter
 @Entity
@@ -23,15 +30,19 @@ public class StoreNode extends BaseEntity {
     private Integer httpPort;
     @NotNull
     private Integer rpcPort;
-    private Long total;
-    private Long avail;
+    @ElementCollection(targetClass = StoreDisk.class)
+    @LazyCollection(LazyCollectionOption.FALSE)
+    private List<StoreDisk> storeDisks;
     private String domain;
     private String referer;
     private String secretKey;
     private Boolean enabled;
 
-    public StoreNode() {
-        this.secretKey = RandomString.getString(20);
+    public StoreNode(StoreNodeDto storeNodeDto) {
+        this.nodeAddr = storeNodeDto.getNodeAddr();
+        this.httpPort = storeNodeDto.getHttpPort();
+        this.rpcPort = storeNodeDto.getRpcPort();
+        this.storeDisks = storeNodeDto.getDiskDtoList().stream().map(StoreDisk::new).collect(Collectors.toList());
         this.enabled = false;
     }
 }

+ 3 - 2
oss-console/src/main/java/cn/reghao/oss/console/app/service/OssStoreService.java

@@ -5,6 +5,7 @@ import cn.reghao.oss.console.app.db.repository.UploadChannelRepository;
 import cn.reghao.oss.console.app.model.po.StoreNode;
 import cn.reghao.oss.console.app.model.po.UploadChannel;
 import cn.reghao.oss.store.api.dto.ObjectChannel;
+import cn.reghao.oss.store.api.dto.StoreNodeDto;
 import cn.reghao.oss.store.api.dto.StoreProperties;
 import org.springframework.stereotype.Service;
 
@@ -30,8 +31,8 @@ public class OssStoreService {
 
     }
 
-    public void registerNode(StoreNode storeNode) {
-        storeNodeService.add(storeNode);
+    public void registerNode(StoreNodeDto storeNodeDto) {
+        storeNodeService.add(storeNodeDto);
     }
 
     public List<ObjectChannel> getObjectChannels(String nodeAddr) {

+ 7 - 3
oss-console/src/main/java/cn/reghao/oss/console/app/service/StoreNodeService.java

@@ -4,6 +4,7 @@ import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.oss.console.app.db.repository.StoreNodeRepository;
 import cn.reghao.oss.console.app.model.dto.StoreNodeUpdateDto;
 import cn.reghao.oss.console.app.model.po.StoreNode;
+import cn.reghao.oss.store.api.dto.StoreNodeDto;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -20,11 +21,14 @@ public class StoreNodeService {
         this.storeNodeRepository = storeNodeRepository;
     }
 
-    public void add(StoreNode storeNode) {
-        String ipv4 = storeNode.getNodeAddr();
-        StoreNode entity = storeNodeRepository.findByNodeAddr(ipv4);
+    public void add(StoreNodeDto storeNodeDto) {
+        String nodeAddr = storeNodeDto.getNodeAddr();
+        StoreNode entity = storeNodeRepository.findByNodeAddr(nodeAddr);
         if (entity == null) {
+            StoreNode storeNode = new StoreNode(storeNodeDto);
             storeNodeRepository.save(storeNode);
+        } else {
+
         }
     }
 

+ 33 - 16
oss-console/src/main/resources/templates/node/detail.html

@@ -3,33 +3,50 @@
 <head th:replace="/common/template :: header(~{::title},~{::link},~{::style})"></head>
 <body>
     <div class="timo-detail-page">
-        <div class="timo-detail-title">基本信息</div>
+        <div class="timo-detail-title">节点信息</div>
         <table class="layui-table timo-detail-table">
             <tbody>
             <tr>
-                <th>应用 ID</th>
-                <td th:text="${storeNode.domain}"></td>
-                <th>应用名称</th>
-                <td th:text="${storeNode.domain}"></td>
+                <th>地址</th>
+                <td th:text="${storeNode.nodeAddr}"></td>
+                <th>HTTP 端口</th>
+                <td th:text="${storeNode.httpPort}"></td>
+                <th>RPC 端口</th>
+                <td th:text="${storeNode.rpcPort}"></td>
             </tr>
+            </tbody>
+        </table>
+        <div class="timo-detail-title">磁盘信息</div>
+        <table class="layui-table timo-detail-table">
+            <thead>
             <tr>
-                <th>总容量</th>
-                <td th:text="${storeNode.total}"></td>
-                <th>可用容量</th>
-                <td th:text="${storeNode.avail}"></td>
+                <th class="sortable" data-field="appName">磁盘路径</th>
+                <th class="sortable" data-field="appName">总容量</th>
+                <th class="sortable" data-field="appName">可用容量</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr th:each="item:${storeNode.storeDisks}">
+                <td th:text="${item.diskDir}"></td>
+                <td th:text="${item.total}"></td>
+                <td th:text="${item.avail}"></td>
             </tr>
             </tbody>
         </table>
-        <div class="timo-detail-title">构建配置</div>
+        <div class="timo-detail-title">节点配置</div>
         <table class="layui-table timo-detail-table">
             <tbody>
             <tr>
-                <th>地址</th>
-                <td th:text="${storeNode.nodeAddr}"></td>
-                <th>HTTP 端口</th>
-                <td th:text="${storeNode.httpPort}"></td>
-                <th>RPC 端口</th>
-                <td th:text="${storeNode.rpcPort}"></td>
+                <th>域名</th>
+                <td th:text="${storeNode.domain}"></td>
+            </tr>
+            <tr>
+                <th>SecretKey</th>
+                <td th:text="${storeNode.secretKey}"></td>
+            </tr>
+            <tr>
+                <th>Referer</th>
+                <td th:text="${storeNode.referer}"></td>
             </tr>
             </tbody>
         </table>

+ 12 - 0
oss-console/src/main/resources/templates/node/edit.html

@@ -32,6 +32,18 @@
                     </div>
                 </td>
             </tr>
+            <tr>
+                <th>
+                    <label class="layui-form-label required">SecretKey</label>
+                </th>
+                <td>
+                    <div class="layui-form-item">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="secretKey" th:value="${storeNode.secretKey}">
+                        </div>
+                    </div>
+                </td>
+            </tr>
             <tr>
                 <th>
                     <label class="layui-form-label">referer</label>

+ 2 - 4
oss-console/src/main/resources/templates/node/index.html

@@ -52,7 +52,6 @@
                     <th class="sortable" data-field="appId">HTTP 端口</th>
                     <th class="sortable" data-field="repoBranch">RPC 端口</th>
                     <th class="sortable" data-field="appName">节点域名</th>
-                    <th class="sortable" data-field="appName">SecretKey</th>
                     <th class="sortable" data-field="appName">启用</th>
                     <th>操作</th>
                 </tr>
@@ -63,13 +62,12 @@
                     <td th:text="${item.httpPort}">应用 ID</td>
                     <td th:text="${item.rpcPort}">分支</td>
                     <td th:text="${item.domain}">应用名</td>
-                    <td th:text="${item.secretKey}">应用名</td>
                     <td th:text="${item.enabled}">应用名</td>
                     <td>
                         <a class="open-popup" data-title="设置存储节点属性" th:attr="data-url=@{'/store/node/config/'+${item.id}}"
                            data-size="640,480" href="#">设置</a>
-                        <a class="open-popup" data-title="应用详细信息" th:attr="data-url=@{'/store/node/detail/'+${item.id}}"
-                           data-size="640,480" href="#">详细</a>
+                        <a class="open-popup" data-title="存储节点详细信息" th:attr="data-url=@{'/store/node/detail/'+${item.id}}"
+                           data-size="640,540" href="#">详细</a>
                         <a class="ajax-delete" th:attr="data-msg='确定要删除 '+ ${item.id}"
                            th:href="@{'/api/oss/store/node/' + ${item.id}}">删除</a>
                     </td>