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/default/clusters/cluster/node/nodeutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
 | 
			
		||||
	"github.com/iwind/TeaGo/actions"
 | 
			
		||||
	"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)
 | 
			
		||||
	nodeMap["maxCacheDiskCapacity"] = maxCacheDiskCapacity
 | 
			
		||||
	nodeMap["cacheDiskDir"] = node.CacheDiskDir
 | 
			
		||||
	nodeMap["cacheDiskSubDirs"] = diskSubDirs
 | 
			
		||||
	nodeMap["maxCacheMemoryCapacity"] = maxCacheMemoryCapacity
 | 
			
		||||
 | 
			
		||||
	this.Show()
 | 
			
		||||
@@ -69,6 +80,7 @@ func (this *IndexAction) RunPost(params struct {
 | 
			
		||||
	NodeId                     int64
 | 
			
		||||
	MaxCacheDiskCapacityJSON   []byte
 | 
			
		||||
	CacheDiskDir               string
 | 
			
		||||
	CacheDiskSubDirsJSON       []byte
 | 
			
		||||
	MaxCacheMemoryCapacityJSON []byte
 | 
			
		||||
 | 
			
		||||
	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{
 | 
			
		||||
		NodeId:                 params.NodeId,
 | 
			
		||||
		MaxCacheDiskCapacity:   pbMaxCacheDiskCapacity,
 | 
			
		||||
		CacheDiskDir:           params.CacheDiskDir,
 | 
			
		||||
		CacheDiskSubDirsJSON:   params.CacheDiskSubDirsJSON,
 | 
			
		||||
		MaxCacheMemoryCapacity: pbMaxCacheMemoryCapacity,
 | 
			
		||||
	})
 | 
			
		||||
	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>
 | 
			
		||||
            </tr>
 | 
			
		||||
            <tr>
 | 
			
		||||
                <td>磁盘缓存目录</td>
 | 
			
		||||
                <td>磁盘缓存主目录</td>
 | 
			
		||||
                <td>
 | 
			
		||||
                    <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>
 | 
			
		||||
            </tr>
 | 
			
		||||
            <tr>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user