mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 21:50:28 +08:00 
			
		
		
		
	服务分组可以设置请求限制
This commit is contained in:
		@@ -144,6 +144,15 @@ func InitGroup(parent *actionutils.ParentAction, groupId int64, menuItem string)
 | 
				
			|||||||
			"isActive": menuItem == "remoteAddr",
 | 
								"isActive": menuItem == "remoteAddr",
 | 
				
			||||||
			"isOn":     configInfoResp.HasRemoteAddrConfig,
 | 
								"isOn":     configInfoResp.HasRemoteAddrConfig,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if teaconst.IsPlus {
 | 
				
			||||||
 | 
								leftMenuItems = append(leftMenuItems, maps.Map{
 | 
				
			||||||
 | 
									"name":     "请求限制",
 | 
				
			||||||
 | 
									"url":      urlPrefix + "/requestLimit?groupId=" + types.String(groupId),
 | 
				
			||||||
 | 
									"isActive": menuItem == "requestLimit",
 | 
				
			||||||
 | 
									"isOn":     configInfoResp.HasRequestLimitConfig,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		parent.Data["leftMenuItems"] = leftMenuItems
 | 
							parent.Data["leftMenuItems"] = leftMenuItems
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package requestlimit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/groups/group/servergrouputils"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/actions"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type IndexAction struct {
 | 
				
			||||||
 | 
						actionutils.ParentAction
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (this *IndexAction) Init() {
 | 
				
			||||||
 | 
						this.Nav("", "setting", "index")
 | 
				
			||||||
 | 
						this.SecondMenu("requestLimit")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (this *IndexAction) RunGet(params struct {
 | 
				
			||||||
 | 
						GroupId int64
 | 
				
			||||||
 | 
					}) {
 | 
				
			||||||
 | 
						_, err := servergrouputils.InitGroup(this.Parent(), params.GroupId, "requestLimit")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						webConfig, err := dao.SharedHTTPWebDAO.FindWebConfigWithServerGroupId(this.AdminContext(), params.GroupId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						this.Data["webId"] = webConfig.Id
 | 
				
			||||||
 | 
						this.Data["requestLimitConfig"] = webConfig.RequestLimit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						this.Show()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (this *IndexAction) RunPost(params struct {
 | 
				
			||||||
 | 
						WebId            int64
 | 
				
			||||||
 | 
						RequestLimitJSON []byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Must *actions.Must
 | 
				
			||||||
 | 
						CSRF *actionutils.CSRF
 | 
				
			||||||
 | 
					}) {
 | 
				
			||||||
 | 
						defer this.CreateLogInfo("修改Web %d 请求限制", params.WebId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_, err := this.RPC().HTTPWebRPC().UpdateHTTPWebRequestLimit(this.AdminContext(), &pb.UpdateHTTPWebRequestLimitRequest{
 | 
				
			||||||
 | 
							HttpWebId:        params.WebId,
 | 
				
			||||||
 | 
							RequestLimitJSON: params.RequestLimitJSON,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						this.Success()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					package requestlimit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func init() {
 | 
				
			||||||
 | 
						TeaGo.BeforeStart(func(server *TeaGo.Server) {
 | 
				
			||||||
 | 
							server.
 | 
				
			||||||
 | 
								Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeServer)).
 | 
				
			||||||
 | 
								Data("teaMenu", "servers").
 | 
				
			||||||
 | 
								Data("teaSubMenu", "group").
 | 
				
			||||||
 | 
								Prefix("/servers/groups/group/settings/requestLimit").
 | 
				
			||||||
 | 
								GetPost("", new(IndexAction)).
 | 
				
			||||||
 | 
								EndAll()
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
				
			||||||
	"github.com/iwind/TeaGo/actions"
 | 
						"github.com/iwind/TeaGo/actions"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type IndexAction struct {
 | 
					type IndexAction struct {
 | 
				
			||||||
@@ -21,6 +22,17 @@ func (this *IndexAction) Init() {
 | 
				
			|||||||
func (this *IndexAction) RunGet(params struct {
 | 
					func (this *IndexAction) RunGet(params struct {
 | 
				
			||||||
	ServerId int64
 | 
						ServerId int64
 | 
				
			||||||
}) {
 | 
					}) {
 | 
				
			||||||
 | 
						// 服务分组设置
 | 
				
			||||||
 | 
						groupResp, err := this.RPC().ServerGroupRPC().FindEnabledServerGroupConfigInfo(this.AdminContext(), &pb.FindEnabledServerGroupConfigInfoRequest{
 | 
				
			||||||
 | 
							ServerId: params.ServerId,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						this.Data["hasGroupConfig"] = groupResp.HasRequestLimitConfig
 | 
				
			||||||
 | 
						this.Data["groupSettingURL"] = "/servers/groups/group/settings/requestLimit?groupId=" + types.String(groupResp.ServerGroupId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.Data["serverId"] = params.ServerId
 | 
						this.Data["serverId"] = params.ServerId
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	webConfig, err := dao.SharedHTTPWebDAO.FindWebConfigWithServerId(this.AdminContext(), params.ServerId)
 | 
						webConfig, err := dao.SharedHTTPWebDAO.FindWebConfigWithServerId(this.AdminContext(), params.ServerId)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
// 请求限制
 | 
					// 请求限制
 | 
				
			||||||
Vue.component("http-request-limit-config-box", {
 | 
					Vue.component("http-request-limit-config-box", {
 | 
				
			||||||
	props: ["v-request-limit-config"],
 | 
						props: ["v-request-limit-config", "v-is-group", "v-is-location"],
 | 
				
			||||||
	data: function () {
 | 
						data: function () {
 | 
				
			||||||
		let config = this.vRequestLimitConfig
 | 
							let config = this.vRequestLimitConfig
 | 
				
			||||||
		if (config == null) {
 | 
							if (config == null) {
 | 
				
			||||||
@@ -51,10 +51,16 @@ Vue.component("http-request-limit-config-box", {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							isOn: function () {
 | 
				
			||||||
 | 
								return ((!this.vIsLocation && !this.vIsGroup) || this.config.isPrior) && this.config.isOn
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
	template: `<div>
 | 
						template: `<div>
 | 
				
			||||||
	<input type="hidden" name="requestLimitJSON" :value="JSON.stringify(config)"/>
 | 
						<input type="hidden" name="requestLimitJSON" :value="JSON.stringify(config)"/>
 | 
				
			||||||
	<table class="ui table selectable definition">
 | 
						<table class="ui table selectable definition">
 | 
				
			||||||
		<tbody>
 | 
							<prior-checkbox :v-config="config" v-if="vIsLocation || vIsGroup"></prior-checkbox>
 | 
				
			||||||
 | 
							<tbody v-show="(!vIsLocation && !vIsGroup) || config.isPrior">
 | 
				
			||||||
			<tr>
 | 
								<tr>
 | 
				
			||||||
				<td class="title">是否启用</td>
 | 
									<td class="title">是否启用</td>
 | 
				
			||||||
				<td>
 | 
									<td>
 | 
				
			||||||
@@ -62,7 +68,7 @@ Vue.component("http-request-limit-config-box", {
 | 
				
			|||||||
				</td>
 | 
									</td>
 | 
				
			||||||
			</tr>
 | 
								</tr>
 | 
				
			||||||
		</tbody>
 | 
							</tbody>
 | 
				
			||||||
		<tbody v-show="config.isOn">
 | 
							<tbody v-show="isOn()">
 | 
				
			||||||
			<tr>
 | 
								<tr>
 | 
				
			||||||
				<td>最大并发连接数</td>
 | 
									<td>最大并发连接数</td>
 | 
				
			||||||
				<td>
 | 
									<td>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					{$layout}
 | 
				
			||||||
 | 
					{$template "/servers/groups/group/menu"}
 | 
				
			||||||
 | 
					{$template "/left_menu_without_menu"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="right-box without-menu">
 | 
				
			||||||
 | 
						<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
 | 
				
			||||||
 | 
							<input type="hidden" name="webId" :value="webId"/>
 | 
				
			||||||
 | 
					        <csrf-token></csrf-token>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <http-request-limit-config-box
 | 
				
			||||||
 | 
					                :v-request-limit-config="requestLimitConfig"
 | 
				
			||||||
 | 
					                :v-is-group="true"></http-request-limit-config-box>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<submit-btn></submit-btn>
 | 
				
			||||||
 | 
						</form>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					Tea.context(function () {
 | 
				
			||||||
 | 
						this.success = NotifyReloadSuccess("保存成功")
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
@@ -3,12 +3,18 @@
 | 
				
			|||||||
{$template "/left_menu_with_menu"}
 | 
					{$template "/left_menu_with_menu"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<div class="right-box with-menu">
 | 
					<div class="right-box with-menu">
 | 
				
			||||||
	<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					    <div v-if="hasGroupConfig">
 | 
				
			||||||
		<input type="hidden" name="webId" :value="webId"/>
 | 
					        <div class="margin"></div>
 | 
				
			||||||
        <csrf-token></csrf-token>
 | 
					        <warning-message>由于已经在当前<a :href="groupSettingURL">服务分组</a>中进行了对应的配置,在这里的配置将不会生效。</warning-message>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div :class="{'opacity-mask': hasGroupConfig}">
 | 
				
			||||||
 | 
					        <form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
 | 
				
			||||||
 | 
					            <input type="hidden" name="webId" :value="webId"/>
 | 
				
			||||||
 | 
					            <csrf-token></csrf-token>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <http-request-limit-config-box :v-request-limit-config="requestLimitConfig"></http-request-limit-config-box>
 | 
					            <http-request-limit-config-box :v-request-limit-config="requestLimitConfig"></http-request-limit-config-box>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<submit-btn></submit-btn>
 | 
					            <submit-btn></submit-btn>
 | 
				
			||||||
	</form>
 | 
					        </form>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user