From 13d165267753fdeb51e0b1eed79d61c085a6418d Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Wed, 29 Sep 2021 20:12:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=8E=9F=E6=9C=89gzip?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=88=B0compression=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/setup/sql_upgrade.go | 102 +++++++++++++++++++++++++++++ internal/setup/sql_upgrade_test.go | 16 +++++ 2 files changed, 118 insertions(+) diff --git a/internal/setup/sql_upgrade.go b/internal/setup/sql_upgrade.go index 0076d18c..e5633001 100644 --- a/internal/setup/sql_upgrade.go +++ b/internal/setup/sql_upgrade.go @@ -9,6 +9,7 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/dnsconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" "github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/lists" @@ -52,6 +53,9 @@ var upgradeFuncs = []*upgradeVersion{ { "0.3.1", upgradeV0_3_1, }, + { + "0.3.2", upgradeV0_3_2, + }, } // UpgradeSQLData 升级SQL数据 @@ -393,3 +397,101 @@ func upgradeV0_3_1(db *dbs.DB) error { return nil } + +// v0.3.2 +func upgradeV0_3_2(db *dbs.DB) error { + // gzip => compression + + type HTTPGzipRef struct { + IsPrior bool `yaml:"isPrior" json:"isPrior"` // 是否覆盖 + IsOn bool `yaml:"isOn" json:"isOn"` // 是否开启 + GzipId int64 `yaml:"gzipId" json:"gzipId"` // 使用的配置ID + } + + webOnes, _, err := db.FindOnes("SELECT id, gzip FROM edgeHTTPWebs WHERE gzip IS NOT NULL") + if err != nil { + return err + } + for _, webOne := range webOnes { + var gzipRef = &HTTPGzipRef{} + err = json.Unmarshal([]byte(webOne.GetString("gzip")), gzipRef) + if err != nil { + continue + } + if gzipRef == nil || gzipRef.GzipId <= 0 { + continue + } + var webId = webOne.GetInt("id") + + var compressionConfig = &serverconfigs.HTTPCompressionConfig{ + UseDefaultTypes: true, + } + compressionConfig.IsPrior = gzipRef.IsPrior + compressionConfig.IsOn = gzipRef.IsOn + + gzipOne, err := db.FindOne("SELECT * FROM edgeHTTPGzips WHERE id=?", gzipRef.GzipId) + if err != nil { + return err + } + if len(gzipOne) == 0 { + continue + } + + level := gzipOne.GetInt("level") + if level <= 0 { + continue + } + if level > 0 && level <= 10 { + compressionConfig.Level = types.Int8(level) + } else if level > 10 { + compressionConfig.Level = 10 + } + + var minLengthBytes = []byte(gzipOne.GetString("minLength")) + if len(minLengthBytes) > 0 { + var sizeCapacity = &shared.SizeCapacity{} + err = json.Unmarshal(minLengthBytes, sizeCapacity) + if err != nil { + continue + } + if sizeCapacity != nil { + compressionConfig.MinLength = sizeCapacity + } + } + + var maxLengthBytes = []byte(gzipOne.GetString("maxLength")) + if len(maxLengthBytes) > 0 { + var sizeCapacity = &shared.SizeCapacity{} + err = json.Unmarshal(maxLengthBytes, sizeCapacity) + if err != nil { + continue + } + if sizeCapacity != nil { + compressionConfig.MaxLength = sizeCapacity + } + } + + var condsBytes = []byte(gzipOne.GetString("conds")) + if len(condsBytes) > 0 { + var conds = &shared.HTTPRequestCondsConfig{} + err = json.Unmarshal(condsBytes, conds) + if err != nil { + continue + } + if conds != nil { + compressionConfig.Conds = conds + } + } + + configJSON, err := json.Marshal(compressionConfig) + if err != nil { + return err + } + _, err = db.Exec("UPDATE edgeHTTPWebs SET compression=? WHERE id=?", string(configJSON), webId) + if err != nil { + return err + } + } + + return nil +} diff --git a/internal/setup/sql_upgrade_test.go b/internal/setup/sql_upgrade_test.go index 060269ba..f1aa278c 100644 --- a/internal/setup/sql_upgrade_test.go +++ b/internal/setup/sql_upgrade_test.go @@ -36,4 +36,20 @@ func TestUpgradeSQLData_v1_3_1(t *testing.T) { t.Fatal(err) } t.Log("ok") +} + +func TestUpgradeSQLData_v1_3_2(t *testing.T) { + db, err := dbs.NewInstanceFromConfig(&dbs.DBConfig{ + Driver: "mysql", + Dsn: "root:123456@tcp(127.0.0.1:3306)/db_edge?charset=utf8mb4&timeout=30s", + Prefix: "edge", + }) + if err != nil { + t.Fatal(err) + } + err = upgradeV0_3_2(db) + if err != nil { + t.Fatal(err) + } + t.Log("ok") } \ No newline at end of file