mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 13:10:26 +08:00 
			
		
		
		
	边缘节点支持设置多个缓存目录
This commit is contained in:
		@@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/node/nodeutils"
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/node/nodeutils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
 | 
				
			||||||
	"github.com/iwind/TeaGo/actions"
 | 
						"github.com/iwind/TeaGo/actions"
 | 
				
			||||||
	"github.com/iwind/TeaGo/maps"
 | 
						"github.com/iwind/TeaGo/maps"
 | 
				
			||||||
@@ -57,9 +58,19 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var diskSubDirs = []*serverconfigs.CacheDir{}
 | 
				
			||||||
 | 
						if len(node.CacheDiskSubDirsJSON) > 0 {
 | 
				
			||||||
 | 
							err = json.Unmarshal(node.CacheDiskSubDirsJSON, &diskSubDirs)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var nodeMap = this.Data["node"].(maps.Map)
 | 
						var nodeMap = this.Data["node"].(maps.Map)
 | 
				
			||||||
	nodeMap["maxCacheDiskCapacity"] = maxCacheDiskCapacity
 | 
						nodeMap["maxCacheDiskCapacity"] = maxCacheDiskCapacity
 | 
				
			||||||
	nodeMap["cacheDiskDir"] = node.CacheDiskDir
 | 
						nodeMap["cacheDiskDir"] = node.CacheDiskDir
 | 
				
			||||||
 | 
						nodeMap["cacheDiskSubDirs"] = diskSubDirs
 | 
				
			||||||
	nodeMap["maxCacheMemoryCapacity"] = maxCacheMemoryCapacity
 | 
						nodeMap["maxCacheMemoryCapacity"] = maxCacheMemoryCapacity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.Show()
 | 
						this.Show()
 | 
				
			||||||
@@ -69,6 +80,7 @@ func (this *IndexAction) RunPost(params struct {
 | 
				
			|||||||
	NodeId                     int64
 | 
						NodeId                     int64
 | 
				
			||||||
	MaxCacheDiskCapacityJSON   []byte
 | 
						MaxCacheDiskCapacityJSON   []byte
 | 
				
			||||||
	CacheDiskDir               string
 | 
						CacheDiskDir               string
 | 
				
			||||||
 | 
						CacheDiskSubDirsJSON       []byte
 | 
				
			||||||
	MaxCacheMemoryCapacityJSON []byte
 | 
						MaxCacheMemoryCapacityJSON []byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Must *actions.Must
 | 
						Must *actions.Must
 | 
				
			||||||
@@ -105,10 +117,20 @@ func (this *IndexAction) RunPost(params struct {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(params.CacheDiskSubDirsJSON) > 0 {
 | 
				
			||||||
 | 
							var cacheSubDirs = []*serverconfigs.CacheDir{}
 | 
				
			||||||
 | 
							err := json.Unmarshal(params.CacheDiskSubDirsJSON, &cacheSubDirs)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err := this.RPC().NodeRPC().UpdateNodeCache(this.AdminContext(), &pb.UpdateNodeCacheRequest{
 | 
						_, err := this.RPC().NodeRPC().UpdateNodeCache(this.AdminContext(), &pb.UpdateNodeCacheRequest{
 | 
				
			||||||
		NodeId:                 params.NodeId,
 | 
							NodeId:                 params.NodeId,
 | 
				
			||||||
		MaxCacheDiskCapacity:   pbMaxCacheDiskCapacity,
 | 
							MaxCacheDiskCapacity:   pbMaxCacheDiskCapacity,
 | 
				
			||||||
		CacheDiskDir:           params.CacheDiskDir,
 | 
							CacheDiskDir:           params.CacheDiskDir,
 | 
				
			||||||
 | 
							CacheDiskSubDirsJSON:   params.CacheDiskSubDirsJSON,
 | 
				
			||||||
		MaxCacheMemoryCapacity: pbMaxCacheMemoryCapacity,
 | 
							MaxCacheMemoryCapacity: pbMaxCacheMemoryCapacity,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										79
									
								
								web/public/js/components/node/node-cache-disk-dirs-box.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								web/public/js/components/node/node-cache-disk-dirs-box.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
				
			|||||||
 | 
					Vue.component("node-cache-disk-dirs-box", {
 | 
				
			||||||
 | 
						props: ["value", "name"],
 | 
				
			||||||
 | 
						data: function () {
 | 
				
			||||||
 | 
							let dirs = this.value
 | 
				
			||||||
 | 
							if (dirs == null) {
 | 
				
			||||||
 | 
								dirs = []
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								dirs: dirs,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								isEditing: false,
 | 
				
			||||||
 | 
								isAdding: false,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								addingPath: ""
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							add: function () {
 | 
				
			||||||
 | 
								this.isAdding = true
 | 
				
			||||||
 | 
								let that = this
 | 
				
			||||||
 | 
								setTimeout(function () {
 | 
				
			||||||
 | 
									that.$refs.addingPath.focus()
 | 
				
			||||||
 | 
								}, 100)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							confirm: function () {
 | 
				
			||||||
 | 
								let addingPath = this.addingPath.trim()
 | 
				
			||||||
 | 
								if (addingPath.length == 0) {
 | 
				
			||||||
 | 
									let that = this
 | 
				
			||||||
 | 
									teaweb.warn("请输入要添加的缓存目录", function () {
 | 
				
			||||||
 | 
										that.$refs.addingPath.focus()
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (addingPath[0] != "/") {
 | 
				
			||||||
 | 
									addingPath = "/" + addingPath
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								this.dirs.push({
 | 
				
			||||||
 | 
									path: addingPath
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								this.cancel()
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							cancel: function () {
 | 
				
			||||||
 | 
								this.addingPath = ""
 | 
				
			||||||
 | 
								this.isAdding = false
 | 
				
			||||||
 | 
								this.isEditing = false
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							remove: function (index) {
 | 
				
			||||||
 | 
								let that = this
 | 
				
			||||||
 | 
								teaweb.confirm("确定要删除此目录吗?", function () {
 | 
				
			||||||
 | 
									that.dirs.$remove(index)
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						template: `<div>
 | 
				
			||||||
 | 
						<input type="hidden" :name="name" :value="JSON.stringify(dirs)"/>
 | 
				
			||||||
 | 
						<div style="margin-bottom: 0.3em">
 | 
				
			||||||
 | 
							<span class="ui label small basic" v-for="(dir, index) in dirs">
 | 
				
			||||||
 | 
								<i class="icon folder"></i>{{dir.path}}     <a href="" title="删除" @click.prevent="remove(index)"><i class="icon remove small"></i></a>
 | 
				
			||||||
 | 
							</span>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						<!-- 添加 -->
 | 
				
			||||||
 | 
						<div v-if="isAdding">
 | 
				
			||||||
 | 
							<div class="ui fields inline">
 | 
				
			||||||
 | 
								<div class="ui field">
 | 
				
			||||||
 | 
									<input type="text" style="width: 30em" v-model="addingPath" @keyup.enter="confirm()" @keypress.enter.prevent="1" @keydown.esc="cancel()" ref="addingPath" placeholder="新的缓存目录,比如 /mnt/cache"/>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
								<div class="ui field">
 | 
				
			||||||
 | 
									<button class="ui button small" type="button" @click.prevent="confirm">确定</button>
 | 
				
			||||||
 | 
									  <a href="" title="取消" @click.prevent="cancel"><i class="icon remove small"></i></a>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						<div v-if="!isAdding">
 | 
				
			||||||
 | 
							<button class="ui button tiny" type="button" @click.prevent="add">+</button>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</div>`
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
@@ -15,10 +15,17 @@
 | 
				
			|||||||
                </td>
 | 
					                </td>
 | 
				
			||||||
            </tr>
 | 
					            </tr>
 | 
				
			||||||
            <tr>
 | 
					            <tr>
 | 
				
			||||||
                <td>磁盘缓存目录</td>
 | 
					                <td>磁盘缓存主目录</td>
 | 
				
			||||||
                <td>
 | 
					                <td>
 | 
				
			||||||
                    <input type="text" name="cacheDiskDir" maxlength="500" value="" v-model="node.cacheDiskDir"/>
 | 
					                    <input type="text" name="cacheDiskDir" maxlength="500" value="" v-model="node.cacheDiskDir"/>
 | 
				
			||||||
                    <p class="comment">存放文件缓存的目录,通常填写绝对路径。不填则表示使用集群缓存策略中定义的目录。</p>
 | 
					                    <p class="comment">存放文件缓存的主目录,通常填写绝对路径。不填则表示使用集群缓存策略中定义的目录。</p>
 | 
				
			||||||
 | 
					                </td>
 | 
				
			||||||
 | 
					            </tr>
 | 
				
			||||||
 | 
					            <tr>
 | 
				
			||||||
 | 
					                <td>其他磁盘缓存目录</td>
 | 
				
			||||||
 | 
					                <td>
 | 
				
			||||||
 | 
					                    <node-cache-disk-dirs-box name="cacheDiskSubDirsJSON" v-model="node.cacheDiskSubDirs"></node-cache-disk-dirs-box>
 | 
				
			||||||
 | 
					                    <p class="comment">除了主目录外,可以在这里添加别的可用于缓存的目录;缓存目录有变更时(添加、删除或修改)需要手动将这些缓存目录清空。</p>
 | 
				
			||||||
                </td>
 | 
					                </td>
 | 
				
			||||||
            </tr>
 | 
					            </tr>
 | 
				
			||||||
            <tr>
 | 
					            <tr>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user