diff --git a/internal/web/actions/default/servers/logs/init.go b/internal/web/actions/default/servers/logs/init.go index f6f40c24..e504e224 100644 --- a/internal/web/actions/default/servers/logs/init.go +++ b/internal/web/actions/default/servers/logs/init.go @@ -16,6 +16,7 @@ func init() { Data("teaSubMenu", "log"). Prefix("/servers/logs"). Get("", new(IndexAction)). + GetPost("/settings", new(SettingsAction)). EndAll() }) } diff --git a/internal/web/actions/default/servers/logs/settings.go b/internal/web/actions/default/servers/logs/settings.go new file mode 100644 index 00000000..c646c70c --- /dev/null +++ b/internal/web/actions/default/servers/logs/settings.go @@ -0,0 +1,94 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package logs + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs" + "github.com/iwind/TeaGo/actions" +) + +type SettingsAction struct { + actionutils.ParentAction +} + +func (this *SettingsAction) Init() { + this.Nav("", "", "settings") +} + +func (this *SettingsAction) RunGet(params struct{}) { + settingsResp, err := this.RPC().SysSettingRPC().ReadSysSetting(this.AdminContext(), &pb.ReadSysSettingRequest{Code: systemconfigs.SettingCodeAccessLogQueue}) + if err != nil { + this.ErrorPage(err) + return + } + + var config = &serverconfigs.AccessLogQueueConfig{ + MaxLength: 0, + CountPerSecond: 0, + Percent: 100, + } + if len(settingsResp.ValueJSON) > 0 { + err = json.Unmarshal(settingsResp.ValueJSON, config) + if err != nil { + this.ErrorPage(err) + return + } + } else { + configJSON, err := json.Marshal(config) + if err != nil { + this.ErrorPage(err) + return + } + _, err = this.RPC().SysSettingRPC().UpdateSysSetting(this.AdminContext(), &pb.UpdateSysSettingRequest{ + Code: systemconfigs.SettingCodeAccessLogQueue, + ValueJSON: configJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + } + + this.Data["config"] = config + + this.Show() +} + +func (this *SettingsAction) RunPost(params struct { + Percent int + CountPerSecond int + MaxLength int + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + params.Must. + Field("percent", params.Percent). + Gte(0, "请输入大于0的整数"). + Lte(100, "请输入小于100的整数") + + var config = &serverconfigs.AccessLogQueueConfig{ + MaxLength: params.MaxLength, + CountPerSecond: params.CountPerSecond, + Percent: params.Percent, + } + configJSON, err := json.Marshal(config) + if err != nil { + this.ErrorPage(err) + return + } + _, err = this.RPC().SysSettingRPC().UpdateSysSetting(this.AdminContext(), &pb.UpdateSysSettingRequest{ + Code: systemconfigs.SettingCodeAccessLogQueue, + ValueJSON: configJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/web/views/@default/servers/logs/index.html b/web/views/@default/servers/logs/index.html index 8300cb41..5c462a63 100644 --- a/web/views/@default/servers/logs/index.html +++ b/web/views/@default/servers/logs/index.html @@ -5,6 +5,7 @@ 所有日志 错误日志 WAF日志 + 设置
diff --git a/web/views/@default/servers/logs/settings.html b/web/views/@default/servers/logs/settings.html new file mode 100644 index 00000000..b08841a8 --- /dev/null +++ b/web/views/@default/servers/logs/settings.html @@ -0,0 +1,45 @@ +{$layout} + + + 所有日志 + 错误日志 + WAF日志 + 设置 + + +
+ + + +

存储队列设置

+ + + + + + + + + + + + + +
采样率 +
+ + % +
+

表示将写入{{config.percent}}%的访问日志数据;此设置不影响WAF相关日志。

+
写入速度 +
+ + 条/秒 +
+

单个API节点每秒写入的访问日志数量;0表示不限制。

+
队列长度 + +

等待写入的队列最大长度,超出此长度的访问日志将被丢弃;0表示不限制。

+
+ +
\ No newline at end of file diff --git a/web/views/@default/servers/logs/settings.js b/web/views/@default/servers/logs/settings.js new file mode 100644 index 00000000..e48c477b --- /dev/null +++ b/web/views/@default/servers/logs/settings.js @@ -0,0 +1,3 @@ +Tea.context(function () { + this.success = NotifyReloadSuccess("保存成功,将会在一分钟之内生效") +}) \ No newline at end of file