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",
 | 
			
		||||
			"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
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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/pb"
 | 
			
		||||
	"github.com/iwind/TeaGo/actions"
 | 
			
		||||
	"github.com/iwind/TeaGo/types"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type IndexAction struct {
 | 
			
		||||
@@ -21,6 +22,17 @@ func (this *IndexAction) Init() {
 | 
			
		||||
func (this *IndexAction) RunGet(params struct {
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
	webConfig, err := dao.SharedHTTPWebDAO.FindWebConfigWithServerId(this.AdminContext(), params.ServerId)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
// 请求限制
 | 
			
		||||
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 () {
 | 
			
		||||
		let config = this.vRequestLimitConfig
 | 
			
		||||
		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>
 | 
			
		||||
	<input type="hidden" name="requestLimitJSON" :value="JSON.stringify(config)"/>
 | 
			
		||||
	<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>
 | 
			
		||||
				<td class="title">是否启用</td>
 | 
			
		||||
				<td>
 | 
			
		||||
@@ -62,7 +68,7 @@ Vue.component("http-request-limit-config-box", {
 | 
			
		||||
				</td>
 | 
			
		||||
			</tr>
 | 
			
		||||
		</tbody>
 | 
			
		||||
		<tbody v-show="config.isOn">
 | 
			
		||||
		<tbody v-show="isOn()">
 | 
			
		||||
			<tr>
 | 
			
		||||
				<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,6 +3,11 @@
 | 
			
		||||
{$template "/left_menu_with_menu"}
 | 
			
		||||
 | 
			
		||||
<div class="right-box with-menu">
 | 
			
		||||
    <div v-if="hasGroupConfig">
 | 
			
		||||
        <div class="margin"></div>
 | 
			
		||||
        <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>
 | 
			
		||||
@@ -12,3 +17,4 @@
 | 
			
		||||
            <submit-btn></submit-btn>
 | 
			
		||||
        </form>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
		Reference in New Issue
	
	Block a user