diff --git a/internal/web/actions/default/clusters/cluster/settings/init.go b/internal/web/actions/default/clusters/cluster/settings/init.go index 55ae2c9e..85c98cb2 100644 --- a/internal/web/actions/default/clusters/cluster/settings/init.go +++ b/internal/web/actions/default/clusters/cluster/settings/init.go @@ -12,6 +12,7 @@ import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/thresholds" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/toa" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/waf" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/webp" clusters "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/clusterutils" "github.com/TeaOSLab/EdgeAdmin/internal/web/helpers" "github.com/iwind/TeaGo" @@ -74,6 +75,10 @@ func init() { GetPost("/createPopup", new(metrics.CreatePopupAction)). Post("/delete", new(metrics.DeleteAction)). + // WebP + Prefix("/clusters/cluster/settings/webp"). + GetPost("", new(webp.IndexAction)). + EndAll() }) } diff --git a/internal/web/actions/default/clusters/cluster/settings/webp/index.go b/internal/web/actions/default/clusters/cluster/settings/webp/index.go new file mode 100644 index 00000000..019611e8 --- /dev/null +++ b/internal/web/actions/default/clusters/cluster/settings/webp/index.go @@ -0,0 +1,98 @@ +package webp + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" + "github.com/iwind/TeaGo/actions" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { + this.Nav("", "setting", "") + this.SecondMenu("webp") +} + +func (this *IndexAction) RunGet(params struct { + ClusterId int64 +}) { + webpResp, err := this.RPC().NodeClusterRPC().FindEnabledNodeClusterWebPPolicy(this.AdminContext(), &pb.FindEnabledNodeClusterWebPPolicyRequest{NodeClusterId: params.ClusterId}) + if err != nil { + this.ErrorPage(err) + return + } + if len(webpResp.WebpPolicyJSON) == 0 { + this.Data["webpPolicy"] = nodeconfigs.DefaultWebPImagePolicy + } else { + var config = &nodeconfigs.WebPImagePolicy{} + err = json.Unmarshal(webpResp.WebpPolicyJSON, config) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["webpPolicy"] = config + } + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + ClusterId int64 + IsOn bool + RequireCache bool + MinLengthJSON []byte + MaxLengthJSON []byte + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + defer this.CreateLogInfo("修改集群 %d 的WebP设置", params.ClusterId) + + var config = &nodeconfigs.WebPImagePolicy{ + IsOn: params.IsOn, + RequireCache: params.RequireCache, + } + + if len(params.MinLengthJSON) > 0 { + var minLength = &shared.SizeCapacity{} + err := json.Unmarshal(params.MinLengthJSON, minLength) + if err != nil { + this.ErrorPage(err) + return + } + config.MinLength = minLength + } + + if len(params.MaxLengthJSON) > 0 { + var maxLength = &shared.SizeCapacity{} + err := json.Unmarshal(params.MaxLengthJSON, maxLength) + if err != nil { + this.ErrorPage(err) + return + } + config.MaxLength = maxLength + } + + configJSON, err := json.Marshal(config) + if err != nil { + this.ErrorPage(err) + return + } + + _, err = this.RPC().NodeClusterRPC().UpdateNodeClusterWebPPolicy(this.AdminContext(), &pb.UpdateNodeClusterWebPPolicyRequest{ + NodeClusterId: params.ClusterId, + WebpPolicyJSON: configJSON, + }) + + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/clusters/clusterutils/cluster_helper.go b/internal/web/actions/default/clusters/clusterutils/cluster_helper.go index 702cf13d..635a32e8 100644 --- a/internal/web/actions/default/clusters/clusterutils/cluster_helper.go +++ b/internal/web/actions/default/clusters/clusterutils/cluster_helper.go @@ -13,7 +13,7 @@ import ( "strconv" ) -// 单个集群的帮助 +// ClusterHelper 单个集群的帮助 type ClusterHelper struct { } @@ -124,6 +124,12 @@ func (this *ClusterHelper) createSettingMenu(cluster *pb.NodeCluster, info *pb.F "isActive": selectedItem == "dns", "isOn": cluster.DnsDomainId > 0 || len(cluster.DnsName) > 0, }) + items = append(items, maps.Map{ + "name": "WebP", + "url": "/clusters/cluster/settings/webp?clusterId=" + clusterId, + "isActive": selectedItem == "webp", + "isOn": info != nil && info.WebpIsOn, + }) items = append(items, maps.Map{ "name": "统计指标", "url": "/clusters/cluster/settings/metrics?clusterId=" + clusterId, diff --git a/internal/web/actions/default/servers/server/settings/webp/index.go b/internal/web/actions/default/servers/server/settings/webp/index.go index e8d59bee..b410737e 100644 --- a/internal/web/actions/default/servers/server/settings/webp/index.go +++ b/internal/web/actions/default/servers/server/settings/webp/index.go @@ -5,6 +5,7 @@ package webp import ( "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" @@ -44,6 +45,25 @@ func (this *IndexAction) RunGet(params struct { this.Data["webId"] = webConfig.Id this.Data["webpConfig"] = webConfig.WebP + // WebP策略配置 + var serverMap = this.Data.GetMap("server") + var clusterId = serverMap.GetInt64("clusterId") + webpPolicyResp, err := this.RPC().NodeClusterRPC().FindEnabledNodeClusterWebPPolicy(this.AdminContext(), &pb.FindEnabledNodeClusterWebPPolicyRequest{NodeClusterId: clusterId}) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["requireCache"] = true + if len(webpPolicyResp.WebpPolicyJSON) > 0 { + var webpPolicy = &nodeconfigs.WebPImagePolicy{} + err = json.Unmarshal(webpPolicyResp.WebpPolicyJSON, webpPolicy) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["requireCache"] = webpPolicy.RequireCache + } + this.Show() } diff --git a/internal/web/actions/default/servers/serverutils/server_helper.go b/internal/web/actions/default/servers/serverutils/server_helper.go index d6676ab3..1a57ef53 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -62,7 +62,7 @@ func (this *ServerHelper) createLeftMenu(action *actions.ActionObject) { logs.Error(err) return } - server := serverResp.Server + var server = serverResp.Server if server == nil { logs.Error(errors.New("can not find the server")) return @@ -70,11 +70,18 @@ func (this *ServerHelper) createLeftMenu(action *actions.ActionObject) { // 初始化数据 if !action.Data.Has("server") { - action.Data["server"] = maps.Map{"id": server.Id, "name": server.Name} + if server.NodeCluster == nil { + server.NodeCluster = &pb.NodeCluster{Id: 0} + } + action.Data["server"] = maps.Map{ + "id": server.Id, + "name": server.Name, + "clusterId": server.NodeCluster.Id, + } } // 服务管理 - serverConfig := &serverconfigs.ServerConfig{} + var serverConfig = &serverconfigs.ServerConfig{} err = json.Unmarshal(server.Config, serverConfig) if err != nil { logs.Error(err) diff --git a/web/public/js/components/server/http-webp-config-box.js b/web/public/js/components/server/http-webp-config-box.js index 61907425..4054be3c 100644 --- a/web/public/js/components/server/http-webp-config-box.js +++ b/web/public/js/components/server/http-webp-config-box.js @@ -1,5 +1,5 @@ Vue.component("http-webp-config-box", { - props: ["v-webp-config", "v-is-location", "v-is-group"], + props: ["v-webp-config", "v-is-location", "v-is-group", "v-require-cache"], data: function () { let config = this.vWebpConfig if (config == null) { @@ -75,7 +75,7 @@ Vue.component("http-webp-config-box", { -
选中后表示开启自动WebP压缩;只有满足缓存条件的图片内容才会被转换。
+选中后表示开启自动WebP压缩;只有满足缓存条件的图片内容才会被转换。
diff --git a/web/views/@default/clusters/cluster/settings/webp/index.html b/web/views/@default/clusters/cluster/settings/webp/index.html new file mode 100644 index 00000000..5a5fd7f2 --- /dev/null +++ b/web/views/@default/clusters/cluster/settings/webp/index.html @@ -0,0 +1,42 @@ +{$layout} +{$template "/left_menu"} + +