初步实现对象存储源站

This commit is contained in:
刘祥超
2023-06-07 17:25:20 +08:00
parent ccbb14836e
commit 75e353db0e
3 changed files with 94 additions and 33 deletions

View File

@@ -5,6 +5,7 @@ import (
"errors" "errors"
"github.com/TeaOSLab/EdgeAPI/internal/utils" "github.com/TeaOSLab/EdgeAPI/internal/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ossconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
_ "github.com/go-sql-driver/mysql" _ "github.com/go-sql-driver/mysql"
@@ -91,7 +92,8 @@ func (this *OriginDAO) CreateOrigin(tx *dbs.Tx,
adminId int64, adminId int64,
userId int64, userId int64,
name string, name string,
addrJSON string, addrJSON []byte,
ossConfig *ossconfigs.OSSConfig,
description string, description string,
weight int32, isOn bool, weight int32, isOn bool,
connTimeout *shared.TimeDuration, connTimeout *shared.TimeDuration,
@@ -141,7 +143,18 @@ func (this *OriginDAO) CreateOrigin(tx *dbs.Tx,
op.MaxIdleConns = 0 op.MaxIdleConns = 0
} }
if len(addrJSON) > 0 {
op.Addr = addrJSON op.Addr = addrJSON
}
if ossConfig != nil {
ossConfigJSON, err := json.Marshal(ossConfig)
if err != nil {
return 0, err
}
op.Oss = ossConfigJSON
}
op.Description = description op.Description = description
if weight < 0 { if weight < 0 {
weight = 0 weight = 0
@@ -182,7 +195,8 @@ func (this *OriginDAO) CreateOrigin(tx *dbs.Tx,
func (this *OriginDAO) UpdateOrigin(tx *dbs.Tx, func (this *OriginDAO) UpdateOrigin(tx *dbs.Tx,
originId int64, originId int64,
name string, name string,
addrJSON string, addrJSON []byte,
ossConfig *ossconfigs.OSSConfig,
description string, description string,
weight int32, weight int32,
isOn bool, isOn bool,
@@ -201,7 +215,17 @@ func (this *OriginDAO) UpdateOrigin(tx *dbs.Tx,
var op = NewOriginOperator() var op = NewOriginOperator()
op.Id = originId op.Id = originId
op.Name = name op.Name = name
op.Addr = addrJSON op.Addr = addrJSON
if ossConfig != nil {
ossConfigJSON, err := json.Marshal(ossConfig)
if err != nil {
return err
}
op.Oss = ossConfigJSON
}
op.Description = description op.Description = description
if weight < 0 { if weight < 0 {
weight = 0 weight = 0
@@ -369,6 +393,7 @@ func (this *OriginDAO) ComposeOriginConfig(tx *dbs.Tx, originId int64, dataMap *
FollowPort: origin.FollowPort, FollowPort: origin.FollowPort,
} }
// addr
if IsNotNull(origin.Addr) { if IsNotNull(origin.Addr) {
var addr = &serverconfigs.NetworkAddressConfig{} var addr = &serverconfigs.NetworkAddressConfig{}
err = json.Unmarshal(origin.Addr, addr) err = json.Unmarshal(origin.Addr, addr)
@@ -378,6 +403,16 @@ func (this *OriginDAO) ComposeOriginConfig(tx *dbs.Tx, originId int64, dataMap *
config.Addr = addr config.Addr = addr
} }
// oss
if IsNotNull(origin.Oss) {
var ossConfig = ossconfigs.NewOSSConfig()
err = json.Unmarshal(origin.Oss, ossConfig)
if err != nil {
return nil, err
}
config.OSS = ossConfig
}
if IsNotNull(origin.ConnTimeout) { if IsNotNull(origin.ConnTimeout) {
var connTimeout = &shared.TimeDuration{} var connTimeout = &shared.TimeDuration{}
err = json.Unmarshal(origin.ConnTimeout, &connTimeout) err = json.Unmarshal(origin.ConnTimeout, &connTimeout)

View File

@@ -11,6 +11,7 @@ type Origin struct {
Name string `field:"name"` // 名称 Name string `field:"name"` // 名称
Version uint32 `field:"version"` // 版本 Version uint32 `field:"version"` // 版本
Addr dbs.JSON `field:"addr"` // 地址 Addr dbs.JSON `field:"addr"` // 地址
Oss dbs.JSON `field:"oss"` // OSS配置
Description string `field:"description"` // 描述 Description string `field:"description"` // 描述
Code string `field:"code"` // 代号 Code string `field:"code"` // 代号
Weight uint32 `field:"weight"` // 权重 Weight uint32 `field:"weight"` // 权重
@@ -34,33 +35,34 @@ type Origin struct {
} }
type OriginOperator struct { type OriginOperator struct {
Id interface{} // ID Id any // ID
AdminId interface{} // 管理员ID AdminId any // 管理员ID
UserId interface{} // 用户ID UserId any // 用户ID
IsOn interface{} // 是否启用 IsOn any // 是否启用
Name interface{} // 名称 Name any // 名称
Version interface{} // 版本 Version any // 版本
Addr interface{} // 地址 Addr any // 地址
Description interface{} // 描述 Oss any // OSS配置
Code interface{} // 代号 Description any // 描述
Weight interface{} // 权重 Code any // 代号
ConnTimeout interface{} // 连接超时 Weight any // 权重
ReadTimeout interface{} // 超时 ConnTimeout any // 连接超时
IdleTimeout interface{} // 空闲连接超时 ReadTimeout any // 超时
MaxFails interface{} // 最多失败次数 IdleTimeout any // 空闲连接超时
MaxConns interface{} // 最大并发连接 MaxFails any // 最多失败次
MaxIdleConns interface{} // 最多空闲连接数 MaxConns any // 最大并发连接数
HttpRequestURI interface{} // 转发后的请求URI MaxIdleConns any // 最多空闲连接数
HttpRequestHeader interface{} // 请求Header配置 HttpRequestURI any // 转发后的请求URI
HttpResponseHeader interface{} // 响应Header配置 HttpRequestHeader any // 请求Header配置
Host interface{} // 自定义主机名 HttpResponseHeader any // 响应Header配置
HealthCheck interface{} // 健康检查设置 Host any // 自定义主机名
Cert interface{} // 证书设置 HealthCheck any // 健康检查设置
Ftp interface{} // FTP相关设置 Cert any // 证书设置
CreatedAt interface{} // 创建时间 Ftp any // FTP相关设置
Domains interface{} // 所属域名 CreatedAt any // 创建时间
FollowPort interface{} // 端口跟随 Domains any // 所属域名
State interface{} // 状态 FollowPort any // 端口跟随
State any // 状态
} }
func NewOriginOperator() *OriginOperator { func NewOriginOperator() *OriginOperator {

View File

@@ -6,6 +6,7 @@ import (
"errors" "errors"
"github.com/TeaOSLab/EdgeAPI/internal/db/models" "github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ossconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
"github.com/iwind/TeaGo/maps" "github.com/iwind/TeaGo/maps"
@@ -23,15 +24,26 @@ func (this *OriginService) CreateOrigin(ctx context.Context, req *pb.CreateOrigi
return nil, err return nil, err
} }
// 源站地址设置
if req.Addr == nil { if req.Addr == nil {
return nil, errors.New("'addr' can not be nil") return nil, errors.New("'addr' can not be nil")
} }
addrMap := maps.Map{ var addrMap = maps.Map{
"protocol": req.Addr.Protocol, "protocol": req.Addr.Protocol,
"portRange": req.Addr.PortRange, "portRange": req.Addr.PortRange,
"host": req.Addr.Host, "host": req.Addr.Host,
} }
// OSS设置
var ossConfig *ossconfigs.OSSConfig
if len(req.OssJSON) > 0 {
ossConfig = ossconfigs.NewOSSConfig()
err = json.Unmarshal(req.OssJSON, ossConfig)
if err != nil {
return nil, err
}
}
var tx = this.NullTx() var tx = this.NullTx()
// 校验参数 // 校验参数
@@ -72,7 +84,7 @@ func (this *OriginService) CreateOrigin(ctx context.Context, req *pb.CreateOrigi
} }
} }
originId, err := models.SharedOriginDAO.CreateOrigin(tx, adminId, userId, req.Name, string(addrMap.AsJSON()), req.Description, req.Weight, req.IsOn, connTimeout, readTimeout, idleTimeout, req.MaxConns, req.MaxIdleConns, certRef, req.Domains, req.Host, req.FollowPort) originId, err := models.SharedOriginDAO.CreateOrigin(tx, adminId, userId, req.Name, addrMap.AsJSON(), ossConfig, req.Description, req.Weight, req.IsOn, connTimeout, readTimeout, idleTimeout, req.MaxConns, req.MaxIdleConns, certRef, req.Domains, req.Host, req.FollowPort)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -95,6 +107,8 @@ func (this *OriginService) UpdateOrigin(ctx context.Context, req *pb.UpdateOrigi
return nil, err return nil, err
} }
} }
// 源站地址设置
if req.Addr == nil { if req.Addr == nil {
return nil, errors.New("'addr' can not be nil") return nil, errors.New("'addr' can not be nil")
} }
@@ -104,6 +118,16 @@ func (this *OriginService) UpdateOrigin(ctx context.Context, req *pb.UpdateOrigi
"host": req.Addr.Host, "host": req.Addr.Host,
} }
// OSS设置
var ossConfig *ossconfigs.OSSConfig
if len(req.OssJSON) > 0 {
ossConfig = ossconfigs.NewOSSConfig()
err = json.Unmarshal(req.OssJSON, ossConfig)
if err != nil {
return nil, err
}
}
// 校验参数 // 校验参数
var connTimeout = &shared.TimeDuration{} var connTimeout = &shared.TimeDuration{}
if len(req.ConnTimeoutJSON) > 0 { if len(req.ConnTimeoutJSON) > 0 {
@@ -142,7 +166,7 @@ func (this *OriginService) UpdateOrigin(ctx context.Context, req *pb.UpdateOrigi
} }
} }
err = models.SharedOriginDAO.UpdateOrigin(tx, req.OriginId, req.Name, string(addrMap.AsJSON()), req.Description, req.Weight, req.IsOn, connTimeout, readTimeout, idleTimeout, req.MaxConns, req.MaxIdleConns, certRef, req.Domains, req.Host, req.FollowPort) err = models.SharedOriginDAO.UpdateOrigin(tx, req.OriginId, req.Name, addrMap.AsJSON(), ossConfig, req.Description, req.Weight, req.IsOn, connTimeout, readTimeout, idleTimeout, req.MaxConns, req.MaxIdleConns, certRef, req.Domains, req.Host, req.FollowPort)
if err != nil { if err != nil {
return nil, err return nil, err
} }