diff --git a/internal/web/actions/default/servers/groups/group/servergrouputils/utils.go b/internal/web/actions/default/servers/groups/group/servergrouputils/utils.go index 6cd6fd85..7c1cddec 100644 --- a/internal/web/actions/default/servers/groups/group/servergrouputils/utils.go +++ b/internal/web/actions/default/servers/groups/group/servergrouputils/utils.go @@ -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 } diff --git a/internal/web/actions/default/servers/groups/group/settings/requestLimit/index.go b/internal/web/actions/default/servers/groups/group/settings/requestLimit/index.go new file mode 100644 index 00000000..716550a3 --- /dev/null +++ b/internal/web/actions/default/servers/groups/group/settings/requestLimit/index.go @@ -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() +} diff --git a/internal/web/actions/default/servers/groups/group/settings/requestLimit/init.go b/internal/web/actions/default/servers/groups/group/settings/requestLimit/init.go new file mode 100644 index 00000000..128cdef3 --- /dev/null +++ b/internal/web/actions/default/servers/groups/group/settings/requestLimit/init.go @@ -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() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/requestLimit/index.go b/internal/web/actions/default/servers/server/settings/requestLimit/index.go index 4e60fa7c..c8ecdd5e 100644 --- a/internal/web/actions/default/servers/server/settings/requestLimit/index.go +++ b/internal/web/actions/default/servers/server/settings/requestLimit/index.go @@ -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) diff --git a/web/public/js/components/server/http-request-limit-config-box.js b/web/public/js/components/server/http-request-limit-config-box.js index 1f8813ea..d8a171d1 100644 --- a/web/public/js/components/server/http-request-limit-config-box.js +++ b/web/public/js/components/server/http-request-limit-config-box.js @@ -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: `
- + + - +
是否启用 @@ -62,7 +68,7 @@ Vue.component("http-request-limit-config-box", {
最大并发连接数 diff --git a/web/views/@default/servers/groups/group/settings/requestLimit/index.html b/web/views/@default/servers/groups/group/settings/requestLimit/index.html new file mode 100644 index 00000000..02cdfef5 --- /dev/null +++ b/web/views/@default/servers/groups/group/settings/requestLimit/index.html @@ -0,0 +1,16 @@ +{$layout} +{$template "/servers/groups/group/menu"} +{$template "/left_menu_without_menu"} + +
+
+ + + + + + +
+
\ No newline at end of file diff --git a/web/views/@default/servers/groups/group/settings/requestLimit/index.js b/web/views/@default/servers/groups/group/settings/requestLimit/index.js new file mode 100644 index 00000000..295a9aaf --- /dev/null +++ b/web/views/@default/servers/groups/group/settings/requestLimit/index.js @@ -0,0 +1,3 @@ +Tea.context(function () { + this.success = NotifyReloadSuccess("保存成功") +}) \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/requestLimit/index.html b/web/views/@default/servers/server/settings/requestLimit/index.html index 9ed8dced..24dc9318 100644 --- a/web/views/@default/servers/server/settings/requestLimit/index.html +++ b/web/views/@default/servers/server/settings/requestLimit/index.html @@ -3,12 +3,18 @@ {$template "/left_menu_with_menu"}
-
- - +
+
+ 由于已经在当前服务分组中进行了对应的配置,在这里的配置将不会生效。 +
+
+ + + - + - - + + +
\ No newline at end of file