Skip to content

Commit b74fae8

Browse files
committed
反向代理可以整体设置源站默认超时时间等参数
1 parent d6de02b commit b74fae8

3 files changed

Lines changed: 102 additions & 2 deletions

File tree

internal/db/models/reverse_proxy_dao.go

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"errors"
66
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
7+
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
78
_ "github.com/go-sql-driver/mysql"
89
"github.com/iwind/TeaGo/Tea"
910
"github.com/iwind/TeaGo/dbs"
@@ -149,6 +150,37 @@ func (this *ReverseProxyDAO) ComposeReverseProxyConfig(tx *dbs.Tx, reverseProxyI
149150
config.AddHeaders = addHeaders
150151
}
151152

153+
// 源站相关默认设置
154+
config.MaxConns = int(reverseProxy.MaxConns)
155+
config.MaxIdleConns = int(reverseProxy.MaxIdleConns)
156+
157+
if IsNotNull(reverseProxy.ConnTimeout) {
158+
connTimeout := &shared.TimeDuration{}
159+
err = json.Unmarshal([]byte(reverseProxy.ConnTimeout), &connTimeout)
160+
if err != nil {
161+
return nil, err
162+
}
163+
config.ConnTimeout = connTimeout
164+
}
165+
166+
if IsNotNull(reverseProxy.ReadTimeout) {
167+
readTimeout := &shared.TimeDuration{}
168+
err = json.Unmarshal([]byte(reverseProxy.ReadTimeout), &readTimeout)
169+
if err != nil {
170+
return nil, err
171+
}
172+
config.ReadTimeout = readTimeout
173+
}
174+
175+
if IsNotNull(reverseProxy.IdleTimeout) {
176+
idleTimeout := &shared.TimeDuration{}
177+
err = json.Unmarshal([]byte(reverseProxy.IdleTimeout), &idleTimeout)
178+
if err != nil {
179+
return nil, err
180+
}
181+
config.IdleTimeout = idleTimeout
182+
}
183+
152184
return config, nil
153185
}
154186

@@ -242,7 +274,7 @@ func (this *ReverseProxyDAO) UpdateReverseProxyBackupOrigins(tx *dbs.Tx, reverse
242274
}
243275

244276
// 修改是否启用
245-
func (this *ReverseProxyDAO) UpdateReverseProxy(tx *dbs.Tx, reverseProxyId int64, requestHostType int8, requestHost string, requestURI string, stripPrefix string, autoFlush bool, addHeaders []string) error {
277+
func (this *ReverseProxyDAO) UpdateReverseProxy(tx *dbs.Tx, reverseProxyId int64, requestHostType int8, requestHost string, requestURI string, stripPrefix string, autoFlush bool, addHeaders []string, connTimeout *shared.TimeDuration, readTimeout *shared.TimeDuration, idleTimeout *shared.TimeDuration, maxConns int32, maxIdleConns int32) error {
246278
if reverseProxyId <= 0 {
247279
return errors.New("invalid reverseProxyId")
248280
}
@@ -269,6 +301,38 @@ func (this *ReverseProxyDAO) UpdateReverseProxy(tx *dbs.Tx, reverseProxyId int64
269301
}
270302
op.AddHeaders = addHeadersJSON
271303

304+
if connTimeout != nil {
305+
connTimeoutJSON, err := connTimeout.AsJSON()
306+
if err != nil {
307+
return err
308+
}
309+
op.ConnTimeout = connTimeoutJSON
310+
}
311+
if readTimeout != nil {
312+
readTimeoutJSON, err := readTimeout.AsJSON()
313+
if err != nil {
314+
return err
315+
}
316+
op.ReadTimeout = readTimeoutJSON
317+
}
318+
if idleTimeout != nil {
319+
idleTimeoutJSON, err := idleTimeout.AsJSON()
320+
if err != nil {
321+
return err
322+
}
323+
op.IdleTimeout = idleTimeoutJSON
324+
}
325+
if maxConns >= 0 {
326+
op.MaxConns = maxConns
327+
} else {
328+
op.MaxConns = 0
329+
}
330+
if maxIdleConns >= 0 {
331+
op.MaxIdleConns = maxIdleConns
332+
} else {
333+
op.MaxIdleConns = 0
334+
}
335+
272336
err = this.Save(tx, op)
273337
if err != nil {
274338
return err

internal/db/models/reverse_proxy_model.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ type ReverseProxy struct {
1818
AddHeaders string `field:"addHeaders"` // 自动添加的Header列表
1919
State uint8 `field:"state"` // 状态
2020
CreatedAt uint64 `field:"createdAt"` // 创建时间
21+
ConnTimeout string `field:"connTimeout"` // 连接超时时间
22+
ReadTimeout string `field:"readTimeout"` // 读取超时时间
23+
IdleTimeout string `field:"idleTimeout"` // 空闲超时时间
24+
MaxConns uint32 `field:"maxConns"` // 最大并发连接数
25+
MaxIdleConns uint32 `field:"maxIdleConns"` // 最大空闲连接数
2126
}
2227

2328
type ReverseProxyOperator struct {
@@ -37,6 +42,11 @@ type ReverseProxyOperator struct {
3742
AddHeaders interface{} // 自动添加的Header列表
3843
State interface{} // 状态
3944
CreatedAt interface{} // 创建时间
45+
ConnTimeout interface{} // 连接超时时间
46+
ReadTimeout interface{} // 读取超时时间
47+
IdleTimeout interface{} // 空闲超时时间
48+
MaxConns interface{} // 最大并发连接数
49+
MaxIdleConns interface{} // 最大空闲连接数
4050
}
4151

4252
func NewReverseProxyOperator() *ReverseProxyOperator {

internal/rpc/services/service_reverse_proxy.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
77
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
8+
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
89
"github.com/iwind/TeaGo/types"
910
)
1011

@@ -214,7 +215,32 @@ func (this *ReverseProxyService) UpdateReverseProxy(ctx context.Context, req *pb
214215

215216
tx := this.NullTx()
216217

217-
err = models.SharedReverseProxyDAO.UpdateReverseProxy(tx, req.ReverseProxyId, types.Int8(req.RequestHostType), req.RequestHost, req.RequestURI, req.StripPrefix, req.AutoFlush, req.AddHeaders)
218+
// 校验参数
219+
var connTimeout = &shared.TimeDuration{}
220+
if len(req.ConnTimeoutJSON) > 0 {
221+
err = json.Unmarshal(req.ConnTimeoutJSON, connTimeout)
222+
if err != nil {
223+
return nil, err
224+
}
225+
}
226+
227+
var readTimeout = &shared.TimeDuration{}
228+
if len(req.ReadTimeoutJSON) > 0 {
229+
err = json.Unmarshal(req.ReadTimeoutJSON, readTimeout)
230+
if err != nil {
231+
return nil, err
232+
}
233+
}
234+
235+
var idleTimeout = &shared.TimeDuration{}
236+
if len(req.IdleTimeoutJSON) > 0 {
237+
err = json.Unmarshal(req.IdleTimeoutJSON, idleTimeout)
238+
if err != nil {
239+
return nil, err
240+
}
241+
}
242+
243+
err = models.SharedReverseProxyDAO.UpdateReverseProxy(tx, req.ReverseProxyId, types.Int8(req.RequestHostType), req.RequestHost, req.RequestURI, req.StripPrefix, req.AutoFlush, req.AddHeaders, connTimeout, readTimeout, idleTimeout, req.MaxConns, req.MaxIdleConns)
218244
if err != nil {
219245
return nil, err
220246
}

0 commit comments

Comments
 (0)