反向代理中源站增加最大连接数、连接超时时间等参数

This commit is contained in:
GoEdgeLab
2021-03-25 21:18:50 +08:00
parent 5978ba69da
commit 82e6550741
4 changed files with 254 additions and 18 deletions

View File

@@ -7,6 +7,7 @@ import (
"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/serverconfigs/shared"
"github.com/iwind/TeaGo/actions"
"regexp"
"strings"
@@ -33,6 +34,9 @@ func (this *AddPopupAction) RunGet(params struct {
serverType := serverTypeResp.Type
this.Data["serverType"] = serverType
// 是否为HTTP
this.Data["isHTTP"] = serverType == "httpProxy" || serverType == "httpWeb"
this.Show()
}
@@ -44,8 +48,15 @@ func (this *AddPopupAction) RunPost(params struct {
Protocol string
Addr string
Name string
Description string
IsOn bool
ConnTimeout int
ReadTimeout int
MaxConns int32
MaxIdleConns int32
IdleTimeout int
Description string
IsOn bool
Must *actions.Must
}) {
@@ -61,6 +72,33 @@ func (this *AddPopupAction) RunPost(params struct {
host := addr[:portIndex]
port := addr[portIndex+1:]
connTimeoutJSON, err := (&shared.TimeDuration{
Count: int64(params.ConnTimeout),
Unit: shared.TimeDurationUnitSecond,
}).AsJSON()
if err != nil {
this.ErrorPage(err)
return
}
readTimeoutJSON, err := (&shared.TimeDuration{
Count: int64(params.ReadTimeout),
Unit: shared.TimeDurationUnitSecond,
}).AsJSON()
if err != nil {
this.ErrorPage(err)
return
}
idleTimeoutJSON, err := (&shared.TimeDuration{
Count: int64(params.IdleTimeout),
Unit: shared.TimeDurationUnitSecond,
}).AsJSON()
if err != nil {
this.ErrorPage(err)
return
}
createResp, err := this.RPC().OriginRPC().CreateOrigin(this.AdminContext(), &pb.CreateOriginRequest{
Name: params.Name,
Addr: &pb.NetworkAddress{
@@ -68,9 +106,14 @@ func (this *AddPopupAction) RunPost(params struct {
Host: host,
PortRange: port,
},
Description: params.Description,
Weight: params.Weight,
IsOn: params.IsOn,
Description: params.Description,
Weight: params.Weight,
IsOn: params.IsOn,
ConnTimeoutJSON: connTimeoutJSON,
ReadTimeoutJSON: readTimeoutJSON,
IdleTimeoutJSON: idleTimeoutJSON,
MaxConns: params.MaxConns,
MaxIdleConns: params.MaxIdleConns,
})
if err != nil {
this.ErrorPage(err)

View File

@@ -6,8 +6,10 @@ import (
"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/serverconfigs/shared"
"github.com/iwind/TeaGo/actions"
"github.com/iwind/TeaGo/maps"
"github.com/iwind/TeaGo/types"
"regexp"
"strings"
)
@@ -39,6 +41,10 @@ func (this *UpdatePopupAction) RunGet(params struct {
return
}
this.Data["serverType"] = serverTypeResp.Type
serverType := serverTypeResp.Type
// 是否为HTTP
this.Data["isHTTP"] = serverType == "httpProxy" || serverType == "httpWeb"
// 源站信息
originResp, err := this.RPC().OriginRPC().FindEnabledOriginConfig(this.AdminContext(), &pb.FindEnabledOriginConfigRequest{OriginId: params.OriginId})
@@ -54,14 +60,34 @@ func (this *UpdatePopupAction) RunGet(params struct {
return
}
connTimeout := 0
readTimeout := 0
idleTimeout := 0
if config.ConnTimeout != nil {
connTimeout = types.Int(config.ConnTimeout.Count)
}
if config.ReadTimeout != nil {
readTimeout = types.Int(config.ReadTimeout.Count)
}
if config.IdleTimeout != nil {
idleTimeout = types.Int(config.IdleTimeout.Count)
}
this.Data["origin"] = maps.Map{
"id": config.Id,
"protocol": config.Addr.Protocol,
"addr": config.Addr.Host + ":" + config.Addr.PortRange,
"weight": config.Weight,
"name": config.Name,
"description": config.Description,
"isOn": config.IsOn,
"id": config.Id,
"protocol": config.Addr.Protocol,
"addr": config.Addr.Host + ":" + config.Addr.PortRange,
"weight": config.Weight,
"name": config.Name,
"description": config.Description,
"isOn": config.IsOn,
"connTimeout": connTimeout,
"readTimeout": readTimeout,
"idleTimeout": idleTimeout,
"maxConns": config.MaxConns,
"maxIdleConns": config.MaxIdleConns,
}
this.Show()
@@ -76,8 +102,15 @@ func (this *UpdatePopupAction) RunPost(params struct {
Addr string
Weight int32
Name string
Description string
IsOn bool
ConnTimeout int
ReadTimeout int
MaxConns int32
MaxIdleConns int32
IdleTimeout int
Description string
IsOn bool
Must *actions.Must
}) {
@@ -93,7 +126,34 @@ func (this *UpdatePopupAction) RunPost(params struct {
host := addr[:portIndex]
port := addr[portIndex+1:]
_, err := this.RPC().OriginRPC().UpdateOrigin(this.AdminContext(), &pb.UpdateOriginRequest{
connTimeoutJSON, err := (&shared.TimeDuration{
Count: int64(params.ConnTimeout),
Unit: shared.TimeDurationUnitSecond,
}).AsJSON()
if err != nil {
this.ErrorPage(err)
return
}
readTimeoutJSON, err := (&shared.TimeDuration{
Count: int64(params.ReadTimeout),
Unit: shared.TimeDurationUnitSecond,
}).AsJSON()
if err != nil {
this.ErrorPage(err)
return
}
idleTimeoutJSON, err := (&shared.TimeDuration{
Count: int64(params.IdleTimeout),
Unit: shared.TimeDurationUnitSecond,
}).AsJSON()
if err != nil {
this.ErrorPage(err)
return
}
_, err = this.RPC().OriginRPC().UpdateOrigin(this.AdminContext(), &pb.UpdateOriginRequest{
OriginId: params.OriginId,
Name: params.Name,
Addr: &pb.NetworkAddress{
@@ -101,9 +161,14 @@ func (this *UpdatePopupAction) RunPost(params struct {
Host: host,
PortRange: port,
},
Description: params.Description,
Weight: params.Weight,
IsOn: params.IsOn,
Description: params.Description,
Weight: params.Weight,
IsOn: params.IsOn,
ConnTimeoutJSON: connTimeoutJSON,
ReadTimeoutJSON: readTimeoutJSON,
IdleTimeoutJSON: idleTimeoutJSON,
MaxConns: params.MaxConns,
MaxIdleConns: params.MaxIdleConns,
})
if err != nil {
this.ErrorPage(err)

View File

@@ -47,6 +47,70 @@
<p class="comment">给当前源站起一个容易识别的名称。</p>
</td>
</tr>
<tr>
<td>连接失败超时时间</td>
<td>
<div class="ui fields inline">
<div class="ui field">
<input type="text" name="connTimeout" value="10" size="6"/>
</div>
<div class="ui field">
</div>
</div>
<p class="comment">连接源站失败的最大超时时间0表示不限制。</p>
</td>
</tr>
<tr v-if="isHTTP">
<td>读取超时时间</td>
<td>
<div class="ui fields inline">
<div class="ui field">
<input type="text" name="readTimeout" value="0" size="6"/>
</div>
<div class="ui field">
</div>
</div>
<p class="comment">读取内容时的最大超时时间0表示不限制。</p>
</td>
</tr>
<tr>
<td>最大并发连接数</td>
<td>
<div class="ui fields inline">
<div class="ui field">
<input type="text" name="maxConns" value="0" size="6" maxlength="10"/>
</div>
</div>
<p class="comment">源站可以接受到的最大并发连接数0表示使用系统默认。</p>
</td>
</tr>
<tr v-if="isHTTP">
<td>最大空闲连接数</td>
<td>
<div class="ui fields inline">
<div class="ui field">
<input type="text" name="maxIdleConns" value="0" size="6" maxlength="10"/>
</div>
</div>
<p class="comment">当没有请求时源站保持等待的最大空闲连接数量0表示使用系统默认。</p>
</td>
</tr>
<tr v-if="isHTTP">
<td>最大空闲超时时间</td>
<td>
<div class="ui fields inline">
<div class="ui field">
<input type="text" name="idleTimeout" value="0" size="6"/>
</div>
<div class="ui field">
</div>
</div>
<p class="comment">源站保持等待的空闲超时时间0表示使用默认时间。</p>
</td>
</tr>
<tr>
<td>备注</td>
<td>

View File

@@ -49,6 +49,70 @@
<p class="comment">给当前源站起一个容易识别的名称。</p>
</td>
</tr>
<tr>
<td>连接失败超时时间</td>
<td>
<div class="ui fields inline">
<div class="ui field">
<input type="text" name="connTimeout" value="10" size="6" v-model="origin.connTimeout"/>
</div>
<div class="ui field">
</div>
</div>
<p class="comment">连接源站失败的最大超时时间0表示不限制。</p>
</td>
</tr>
<tr v-if="isHTTP">
<td>读取超时时间</td>
<td>
<div class="ui fields inline">
<div class="ui field">
<input type="text" name="readTimeout" value="0" size="6" v-model="origin.readTimeout"/>
</div>
<div class="ui field">
</div>
</div>
<p class="comment">读取内容时的最大超时时间0表示不限制。</p>
</td>
</tr>
<tr>
<td>最大并发连接数</td>
<td>
<div class="ui fields inline">
<div class="ui field">
<input type="text" name="maxConns" value="0" size="6" maxlength="10" v-model="origin.maxConns"/>
</div>
</div>
<p class="comment">源站可以接受到的最大并发连接数0表示使用系统默认。</p>
</td>
</tr>
<tr v-if="isHTTP">
<td>最大空闲连接数</td>
<td>
<div class="ui fields inline">
<div class="ui field">
<input type="text" name="maxIdleConns" value="0" size="6" maxlength="10" v-model="origin.maxIdleConns"/>
</div>
</div>
<p class="comment">当没有请求时源站保持等待的最大空闲连接数量0表示使用系统默认。</p>
</td>
</tr>
<tr v-if="isHTTP">
<td>最大空闲超时时间</td>
<td>
<div class="ui fields inline">
<div class="ui field">
<input type="text" name="idleTimeout" value="0" size="6" v-model="origin.idleTimeout"/>
</div>
<div class="ui field">
</div>
</div>
<p class="comment">源站保持等待的空闲超时时间0表示使用默认时间。</p>
</td>
</tr>
<tr>
<td>备注</td>
<td>